PDA

Просмотр полной версии : плк-100,разрыв соединения RS-485 и переменные



cen_turion
30.01.2015, 13:26
Добрый день! Сейчас, возможно, будут пинать, что не раз это всё обговаривалось и описывалось. Но не нашёл!:( Просмотрел много тем и типичных примеров, но суть так и не понял.
Идёт опрос ПЛК-100 по Modbus RTU 6 датчиков. Всё работает нормально. Создаю разрыв соединения линии RS-485 в ручную(отсоединяю провод). И вижу, что значения , которые считываются замораживаются. То есть остаются те, которые были на момент разрыва. Если восстановить соединение, то значения начинают меняться как и положено. Работаю через конфиг.
Вот думаю решить этот вопрос так: отслеживать код ошибки"Last Error" и если она есть подать команду
0x00FF на канал Start/Stop, дабы заново его опросить. Обнулятся ли в этом случае переменные!? Или написать цикл, в конце которого затирать переменные? Что посоветуете? Может что рациональнее.
По библиотеке SysLibCom - только начал разбирать. Неужели конфигом тут не обойтись?!

Валенок
30.01.2015, 13:59
отслеживать код ошибки"Last Error" и если она есть подать команду
0x00FF на канал Start/Stop, дабы заново его опросить.
Как только телевизор сгорел буду жать на кнопы переключения каналов.


Или написать цикл, в конце которого затирать переменные?
Зачем ?


Обнулятся ли в этом случае переменные!?
А почему должно обнулится ? Я вот считаю при обрыве связи там должно быть число 7.

Sergey666
30.01.2015, 14:32
Добрый день! Сейчас, возможно, будут пинать, что не раз это всё обговаривалось и описывалось. Но не нашёл!:( Просмотрел много тем и типичных примеров, но суть так и не понял.
Идёт опрос ПЛК-100 по Modbus RTU 6 датчиков. Всё работает нормально. Создаю разрыв соединения линии RS-485 в ручную(отсоединяю провод). И вижу, что значения , которые считываются замораживаются. То есть остаются те, которые были на момент разрыва. Если восстановить соединение, то значения начинают меняться как и положено. Работаю через конфиг.
Вот думаю решить этот вопрос так: отслеживать код ошибки"Last Error" и если она есть подать команду
0x00FF на канал Start/Stop, дабы заново его опросить. Обнулятся ли в этом случае переменные!? Или написать цикл, в конце которого затирать переменные? Что посоветуете? Может что рациональнее.
По библиотеке SysLibCom - только начал разбирать. Неужели конфигом тут не обойтись?!

Если в конфиге опрос циклический , то пофиг ему эти FF (255) в старт/стоп ! Другое дело при не отвечающем устройстве опрос будет тормозить.
Анализируя в программе "Last_Address" и "Last_Error" можно оперировать значениями переменной и аварийной сигнализацией .
Валенок не прав ! :D При обрыве связи значение должно быть "999" :p.

cen_turion
30.01.2015, 14:42
Анализируя в программе "Last_Address" и "Last_Error" можно оперировать значениями переменной и аварийной сигнализацией
то есть вот тут и обнулять значения!?
в опросе участвуют переменные ,которые отвечают за состояние датчика. Дабы не создавать ещё одно условия для аварийного случая думаю просто привести их к нулю. Так делал с СПК207,там есть такая функция.

cen_turion
16.02.2015, 14:54
всё-таки удалось программно реализовать корректный опрос датчиков по RS-485, при случае обрыва соединения. Теперь как и требовалось данные обнуляются. Если кому интересно могу описать подробнее.

Scream
16.02.2015, 22:56
Ну опишите коль тема создана, интересно посмотреть.

petera
17.02.2015, 00:09
всё-таки удалось программно реализовать корректный опрос датчиков по RS-485, при случае обрыва соединения. Теперь как и требовалось данные обнуляются. Если кому интересно могу описать подробнее.
И кем это требовалось их обнулять? Тут попахивает вредительством или диверсией, особенно если считываемые значения с датчиков используются для каких-нибудь PID регуляторов. Наверно цель стоит крутануть привод так, чтобы агрегат в разнос пошел:rolleyes:

Алексей Александрович
17.02.2015, 05:26
Согласен с petera. Причем тут обнулять. Вам надо отследить потерю связи и ПЛК должен все отключить - включить очень большую красную лампу и очень большую сирену :) (хотя не знаю чем вы там управляете).

capzap
17.02.2015, 05:46
чего пристали к человеку,может он не правильно выразился, обнуление ему нужно для визуализации скорее всего

Алексей Александрович
17.02.2015, 05:57
обнуление ему нужно для визуализации
И вместо надписи "ПОТЕРЯ СВЯЗИ. АВАРИЯ" будут светится "0000". Это оригинально.:)

