Снова прошу помощи.
На данный момент существует: СП307 (мастер), ПЛК150 (слейв), модуль вывода МУ110-8Р (слейв). Приборы перечислены в порядке подключения.
ПЛК с панелью общаются через конфигурацию ПЛК, где прописан Модбас (слейв). При этом, если пробую писать в модуль из плк с помощью библиотеки Модбас.либ отваливается связь панели с ПЛК, что в принципе логично, вроде.
Не логично то, что она не восстанавливается после.
Предполагал, что вызов COM_SERVICE1(Task:=CLOSE_TSK) должен приводить к закрытию экземпляра устройства и связь между ПЛК и панелью должна восстановиться.Код: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
Странно, что закрытие компорта происходит вот так SysComClose(Settings.Port), когда функции должен передаваться открытый хендл, а не порт. Исправил это, но результата нет.
По сути вопрос тот же, что и в заголовке темы и в первом посте. Есть устройство мастер, есть два устройства слейв. Слейвы хочу коммутировать с помощью библиотеки, но отваливается связь с мастером. Что я делаю не так? Как правильно?
PS. Сейчас попробую перекинуть ПЛК в конец цепочки подключения (если предположить, что во время опроса модуля он является мастером, то на данный момент он подключен звездой), сообщу о результате, но не думаю что поможет.




Ответить с цитированием