Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 17

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

  1. #1

    По умолчанию ПЛК 110-30 Codesys v2.3 Фиксация обрыва связи с МВА

    Добрый день. Подскажите пожалуйста.
    Стоит ПЛК 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

  2. #2

    По умолчанию

    Ошибку надо делать квитируемой, а не самосбрасываемой. Т.е. зафиксировали ошибку, следовательно возвели бит ошибки, и пока оператор не подтвердит, что увидел ошибку, она так и будет взведенной.

  3. #3

    По умолчанию

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

  4. #4

    По умолчанию

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

  5. #5

    По умолчанию

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

  6. #6

    По умолчанию

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

  7. #7

    По умолчанию

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

  8. #8

    По умолчанию

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

  9. #9

    По умолчанию

    tyoma1512 Если тебе не лень - прочитай мой пост про такой отлов ошибок: https://cs-cs.net/technologii-testir...odbus___ai__io
    Тебе нужен заголовок 6.

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

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

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

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

    3. Конкретно модули .8А имеют одну ОСОБЕННОСТЬ: иногда (несколько раз в сутки) они не успевают ответить на Modbus-запросы, и ПЛК ложно видит ошибку связи, которой нет.
    Поэтому у себя я и придумал код (про который написал в статье по ссылке), который фильтрует случайные ошибки, но фиксирует длительные серии ошибок.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  10. #10

    По умолчанию

    Можно например изменить функцию на ФБ (функц. блок) и код заменить на такой, тогда ошибка будет висеть постоянно, 1 Ошибки опроса модулей.jpg
    пока блок не включат
    Код:
    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 );   (* вызов ФБ  *)
    Последний раз редактировалось kondor3000; 28.04.2026 в 15:56.

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Отслеживание обрыва связи modbus codesys
    от Velv в разделе ПЛК2хх
    Ответов: 2
    Последнее сообщение: 08.04.2025, 15:14
  2. Ответов: 8
    Последнее сообщение: 12.05.2022, 19:32
  3. Ответов: 3
    Последнее сообщение: 01.06.2017, 13:13
  4. Ответов: 9
    Последнее сообщение: 09.04.2015, 11:21
  5. проверка обрыва связи
    от Alr в разделе Master SCADA 3
    Ответов: 13
    Последнее сообщение: 24.09.2012, 16:02

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •