Просмотр полной версии : Ошибка связи между ПЛК110-60[М2] и модулями МВ110-224.8А
W1nn1ep00h
30.12.2021, 08:38
Имеется контроллер ПЛК110-60[М02] и аналоговые модули ввода МВ110-224.8А.
Вылетает постоянно ошибка по RS-485 с кодом 81. При этом есть задержка на появление ошибок связи(см.код), при чем очень длительная(2m). И все равно время от времени она вылетает.
С Codesys не работал лет 10, поэтому на всякий случай выкладываю код. :
IF MB_L_ADDR = 2 AND MB_L_ERR <> 0 AND NOT AlarmVariables.ErrorCode[2].6 THEN
(*Отсчет времени проверки ошибки*)
TON_Err38(IN := TRUE, PT := T#2m);
IF TON_Err38.Q THEN
(*Авария не ушла, выставляем флаг ошибки*)
(*Выставляем флаг аварии*)
AlarmVariables.ErrorCode[2].6 := TRUE;
(*Получаем последнюю ошибку модуля*)
LastError_A2 := MB_L_ERR;
(*Сброс квитирования звука*)
KvitErrors := FALSE;
(*Сброс таймера*)
TON_Err38(IN:= FALSE);
END_IF;
ELSE
(*Если флуктуация, то скидываем таймер*)
IF (TON_Err38.Q OR TIME_TO_DWORD(TON_Err38.ET) <> 0) THEN
(*Делаем сброс таймера*)
TON_Err38(IN:= FALSE);
END_IF;
(*Сбрасываем ошибку*)
IF NOT AlarmVariables.ErrorCode[2].6 AND LastError_A2 <> 0 THEN LastError_A2 := 0; END_IF;
END_IF;
Данные модулей :
ПЛК110-60[М2] -> прошивка - 1.2.42 , таргет - 3.3
Модули МВ110-224.8А -> прошивка - 2.1
Ты показал код, которым ты отслеживаешь ошибку. Но не показал то, как ты модуль опрашиваешь и при помощи чего.
Вот тебе мои тезисы и идеи:
1. Если читать .8А групповыми запросами (когда читаешь сразу много-много регистров подряд, как я тут писал - https://owen.ru/forum/showthread.php?t=35094) - иногда модуль отваливается с ошибкой. Так как читаю подряд - то на это пофиг, но сам факт - есть, да. И из-за него все обычные алгоритмы проверки на ошибки сразу и считают это потерей связи.
2. В своих алгоритмах обработки ошибок я написал мутную (но рабочую) конструкцию, которая проверяет СЕРИИ ошибок подряд. Точнее, отсуствие серий ошибок подряд в течение заданного времени.
Алгоритм там примерно такой, кривой:
а) По каждой ошибке запускаем таймер времени TOF, чтобы он считал заданную выдержку. Пусть будет зваться tError.
б) По его выходу запускаем таймер времени TON с выдержкой большей, чем у первого. Пусть будет зваться tSeries.
С выхода tSeries забираем сигнал "Авария" (если он включен) или "ОКей" (если выключен).
То есть, у меня тревога поднимается, условно "...если попёрли ошибки чаще чем tError в течение tSeries - тогда модуль отвалился".
W1nn1ep00h
09.01.2022, 16:49
Ты показал код, которым ты отслеживаешь ошибку. Но не показал то, как ты модуль опрашиваешь и при помощи чего.
Вот тебе мои тезисы и идеи:
1. Если читать .8А групповыми запросами (когда читаешь сразу много-много регистров подряд, как я тут писал - https://owen.ru/forum/showthread.php?t=35094) - иногда модуль отваливается с ошибкой. Так как читаю подряд - то на это пофиг, но сам факт - есть, да. И из-за него все обычные алгоритмы проверки на ошибки сразу и считают это потерей связи.
2. В своих алгоритмах обработки ошибок я написал мутную (но рабочую) конструкцию, которая проверяет СЕРИИ ошибок подряд. Точнее, отсуствие серий ошибок подряд в течение заданного времени.
Алгоритм там примерно такой, кривой:
а) По каждой ошибке запускаем таймер времени TOF, чтобы он считал заданную выдержку. Пусть будет зваться tError.
б) По его выходу запускаем таймер времени TON с выдержкой большей, чем у первого. Пусть будет зваться tSeries.
С выхода tSeries забираем сигнал "Авария" (если он включен) или "ОКей" (если выключен).
То есть, у меня тревога поднимается, условно "...если попёрли ошибки чаще чем tError в течение tSeries - тогда модуль отвалился".
Уезжал на праздники, вот настройки из Codesys, опрос по 485. Все в скриншотах приложил. Настройки самих модулей(для аналоговых разные только адреса) и соответстенно, что в программе.
https://i116.fastpic.org/thumb/2022/0109/76/_474fec8b616c74fe3a570da99c1d4176.jpeg (https://fastpic.org/view/116/2022/0109/_474fec8b616c74fe3a570da99c1d4176.jpeg.html) https://i116.fastpic.org/thumb/2022/0109/b1/_d4d03250cd53fa80e07ac7ca93acafb1.jpeg (https://fastpic.org/view/116/2022/0109/_d4d03250cd53fa80e07ac7ca93acafb1.jpeg.html) https://i116.fastpic.org/thumb/2022/0109/82/96af82e6cb12cd3e109a444efed2cb82.jpeg (https://fastpic.org/view/116/2022/0109/96af82e6cb12cd3e109a444efed2cb82.png.html) https://i116.fastpic.org/thumb/2022/0109/b2/_6750f40d296d8e098f3aba45f46c1eb2.jpeg (https://fastpic.org/view/116/2022/0109/_6750f40d296d8e098f3aba45f46c1eb2.png.html) https://i116.fastpic.org/thumb/2022/0109/18/_80b5aafc75fd7fe280267a36aa375518.jpeg (https://fastpic.org/view/116/2022/0109/_80b5aafc75fd7fe280267a36aa375518.png.html)
Валенок Поддерживаю. ОВЕНский форум же даёт вставлять нормально картинки.
W1nn1ep00h По криво рассмотренным картинкам вроде всё ОК. Можешь поиграться ил framing time (сделать его 2-5-10 мсек, если это не будет влиять на скорость), сделать по моему примеру через STRING (Валенок верно говорит, и спасибо ему за советы - тема офи**нская), и поиграться с самим алгоритмом-детектором ошибок.
W1nn1ep00h
09.01.2022, 22:56
Заместо рекламного дерьма выложил бы проект, пользы больше было б.
PS
Со строками проще :
по 1 запросу для каждого 8А (2..3 сек polltime)
+ 1 запрос в 8Р (both по ходу)
Я на автомате через хост картинок,извеняйте. По поводу сделать, через строки попробую. А вообще , я так понимаю это такая особенность 110+их же модулей? Или просто косячный таргет и нужно откатится на более проверенный(если да, то скажите какой)?
W1nn1ep00h Я использую такие модули:
* .16ДН
* .32ДН
* .16Р
* .32Р
* .8А
* .6У
Время опроса всех модулей на ПЛК110, кроме .8А у меня обычно окол 15-25 мсек. Время опроса .8А - 1-2 секунды.
Вот сбои связи есть обычно только с .8А, и по ходу это фишка модуля - что иногда он тупит в ответах на запрос, что при обычном конфигурировании, что по STRING.
Поэтому штатные средства опроса, которые на это сразу же выдают ошибку, меня не устраивали, и я написал свою обёртку, алгоритм которой сказал выше. Она на одиночные провалы связи не реагирует, а реагирует только на полный отвал модуля со связи, что мне и требуется.
W1nn1ep00h
13.01.2022, 17:01
W1nn1ep00h Я использую такие модули:
* .16ДН
* .32ДН
* .16Р
* .32Р
* .8А
* .6У
Время опроса всех модулей на ПЛК110, кроме .8А у меня обычно окол 15-25 мсек. Время опроса .8А - 1-2 секунды.
Вот сбои связи есть обычно только с .8А, и по ходу это фишка модуля - что иногда он тупит в ответах на запрос, что при обычном конфигурировании, что по STRING.
Поэтому штатные средства опроса, которые на это сразу же выдают ошибку, меня не устраивали, и я написал свою обёртку, алгоритм которой сказал выше. Она на одиночные провалы связи не реагирует, а реагирует только на полный отвал модуля со связи, что мне и требуется.
В алгоритме проверки ошибки модуля для tError и tSeries, какие обычно берете интервалы?
tError - 500-1000 мсек, tSeries - 1500-2000 мсек
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot