Здравствуйте! ПЛК110[М02] общается с компьютером используя Modbus TCP. ПЛК является мастером. Как в программе ПЛК определить, что компьютер в данный момент подключен к ПЛК (установлено TCP соединение)? Среда Codesys V2.3.
Вид для печати
Здравствуйте! ПЛК110[М02] общается с компьютером используя Modbus TCP. ПЛК является мастером. Как в программе ПЛК определить, что компьютер в данный момент подключен к ПЛК (установлено TCP соединение)? Среда Codesys V2.3.
1. ПК устанавливает бит в TRUE -> ПЛК сбрасывает в FALSE -> ПК устанавливает бит в TRUE и т.д. и анализируем в ПЛК
2. Читаем время в ПК и сравниваем с прошлым прочитанным.
3. Вместо времени в п.2 используем простой инкрементный счетчик.
4. Если обмен через сокеты, там есть кол-во принятых байт и еще что-то полезное.
Смотря что на ПК используется в качестве слейва. Много костылей можно придумать для диагностики соединения.
Тоже делал так контроль пока не столкнулся с MS4D, из которой отправка переменных происходит только при их изменении (OPC UA).
Наверное можно было изменить настройки этого тега в OPC, но сделал по-другому - в ПК (скаде) контрольный тег всё время инвертируется, а в ПЛК отслеживается наличие его изменений - при "застывании" тега на ПЛК фиксируется потеря связи
Коллега, а что за скада у вас?
Я реализовал такую процедуру проверки в TraceMode 6.
Проект контроллера во вложении.
Вложение 69391
На стороне ПК работает специализированное самописное ПО. Использовать костыли с периодической записью со стороны ПК единичек и сбросом их со стороны ПЛК технически проблем никаких нет. Но по возможности не хочется нагружать протокол взаимодействия подобными штуками, если существуют какие-нибудь готовые средства контроля соединения.
Неточно выразился, я не имел ввиду нагрузку на оборудование. Мы делаем оборудование для заказчика, заказчик сам пишет ПО управления. Протокол уже оговорён. Не хотелось бы в этот протокол добавлять что-то, если это "что-то" можно избежать благодаря наличию штатных средств.
Зачем делать для обмена с HMI ПЛК-мастером? Должна быть на мой взгляд логика иной. HMI мастер и он отслеживает состояние подчиненных устройств.
ПЛК мастером должен быть для модулей IO.
Курица тащит за собой цыплят, а не наоборот.
Еще часто пускаю в обмене целочисленную переменную, которая постоянно инкрементируется и отслеживаю на другом конце изменение
Я дико извиняюсь, оказывается ПЛК это SLAVE (сервер). Попутал, т.к. интуитивно кажется что мастер должен быть сервером, а слейв - клиентом.
Не надо умирать )). Вопрос, выходит, таков. ПЛК будучи слейвом (сервером) в режиме Modbus TCP может определить наличие соединения штатными средствами? Или нужно отправлять ему периодически что то для проверки соединения (инкрементировать ему какой-нибудь регистр, или записывать туда единичку, а ПЛК будет обнулять) и другого решения НЕТ?
Бывает сидит оператор и смотрит за тех.процессом, а процесс вялотекущий, и изменения не всегда фиксируются взглядом оператора после 9 часов упорного смотра в монитор. В этот самый момент связь отваливается и контроллер ставит процесс на паузу, а в скаде маячит "ОШИБКА СВЯЗИ!!! АХТУНГ!!!". Контроль нужен с обеих сторон.
Допустим вы определите в ПЛК, что отвалилась связь, если он слейв, толку от этого никакого. Только со стороны мастера можно переподключить порт ( если не физический обрыв).
Поэтому надо делать так, чтобы связь не отваливалась. А если отвалилась, то переподключить порт на Скаде.
kondor3000 может тут речь о том, чтобы ПЛК позакрывал сокеты, если связь пропала ? Мастер при очередной попытке откроет соединение вновь. А вот если у ПЛК зависнут открытые сокеты, к нему уже будет нельзя подключиться, пока не перезагрузят его.
Причем тут сокеты ?
Алгоритм работы может менятся. Командир сказал вперед и помер, и что, так и идем ?
Валенок я про другое, если при подключении со стороны Scada ПЛК открывает сокет, и при потере связи не закрывает его. Командир после очередного восстановления связи орёт, орёт, а ему никто не собирается отвечать, уши заложило :)
Вроде как-то всплывала подобная тема, что связь восстанавливалась только после перезапуска ПЛК, не с сокетами было связано?
imaex при чем тут обмен? при обрыве связи клиента происходит закрытие сокета на сервере (ПЛК) ?
При восстановлении связи клиент озаботится каким-то образом о закрытии оборванного соединения ?
Тут
https://modbus.org/docs/Modbus_Messa...uide_V1_0b.pdf
все сценарии расписаны.
Мое утверждение никак не противоречит вашим изъяснениям. В "нормальной" скаде всегда есть возможность перезаупстить соединение. Но в жизни так бывает, что не всегда есть возможность построить надежную внутреннюю сетку без отвалов. А процесс бывает надо паузнуть из-за отсутствия связи с оператором.
Да и тем более в скаде делается такой же сторожевой таймер, и ставятся на паузу процессы обработки в скаде. Связь восстановили, ошибки квитировали и продолжили свои дела технологические.