MB_REMOTE_IP - получение/установка IP-адреса

Назначение.
Функциональный блок MB_REMOTE_IP применяется совместно с блоком MB_TCP_MST для динамического изменения или чтения IP-адреса Slave-устройства.
Входные параметры:
|
Параметр
|
Тип данных
|
Описание
|
|
ID_DRV
|
INTEGER
|
Идентификатор задачи связи Modbus-TCP MST, в рамках которой будет отправлен запрос на изменение IP-адреса.
|
|
IP
|
INTEGER
|
Целочисленное значение нового IP-адреса Slave-устройства (для записи) или значение 0 (для чтения).
|
Выходные параметры:
|
Параметр
|
Тип данных
|
Описание
|
|
FAULT
|
INTEGER
|
Выводится текущий IP-адрес удаленного Slave-устройства (при чтении) или код ошибки по результатам выполнения операции, список возможных ошибок описан в конце раздела 9.9.1.1 «MB_RTU_MST - конфигурация связи по протоколу Modbus-RTU Master».
|
Описание алгоритма.
Входной параметр ID_DRV используется для привязки блока к задаче связи MB_TCP_MST.
Для изменения текущего IP-адреса удаленного Slave-устройства, передайте на вход IP новое значение адреса в виде целого числа. Для преобразования IP-адреса из строкового формата в целочисленный используйте функцию TO_IP_ADDR. После чего, текущий IP-адрес будет изменен на Slave-устройстве и в настройках задачи связи MB_TCP_MST, что должно подтверждаться отсутствием ошибок (выход FAULT=0). При этом входной параметр REMOTE_IP блока MB_TCP_MST с устаревшим значением IP-адреса будет игнорироваться.

Для чтения текущего IP-адреса Slave-устройства, передайте на вход IP значение 0. Это может потребоваться при многократных динамических изменениях IP-адреса Slave-устройства. Полученное значение IP-адреса при отсутствии ошибок будет передано на выход FAULT в виде целочисленного значения. Для преобразования в строковый формат используйте функцию FROM_IP_ADDR.

Пример вызова блока на языке ST.
Для избежания ошибок при использовании блока MB_REMOTE_IP совместно с блоком MB_TCP_MST, необходимо использовать условные выражения и вызывать блоки только при необходимости. Без использования условий, оба блока будут вызываться в каждом цикле контроллера, постоянно изменяя IP-адрес, по которому необходимо отправить запрос. Пример продемонстрирован на следующем изображении.
//Неправильно! Блоки будут мешать друг другу, постоянно меняя IP-адрес, к которому хотим обратиться
MST.MB_TCP_MST(RUN, ID_DRV, IP_REMOTE, PORT_REMOTE, PARAM, TOUT, DELAY);
REMOTE.MB_REMOTE_IP(ID_DRV, IP);
//Правильно! Блоки вызываются по необходимости
if (flag_mb_tcp_mst = TRUE) then
flag_mb_tcp_mst := FALSE;
MST.MB_TCP_MST(RUN, ID_DRV, IP_REMOTE, PORT_REMOTE, PARAM, TOUT, DELAY);
end_if;
if (flag_mb_remote_ip = TRUE) then
flag_mb_remote_ip := FALSE;
REMOTE.MB_REMOTE_IP(ID_DRV, IP);
end_if;
|
