PDA

Просмотр полной версии : Хочу знать, какое именно устройство в сети modbus отвалилось.



Lode Runner
04.12.2013, 08:24
Вот такой код работает на уже многих объектах.
Контроллеры - ПЛК110 в основном.


al[last_address] := last_error <> 0;

TONF1 (in := al[5], tp := time_wait, q => ALARM_stratos5);
TONF2 (in := al[6], tp := time_wait, q => ALARM_stratos6);
TONF3 (in := al[16], tp := time_wait, q => ALARM_mv110_16);
TONF4 (in := al[32], tp := time_wait, q => ALARM_mv110_32);

TONF-ы - это экземпляры FB, в которых in идёт на вход TON, TON.q идёт на вход TOF, а TOF.q отдаётся в TONF*.q
al: ARRAY[5..32] OF BOOL;
time_wait равен 5 секундам.
slave-устройства объявлены через конфигурацию ПЛК, last_address и last_error тоже взяты оттуда.

Вроде всё было хорошо, но на очередном объекте случилось так, что затянули с включением насосов в сеть, работают себе независимо от контроллера пока.
Видимо раз в 3-4 часа случается перехлёст успешного обмена с мв110 на время обмена с насосами и не на один-два цикла, а аж на больше чем 5 секунд.
Может кто-нибудь подсказать, как это можно обойти?

Lode Runner
04.12.2013, 08:27
В основном это не страшно, но идут СМС с этого объекта о том, что насос появился в сети и тут же о том, что пропал опять. Примерно раз в 3 - 4 часа, случайный из двух насосов.
Сейчас жду очередного такого случая чтобы замерить время, на которое насос "появляется" в сети и увеличить соответственно time_wait.
Но хочется всё же разобраться, как так получается, как вообще возможно, чтобы это время было больше 5 секунд. Время цикла ПЛК держится около 30 мс +- 5 мс.

Lode Runner
06.12.2013, 14:21
Разрешилось.
Оказывается, когда контроллер переходит к опросу следующего устройства в конфигурации, он может ровно на один цикл last_address переключить на адрес следующего устройства, а last_error ещё не обновить.
Выяснил когда обвешал всё что только можно флагами и таймерами и посмотрел точно по времени что именно происходит при "появлении в сети" несуществующего устройства.
Вот так раньше выглядел ФБ TONF:
10981
TON вырубал вход TOF-у и 50/50, в зависимости от времени цикла, успевал или нет врубить обратно прежде чем возникнет авария. Устройство "появлялось в сети" ровно на один цикл.
Сейчас сделал так:
10982
То есть просто добавил TOF секунду времени.
После этого СМС стали вести себя так, как и ожидалось.