PDA

Просмотр полной версии : Надежность Modbus и регистры ошибок



alex1963
30.01.2009, 22:41
На шине RS-485/Modbus иногда случаются ошибки :(.

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

Вот простой пример. Имеются два слейва, например, МДВВ №1 с адресом 16 и МДВВ №2 с адресом 32. Отключим МДВВ №2 от 485 совсем и запустим такую программу (разумеется, назначив last_address и last_error на соответствующие %Q - а почему, кстати %Q, а не %I?)
VAR
mdvv1_fault: BOOL:=FALSE;
mdvv2_fault: BOOL:=FALSE;
mdvv1_ok: BOOL:=FALSE;
mdvv2_ok: BOOL:=FALSE;
END_VAR
IF last_error<>0 AND last_address=16 THEN
mdvv1_fault:=TRUE;
END_IF
IF last_error<>0 AND last_address=32 THEN
mdvv2_fault:=TRUE;
END_IF
IF last_error=0 AND last_address=16 THEN
mdvv1_ok:=TRUE;
END_IF
IF last_error=0 AND last_address=32 THEN
mdvv2_ok:=TRUE;
END_IF
У меня обнаруживается, что через некоторое время все 4 переменные становятся TRUE! Ну ладно, допустим, mdvv1_fault ловит какие-то редкие ошибки исправного МДВВ, но как устанавливается mdvv2_ok?

Может, не нужно углубляться в эти тонкости? Тогда ближе к практике - кто подскажет, как сделать такой ФБ:
FUNCTION_BLOCK Reliable_Modbus_Input
VAR_INPUT
Input_Reg AT %I*: WORD;(* Регистр Modbus уст-ва *)
END_VAR
VAR OUTPUT
Fault: BOOL;(* TRUE, если ни разу не удалось прочитать из устройства без ошибки за некоторое время, например,0.5 с *)
Value: WORD;(* Значение, считанное при последнем удачом обмене *)
END_VAR
Т. е. единичные сбои нужно игнорировать, удерживая старое значение (Modbus-master при сбое выдает все нули, что во многих задачах совершенно недопустимо, даже если это случается раз в сутки!). А длительное прерывание обмена диагностировать как неисправность.

Филоненко Владислав
31.01.2009, 16:31
1. Оставьте контроль только ошибок.
2. Условие должно выглядеть так:
IF last_error=81 AND last_address=16 THEN

<>0 - слишком общее.

Зуйков Александр
12.02.2009, 20:27
я пытался такой if сделать, чтобы проверять адрес и 81, но до конца не довел, ибо вот так в лоб все равно ошибки устанавливаются. 81 моргает периодически, так что когда разберусь с новой панелью, буду думать, как сюда таймер прикрутить или еще что, чтоб только статическую ошибку ловить.

Crusash
07.12.2009, 13:26
Здравствуйте.
у меня ПЛК 150, по 485у подключены МВУ и МВА, протокол ModBus RTU, скорость максимальная 115200.
Контролирую ошибку связи 81: в минуту проходит от трёх ошибок и больше. на ошибку стоит задержка в три минуты, но иногда ошибка длится дольше(даже когда система в ожидании и нет никаких вибраций) и у меня проходит авария.
Подскажите, на какие настройки связи ПЛК, МВУ и МВА следует обратить внимание чтобы свести к минимуму эту ошибку?

Crusash
07.12.2009, 15:29
плиззз, ответе мне пожалуста сегодня,
мне второй раз(впервый раз ограничился увеличением таймера ошибки, не помогло) из-за этой ошибки в москву в эту ночь переться нужно, а что делать я догадываюсь, но смутно...
к тому же у них там на предприятии с интернетом туго (потолончикам))), а мой модем в ноуте тормознутый и очень не надёжный - поэтому от туда до форума я вряд ли доберусь..
войдите в положение!!!пожалуйста!!!

МИХАИЛ
07.12.2009, 15:52
попробуйте уменьшать скорость обмена постепенно. если ошибки пропадут
, надо смотреть электро магнитную совместимость (при условии если все остальное о*кей). с уважением михаил.

Crusash
07.12.2009, 16:07
спасибо, завтра попробую...
думаю на этот раз всё получится,
но на всякий случай возьму с собой бубны и шаманские палочки)))

DARNER
07.12.2009, 20:09
достали уже меня эти бубны....:mad:

Филоненко Владислав
09.12.2009, 13:22
1. по любому протоколу и интерфейсу всегда будут ошибки в реальных условиях. важен их процент.
2. неправильная настройка сети увеличивает процент ошибок.
3. скорость максимальная 115200 - а какова длина линии? 115200 - это ну метра 2-3, максимум 5 хорошим кабелем. дальше без гарантии.
4. вы под бубнами подразумеваете "надо что-то делать и читать документацию"? тогда да, продукция фирмы овен требует бить в бубен.

Crusash
14.12.2009, 11:22
длинна кабелюки малая, по 15 см от блока до блока. силовых рядом нет.
оказалось что по скорости я ошибся,там стоит 38400. переделывать не стал. вместо этого уменьшил частоту опроса с 100мс до 1с - количество ошибочных пакетов на порядок уменьшилось, аж до 0.1% (примечательно что подавляющее количество ошибок по адресу 32-мву, по адрессу 8-мва даже не наблюдал). добавил архивацию ошибок.
уезжал я в этот же день, на утро по приезду мне сообщили что на 15ом часе опять сработала ошибка связи по модбасу (задержка на всплытие ошибки 30с).
ошибки у меня генерятся в одном месте, поэтому программный глюк маловероятен.
на днях поеду снова, пробуду несколько дней, посмотрю архив, покурю бамбук и отключу нах эту ошибку, посмотрю что будет... о результатах сообщу...

Crusash
14.12.2009, 11:34
ещё заметил такую вещь: если физически отсоединить модбас от плк - ошибка пройдёт как надо,
а если отключить какойто отдельный блок то ошибка не пройдёт, вернее она пройдёт, но в следущий цикл сбросится так как другой блок ответит на запрос...
в свете этого я даже не знаю каким образом эта ошибка у меня вообще может возникнуть, хоть через 10 хоть через 60 часов!!!

Филоненко Владислав
14.12.2009, 14:57
не понял алгоритм контроля ошибок. есть ли фильтрация?

Crusash
14.12.2009, 15:22
Не, я никак не фильтрую, контролирую регистр Last Error на 81 ошибку с задержкой тревоги в 30сек.
Смотрите пост №10...

Crusash
14.12.2009, 15:43
Наверное откажусь от использования стандартного регистра ошибок Модбаса "Last error". Буду в МВА контролировать изменения "Cycle time", если встанет - значит обрыв...
А как контролировать связ с МВУ?