Вот прога за вычетом всего лишнего
Добавил таймер, чтобы опрашивало каждые 5 секунд по совету lara197a. Не помогло.IF port_opened=2 THEN (*Удачно проинициализировали *)
CASE Init OF
1:
MB_03( (*модбас функция 03*)
Enable:=1 , (*разрешение работы блока *)
Mode:=MB_RTU , (*режим передачи*)
DevAddr:=4 , (*адрес*)
FirstAddr:=16#1000, (*регистр*)
Quantity:=1, (*количество регистров*)
ComHandle:= Settings.Port, (*номер сом-порта*)
TimeOut:=t#50ms , (*таймаут T#50ms*)
Buffer:=Buffer, (* буфер данных *)
);
IF MB_03.Complete THEN
x:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8);
Init:=Init+1;
END_IF;
2:
TON1(IN:=1,PT:=t#5s);
IF TON1.Q THEN
Init:=1;
TON1(IN:=0);
END_IF;
END_CASE;
END_IF;
Для иллюстрации вот сделал скрин терминала.
Безымянный.PNG
На картинке синим выделил запрос, желтым нормальный ответ, красным ненормальный ответ, после которого ПЛК перезагружался.
На первом красном ответе видно, что частотник пытался ответить правильно, поскольку ЦРЦ совпадает с правильным ответом, только вот первый байт вместо 04 - 82.
Второй красный - полная чушь.
После него значение в регистре изменилось, 4 правильных ответа, а потом опять чушь: 40 60 62 54 93, за ним сразу опять неверный ответ, который имеет много общего с предыдущим ответом b0 40 60 62 54 93. следующий неверный ответ потерял первый байт, ЦРЦ ответа правильного, затем опять чушь.
Разобрался. В настройках порта количество стоповых бит 1 - означает 1,5, а 0 - 1. Ошибки связи не пропали, но ПЛК больше не перезагружается. Вдруг кто с таким же столкнется. Меня удивляет, что были правильные ответы при неправильных настройках.




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