capzap
17.02.2015, 08:33
И вместо надписи "ПОТЕРЯ СВЯЗИ. АВАРИЯ" будут светится "0000". Это оригинально.:)

например я пишу -1 и на панели у меня появляются звездочки, в дополнении к сообщению об аварии

Алексей Александрович
17.02.2015, 08:58
Лучше цветочки:). Сейчас дошутимся и модераторы тему закроют. Все равно не понял зачем обнулять. Связи нет. Аварийная ситуация. И черт с ними с этими цифрами.

capzap
17.02.2015, 10:33
Лучше цветочки:). Сейчас дошутимся и модераторы тему закроют. Все равно не понял зачем обнулять. Связи нет. Аварийная ситуация. И черт с ними с этими цифрами.

во многих приборах,в том числе и овен, есть безопасные состояния при аварии, решил человек реализовать такое же в плк при обрыве, ничего страшного не произойдет, поставит вместо нуля макс.значение и все пиды прикроются, вопрос то в реализации, а не в конкретном значении

Алексей Александрович
17.02.2015, 11:08
Согласен с Вами

cen_turion
17.02.2015, 14:42
Вот поражают люди,которые не зная что к чему, фантазируют и навязывают своё мнение другим! Для чего,зачем и почему тут не обсуждается. Вопрос как?
А если кому интересно то по существу. Есть датчики. О своём состоянии и о измеренной величине они "говорят" определёнными регистрами. Идёт опрос. Разрыв. А что показывает ПЛК- последние значения. Да, они прописываются в визуализацию, как сказал capzap . Не было бы нужды, в Codesys 3 в конфигураторе такой опции бы не было!
Решение завязано на анализе Last Error и Last Adres. Но напрямую это сделать не получается( обе переменные меняются).

cen_turion
17.02.2015, 14:51
Оборудование бывает разное. Иногда оно уникальное и нет готовых шаблонов. Производители пишут такие вещи например как: "Карта адресов, несущих информацию о состоянии устройства". Вот от неё всё и отталкивается.
Решений можно придумать много, у каждого свои мозги. Вот для этого сюда и выносится. Критика нужна, если она конструктивная, всё остальное срач!

rwg
17.02.2015, 17:20
Решение завязано на анализе Last Error и Last Adres. Но напрямую это сделать не получается( обе переменные меняются).
Вызывайте программу анализа RS485 в основном цикле, с периодом 10мс. Если изменился адрес и ошибка отлична от нуля, значит устройство с таким адресом не ответило. Считайте количество ошибок для каждого устройства, получите статистику надёжности канала связи. К сожалению, если по одному адресу несколько запросов, то недостоверный запрос так просто не вычислить.

cen_turion
17.02.2015, 18:46
Сделал немного иначе. У меня ПЛК 100 выполняет функцию "моста"(пропускает через себя). Создал буффер. Данные,полученные при опросе, записываю туда. Отдельной создал массив ошибок. Туда записываются ошибки при определённом адресе устройства, если имеются (Е1-ошибка уст-ва по первому адресу, Е2 -ошибка по второму и т.д). Далее анализ. Если нет ошибки,то данные пошли на выход, если есть - на выход нуль. Думаю можно было оптимизировать, работая с указателями, но кол-во датчиков было не большое. Всё работает.

Алексей Александрович
18.02.2015, 16:57
Вот поражают люди,которые не зная что к чему, фантазируют и навязывают своё мнение другим! Для чего,зачем и почему тут не обсуждается. Вопрос как?
А если описать Вы начали в середине обсуждения?

Критика нужна, если она конструктивная, всё остальное срач!
А это зря.
В споре рождается истина