Снова прошу помощи.
На данный момент существует: СП307 (мастер), ПЛК150 (слейв), модуль вывода МУ110-8Р (слейв). Приборы перечислены в порядке подключения.
ПЛК с панелью общаются через конфигурацию ПЛК, где прописан Модбас (слейв). При этом, если пробую писать в модуль из плк с помощью библиотеки Модбас.либ отваливается связь панели с ПЛК, что в принципе логично, вроде.
Не логично то, что она не восстанавливается после.
Код:
IF port_opened=0 THEN
Settings.Port:=com_num; (*номер COM-порта*)
Settings.dwBaudRate:=115200; (*скорость*)
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=0;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK);
IF COM_SERVICE1.ready THEN
port_opened:=2;
END_IF
END_IF
IF port_opened=2 THEN (*Удачно проинициализировали*)
Buffer[1] := 16#E8;
Buffer[0] := 3;
send2_modbus(
Enable:= enabl, (* разрешение работы блока *)
Mode:=MB_ASCII , (*режим передачи*)
DevAddr:=16 , (*адрес*)
FirstAddr:= 1, (*номер регистра*)
Quantity:= 1, (*количество записываемых регистров*)
ComHandle:=Settings.Port ,(*номер сом-порта*)
TimeOut:=TimeOut , (*таймаут T#50ms*)
Buffer:=Buffer , (* буфер данных *)
Complete=>cmpl , (* скопировать признак завершения операции *)
Exception=>err , (* скопировать регистр ошибок *)
RegCnt=> DataSize); (*кол-во считанных байтов *)
(*если установлен признак завершения операции, то *)
END_IF
IF cmpl AND port_opened=2 THEN
enabl := FALSE;
port_opened:=3;
COM_SERVICE1(Task:=CLOSE_TSK);
END_IF
IF err <> 0 THEN
enabl := FALSE;
END_IF
Предполагал, что вызов COM_SERVICE1(Task:=CLOSE_TSK) должен приводить к закрытию экземпляра устройства и связь между ПЛК и панелью должна восстановиться.
Странно, что закрытие компорта происходит вот так SysComClose(Settings.Port), когда функции должен передаваться открытый хендл, а не порт. Исправил это, но результата нет.
По сути вопрос тот же, что и в заголовке темы и в первом посте. Есть устройство мастер, есть два устройства слейв. Слейвы хочу коммутировать с помощью библиотеки, но отваливается связь с мастером. Что я делаю не так? Как правильно?
PS. Сейчас попробую перекинуть ПЛК в конец цепочки подключения (если предположить, что во время опроса модуля он является мастером, то на данный момент он подключен звездой), сообщу о результате, но не думаю что поможет.