Вход

Просмотр полной версии : РЕШЕНО. Codesys 3.5.5.0 Исключение при работе тревоги. Странное поведение



Нидвораич
12.05.2025, 07:37
Привет. Может, кому пригодится. Просидел несколько часов, пытаясь побороть вылетающее исключение.

В журнале написано следующее:

*SOURCEPOSITION* App=[Application] area=0, offset=1877235 компонент: CmpIecTask
*EXCEPTION* [AccessViolation] occured: App=[Application], Task=[VISU_TASK] компонент: CmpIecTask

Дело было вот в чём: у меня в группе тревог есть сообщения типа "Контактор компонента <LATCH1> залип", первая триггерная переменная указана просто числом.
Мне так было проще - на надо лезть в исправление строки, чтоб изменить номер контактора.
Выглядело это следующим образом:

83716

И всё работало нормально, пока на отладке я не обратил внимание, что иногда программа падает в исключение и завершается.
Постепенно я дошёл до того, что исключение проявляется только при тревоге по первому контактору.
Попробовал заменить "Контактор компонента <LATCH1> залип" на "Контактор компонента 1 залип" и убрать единицу из первой триггерной переменной - всё стало работать без падений.

Предполагаю, что система воспринимает единицу не как единицу, а как какой-нибудь TRUE, не понимает, что с этим делать, и, матерясь, умирает.
Такие вот дела. Может, кому-то сэкономит нервов.

З.Ы.: я видел ролик на канале Евгения про тревоги однотипных объектов, но даже не стал проверять - работает ли это на 3.5.5.0. Для семи объектов набросал вручную. Хотел ускориться за счёт лэтчей - потерял несколько часов :)

Cs-Cs
12.05.2025, 11:56
...а попробуй триггерную переменную воткнуть в кавычках, как WSTRING, а?
В смысле, не 1, а "1"

Нидвораич
13.05.2025, 12:00
...а попробуй триггерную переменную воткнуть в кавычках, как WSTRING, а?
В смысле, не 1, а "1"

к сожалению, версия 3.5.5.0 ещё не умеет понимать текст в этих переменных. Но на всякий случай проверил. Вот результат на '1':
83746
а вот результат на "1":
83745

Задумкин Сергей
13.05.2025, 12:40
В 3.5.17 у меня как то он не корректно воспринимал текст в кавычках прямо в LATCH. В половине записей отображалось, в половине было "???". Я заводил отдельную текстовую переменную, в нее писал что мне надо и уже ее присваивал в LATCH.

Была такая проблема с тревогами: в момент запуска ПЛК появлялась фантомная активная тревога, причем увидеть ее можно было только переключив таблицу в режим истории. И притом она отображалась не в своем классе (т.е. тревога была описана как Alarm, но фантом появлялся как Warning). Перепробовал все что можно, на LATCH тоже думал всякое. Выяснилось, что подобная дичь вылезает когда у меня группы тревог были сгруппированы по папкам в дереве "Alarm Configuration". Как только удалил все папки в Alarm Configuration, то все заработало как надо.

Это я к тому, что проблема иногда вылазит в самом неожиданном месте.