Вход

Просмотр полной версии : ПЛК 110-30 Codesys v2.3 Фиксация обрыва связи с МВА



tyoma1512
28.04.2026, 07:22
Добрый день. Подскажите пожалуйста.
Стоит ПЛК 110-30. К нему по RS-485 подключено 4 прибора МВА110.8А. По 2 прибора на канал.
Задача. Сделать так, чтобы при потери связи с одним из приборов (81 ошибка) фиксировалось стабильная ошибка потери связи. Сейчас же ошибка нестабильная ввиду того что ПЛК поочередно опрашивает приборы, в тот момент когда ПЛК опрашивает прибор, который на связи, по прибору с которым связь оборвана ошибки нет. Понимаю, что проблема в программном коде. Но так как не силен в программировании, переделать её не хватает мозгов. Фиксирование ошибки в стабильном состоянии нужно для клиента визуализации Мастер скада 4д. Должно ведь быть какое-то готовое решение, у кого как реализовано?

Код представлен ниже

err16 := Check_module_error_(number := 16, change_adress := last_address_16_40, error := last_error_16_40);

err24 := Check_module_error_(number := 24, change_adress := last_address_24_32, error := last_error_24_32);

err32 := Check_module_error_(number := 32, change_adress := last_address_24_32, error := last_error_24_32);

err40 := Check_module_error_(number := 40, change_adress := last_address_16_40, error :=last_error_16_40);



Ошибка в коде представленном ниже, так как изначально присваивается значение переменной 1. При опросе прибора (связь с которым есть) по прибору (связи с которым нет) значение равно 1. Получается следующая картина. По прибору с которым связи значение по потери связи непостоянно, оно меняется 1-2-1-2-1-2-1-2-1 и тд в моменты опроса.



Check_module_error_ := 1.0;
IF (number = change_adress AND error > 0) THEN
Check_module_error_ := 2.0;
END_IF;

За ранее прошу прощения, если написал непонятно или сумбурно. На работе оказались недобросовестные подрядчики сделали работу с кучей косяков, а мне приходится сейчас разгребать. Начал потихоньку вникать, но написать алгоритм правильный пока не получается. Уверен , что есть готовое решение по фиксации потери связи в стабильном состоянии. Спасибо!!!



Так же есть следующая проблема по данному ПЛК, может кто, что подскажет. При отключении питания от ПЛК, он потом не передает данные в ОВен клауд ,а также его не видит компьютер, в течение суток - 2 суток, потом все нормализуется. Данная проблема наблюдалась неоднократно. Может кто что подскажет? подключение к ПЛК выполненно через USB

МихаилГл
28.04.2026, 07:50
Ошибку надо делать квитируемой, а не самосбрасываемой. Т.е. зафиксировали ошибку, следовательно возвели бит ошибки, и пока оператор не подтвердит, что увидел ошибку, она так и будет взведенной.

In_Da_Cher_A
28.04.2026, 08:10
как сделана конфигурация и опрос модулей? какие настройки
4 модуля, чтотам можно делать со связью чтобы были ошибки?
ну проложите вы РС нормальным проводом с терминаторами на конце
опрос сделайте нормальной скоростью, это же модуль 8А, пока он отдаст, покурить можно успеть
опросите его групповым опросом, если есть желание углубится в программирование
это больше даст вам чем вот это вот ковыряние в 81 ошибке
ну зафикисровали триггером ошибку, дальше что?
дальше надо чтото делать с показаниями каналов
потом чтото делать со сбросом ошибки
и пошло поехало по цепочке
бестолковая бессмысленная работа
не избавляющая от первопричины возникновения ошибки

kondor3000
28.04.2026, 08:10
Какой код написали, такое действие и получили. Ошибку сохраните и сделайте сброс ошибок и будет вам счастье.
И вообще нет ошибок 0, есть ошибка 1, зачем 2 сюда приплели не понятно, да ещё и REAL, чем целочисленная плоха или бит?
Все 4 бита ошибок можно отправить 1 регистром, а не использовать 8 регистров.

tyoma1512
28.04.2026, 11:18
РС нормальный, фиксация нужна на случай если пропала связь с МВА, например по причине отсутствия электропитания. Поэтому и имитируем пропажу связи с прибором отключением РС

In_Da_Cher_A
28.04.2026, 12:24
РС нормальный, фиксация нужна на случай если пропала связь с МВА, например по причине отсутствия электропитания. Поэтому и имитируем пропажу связи с прибором отключением РС
а плк у вас не отключается от электричества?
что мешает запитать модули от того же источника что и ПЛК?
чтото мне кажется вы выдумываете себе проблемы
программирование ради программирования? ну ок, все советы выше уже дали

tyoma1512
28.04.2026, 12:45
на ПЛК ИБП есть возможность поставить, на МВА нет. Объект удален от диспетчера. с МВА информация передается на ПЛК, ПЛК передает информацию в овен клауд. с овен клауда информация передается в мастер скаду. Если пропало питание на МВА значит нет питания на объекте и диспетчер это должен видеть. Интерфейс новый. Следовательно если на одной из МВА пропало питание информация должна отобразиться у диспетчера. Из за того что ПЛК формирует неправильно нестабильно обрыв связи соответственно диспетчер не видит , что на объекте пропало питание. Проблема не в интерфейсе, а в коде. Нужно либо сделать опрос одновременный поканальный МВА как написали выше (как сделать не знаю) либо в программу подправить. Не у меня же одного к ПЛК подцеплены МВА и есть необходимость фиксировать ошибку. Может у кого то есть фрагмент программы или подскажете какой раздел в мануале изучить.

