Вход

Просмотр полной версии : ПЛК210 в режиме TCP modbus slave не отвечает второму мастеру



TonyMilkers
31.05.2024, 11:48
День добрый.
Пытаюсь на библиотеке OwenCommunication 3.5.11.7 соорудить modbus slave для опроса несколькими мастерами:

PROGRAM cfgNetOut
VAR
fbMB_TcpSlave : OCL.MB_TcpSlave;
awSlaveData : ARRAY [0..4] OF WORD;
V_NetOut1 : WORD;
V_NetOut2 : WORD;
V_NetOut3 : WORD;
V_NetOut4 : WORD;
END_VAR

fbMB_TcpSlave(xEnable := TRUE, sIpAddr := '0.0.0.0', uiPort := 502, usiUnitId := 1, pData := ADR(awSlaveData), szSize := SIZEOF(awSlaveData));

awSlaveData[0] := V_NetOut4;
awSlaveData[1] := V_NetOut3;
awSlaveData[2] := V_NetOut2;
awSlaveData[3] := V_NetOut1;

В тестовой сети присутствуют три устройства: ПЛК в роли слейва и два ПК, на которых запускаются различные modbus-эмуляторы в роли мастеров.
Мастер подключается и получает нужные данные. Но при запуске второго мастера (на другом ПК, соответственно) он выдаёт ошибку подключения. Если остановить опрос с первого мастера, через несколько секунд второй мастер успешно подключается. Но тогда уже не может подключиться первый мастер. Попытки увеличить интерал между запросами от мастера до 1 секунды никак на результат не повлияли. В контроллере программа крутится с циклом 100 мс.

В какую сторону копать? Или больше одного мастера не может быть в принципе? Но зачем тогда поле usiCurrentCountClients у MB_TcpSlave?

Евгений Кислов
31.05.2024, 12:06
День добрый.
Пытаюсь на библиотеке OwenCommunication 3.5.11.7 соорудить modbus slave для опроса несколькими мастерами:

PROGRAM cfgNetOut
VAR
fbMB_TcpSlave : OCL.MB_TcpSlave;
awSlaveData : ARRAY [0..4] OF WORD;
V_NetOut1 : WORD;
V_NetOut2 : WORD;
V_NetOut3 : WORD;
V_NetOut4 : WORD;
END_VAR

fbMB_TcpSlave(xEnable := TRUE, sIpAddr := '0.0.0.0', uiPort := 502, usiUnitId := 1, pData := ADR(awSlaveData), szSize := SIZEOF(awSlaveData));

awSlaveData[0] := V_NetOut4;
awSlaveData[1] := V_NetOut3;
awSlaveData[2] := V_NetOut2;
awSlaveData[3] := V_NetOut1;

В тестовой сети присутствуют три устройства: ПЛК в роли слейва и два ПК, на которых запускаются различные modbus-эмуляторы в роли мастеров.
Мастер подключается и получает нужные данные. Но при запуске второго мастера (на другом ПК, соответственно) он выдаёт ошибку подключения. Если остановить опрос с первого мастера, через несколько секунд второй мастер успешно подключается. Но тогда уже не может подключиться первый мастер. Попытки увеличить интерал между запросами от мастера до 1 секунды никак на результат не повлияли. В контроллере программа крутится с циклом 100 мс.

В какую сторону копать? Или больше одного мастера не может быть в принципе? Но зачем тогда поле usiCurrentCountClients у MB_TcpSlave?

Добрый день.

Максимально допустимое число клиентов определяется глобальным параметром библиотеки g_c_usiMaxCountClients (вкладка Settings в дереве библиотеки в Менеджере библиотек). Значение по умолчанию – 1.
Вам нужно его изменить (прямо в менеджере библиотек).

76178

TonyMilkers
31.05.2024, 12:17
Огромное спасибо!