In_Da_Cher_A
28.04.2026, 13:02
хорошо нет проблем
ошибку по модулю фиксируйте тригером
продумайте чем и как будете сбрасывать тригер
показания поканально принудительно обнуляйте через блок SEL на который будете давать зафиксированную ошибку
ну и сообщайте в облако что проблемы на объекте

Cs-Cs
28.04.2026, 14:03
tyoma1512 Если тебе не лень - прочитай мой пост про такой отлов ошибок: https://cs-cs.net/technologii-testirovaniya-i-otladky-shhgitov-s-svtomatikoy-na-plk#6__modbus___ai__io
Тебе нужен заголовок 6.

У тебя написана функция, которая просто сравнивает адрес и код ошибки. Она должна работать не правильно, потому что ПЛК делает так:
* Опросил один модуль
* Модуль не ответил - он выставил код ошибки
* Далее сбросил этот код ошибки
* Опросил следующий модуль
и так далее.

Поэтому тебе нужно учесть два момента:
1. Поймать именно ошибку по нужному адресу. Там достаточно проверить только адрес и то, что LastError <> 0 (проверятть на 81 или другой код не надо).

2. Сделать выдержку (например через TOF), чтобы "продлить" время сигнала ошибки. Выдержку надо подобрать так, чтобы TOF не отключался между опросами других модулей.
То есть, чтобы было так:
* Опросили модуль 1, получили ошибку, TON ошибки модуля 1 начал отсчёт
* Опросили модуль 2, нет ошибки, TON ещё считает
* Опросили модуль N...
* ...снова опросили модуль 1, получили ошибку - перезапустили отсчёт TON.

В общем, время должно быть не меньше 1,5 интервала, через который опрашивается каждый модуль.

3. Конкретно модули .8А имеют одну ОСОБЕННОСТЬ: иногда (несколько раз в сутки) они не успевают ответить на Modbus-запросы, и ПЛК ложно видит ошибку связи, которой нет.
Поэтому у себя я и придумал код (про который написал в статье по ссылке), который фильтрует случайные ошибки, но фиксирует длительные серии ошибок.

kondor3000
28.04.2026, 14:46
Можно например изменить функцию на ФБ (функц. блок) и код заменить на такой, тогда ошибка будет висеть постоянно, 89030
пока блок не включат


IF (number = last_address AND last_error > 0) THEN
Check_module_error_ := 2.0;
ELSIF (number = last_address AND last_error = 0) THEN
Check_module_error_ := 1.0;
END_IF


Объявление и вызов блока

Check_module_error1: Check_module_error; (* добавить ФБ в объявления *)
END_VAR

Check_module_error1(number:=16 , change_adress:= last_address , error:= last_error , Check_module_error_=>err16 ); (* вызов ФБ *)

Rask
28.04.2026, 16:21
Не проще поставить счетчик и фиксировать количество ошибок опроса. Понятно что они есть в любом случаи если дело касается МВА. Определить количество к примеру для создание аварийной ситуации. Ну что вроде 1000 - значит авария точно есть. Счет за определённой промежуток времени. Если переполнился за на него - авария, нет сброс ошибок связи и повторной счет. Можно счетчик отдать мастерскаде, чтобы лично наблюдать)))

Rask
28.04.2026, 16:32
Так же есть следующая проблема по данному ПЛК, может кто, что подскажет. При отключении питания от ПЛК, он потом не передает данные в ОВен клауд ,а также его не видит компьютер, в течение суток - 2 суток, потом все нормализуется. Данная проблема наблюдалась неоднократно. Может кто что подскажет? подключение к ПЛК выполненно через USB
Самый верный способ поймать ошибку в подключение, это подключать ПЛК через USB. Попробуйте поменять кабель на более лучший. Но все же рассмотрите вариант ухода на Интернет.

Валенок
28.04.2026, 18:02
Не проще поставить счетчик и фиксировать количество ошибок опроса..
Автор не выложил проект и до сих пор не сказал, а нужны ли ему самому в проекте данные 8A.
Если нет - проще вообще ничего не делать, просто сливать в слейв все прочитанное и всё. Этого будет достаточно для скады если там к ней приложена голова т.к. в данных 8А есть циклические счетчики. Ну и тут много про связь говорили, но забыли статусы.

tyoma1512
30.04.2026, 12:47
Спасибо! Обязательно прочитаю

tyoma1512
30.04.2026, 12:59
Проект не выложил, так как сомневаюсь , что кто то будет в него вникать. Насчет данных 8А в проекте, не знаю. Проект писали недобросовестные подрядчики которые кинули. Я сейчас начал этим заниматься , изучать, пока идет туго. Критически важно , чтоб потеря связи с одной из МВА отображалось в скаде, т.к потеря связи это значит что в корпусе отсутствует электричество.

kondor3000
30.04.2026, 13:11
Проект не выложил, так как сомневаюсь , что кто то будет в него вникать. Насчет данных 8А в проекте, не знаю. Проект писали недобросовестные подрядчики которые кинули. Я сейчас начал этим заниматься , изучать, пока идет туго. Критически важно , чтоб потеря связи с одной из МВА отображалось в скаде, т.к потеря связи это значит что в корпусе отсутствует электричество.

Я вам даже код исправленный выложил и скрин, куда тут вникать ещё?

Rask
01.05.2026, 12:01
потеря связи это значит что в корпусе отсутствует электричество.
Вы еще бы по нагреву ПЛК определяли включено отопление или нет)))