Просмотр полной версии : Как определить состояние соединения с ПК по Modbus TCP
Здравствуйте! ПЛК110[М02] общается с компьютером используя Modbus TCP. ПЛК является мастером. Как в программе ПЛК определить, что компьютер в данный момент подключен к ПЛК (установлено TCP соединение)? Среда Codesys V2.3.
kondor3000
08.08.2023, 23:12
Здравствуйте! ПЛК110[М02] общается с компьютером используя Modbus TCP. ПЛК является мастером. Как в программе ПЛК определить, что компьютер в данный момент подключен к ПЛК (установлено TCP соединение)? Среда Codesys V2.3.
Не понятно, вы ПЛК к какой программе хотите подключить на компе?
К программе Codesys V2.3 или к какому то ОПС серверу в режиме слейв?
Николай Суриков
08.08.2023, 23:18
1. ПК устанавливает бит в TRUE -> ПЛК сбрасывает в FALSE -> ПК устанавливает бит в TRUE и т.д. и анализируем в ПЛК
2. Читаем время в ПК и сравниваем с прошлым прочитанным.
3. Вместо времени в п.2 используем простой инкрементный счетчик.
4. Если обмен через сокеты, там есть кол-во принятых байт и еще что-то полезное.
Смотря что на ПК используется в качестве слейва. Много костылей можно придумать для диагностики соединения.
1. ПК устанавливает бит в TRUE -> ПЛК сбрасывает в FALSE -> ПК устанавливает бит в TRUE и т.д. и анализируем в ПЛК
2. Читаем время в ПК и сравниваем с прошлым прочитанным.
3. Вместо времени в п.2 используем простой инкрементный счетчик.
4. Если обмен через сокеты, там есть кол-во принятых байт и еще что-то полезное.
Смотря что на ПК используется в качестве слейва. Много костылей можно придумать для диагностики соединения.
Тоже делал так контроль пока не столкнулся с MS4D, из которой отправка переменных происходит только при их изменении (OPC UA).
Наверное можно было изменить настройки этого тега в OPC, но сделал по-другому - в ПК (скаде) контрольный тег всё время инвертируется, а в ПЛК отслеживается наличие его изменений - при "застывании" тега на ПЛК фиксируется потеря связи
tracemodefan
09.08.2023, 16:17
Коллега, а что за скада у вас?
Я реализовал такую процедуру проверки в TraceMode 6.
Проект контроллера во вложении.
69391
На стороне ПК работает специализированное самописное ПО. Использовать костыли с периодической записью со стороны ПК единичек и сбросом их со стороны ПЛК технически проблем никаких нет. Но по возможности не хочется нагружать протокол взаимодействия подобными штуками, если существуют какие-нибудь готовые средства контроля соединения.
kondor3000
09.08.2023, 23:17
На стороне ПК работает специализированное самописное ПО. Использовать костыли с периодической записью со стороны ПК единичек и сбросом их со стороны ПЛК технически проблем никаких нет. Но по возможности не хочется нагружать протокол взаимодействия подобными штуками, если существуют какие-нибудь готовые средства контроля соединения.
Ерунду не пишите, передача лишнего бита, раз в секунду со сбросом при получении и даже регистра , никак не нагрузят обмен.
Можно использовать любой свободный бит, любого регистра, который уже есть в обмене.
На стороне ПК работает специализированное самописное ПО. Использовать костыли с периодической записью со стороны ПК единичек и сбросом их со стороны ПЛК технически проблем никаких нет. Но по возможности не хочется нагружать протокол взаимодействия подобными штуками, если существуют какие-нибудь готовые средства контроля соединения.
Вообще все советы выше касаются ситуации, когда ПЛК - это слейв (сервер)
Здравствуйте! ПЛК110[М02] общается с компьютером используя Modbus TCP. ПЛК является мастером. Как в программе ПЛК определить, что компьютер в данный момент подключен к ПЛК (установлено TCP соединение)? Среда Codesys V2.3.
Если ПЛК - мастер, то проблем с контролем связи штатными средствами не должно быть вообще
Если ПЛК - мастер, то проблем с контролем связи штатными средствами не должно быть вообще
Это обнадёживает, но куда дальше копать уже не знаю.
Ерунду не пишите, передача лишнего бита, раз в секунду со сбросом при получении и даже регистра , никак не нагрузят обмен.
Можно использовать любой свободный бит, любого регистра, который уже есть в обмене.
Неточно выразился, я не имел ввиду нагрузку на оборудование. Мы делаем оборудование для заказчика, заказчик сам пишет ПО управления. Протокол уже оговорён. Не хотелось бы в этот протокол добавлять что-то, если это "что-то" можно избежать благодаря наличию штатных средств.
krollcbas
12.08.2023, 10:33
Зачем делать для обмена с HMI ПЛК-мастером? Должна быть на мой взгляд логика иной. HMI мастер и он отслеживает состояние подчиненных устройств.
ПЛК мастером должен быть для модулей IO.
Курица тащит за собой цыплят, а не наоборот.
Еще часто пускаю в обмене целочисленную переменную, которая постоянно инкрементируется и отслеживаю на другом конце изменение
Я дико извиняюсь, оказывается ПЛК это SLAVE (сервер). Попутал, т.к. интуитивно кажется что мастер должен быть сервером, а слейв - клиентом.
Мы все умрём.
Не надо умирать )). Вопрос, выходит, таков. ПЛК будучи слейвом (сервером) в режиме Modbus TCP может определить наличие соединения штатными средствами? Или нужно отправлять ему периодически что то для проверки соединения (инкрементировать ему какой-нибудь регистр, или записывать туда единичку, а ПЛК будет обнулять) и другого решения НЕТ?
Ну слава богу. На 5й день разобрались ху из ху.
1.Штатных средств контроля связи в штатном конфигураторе - нет
2.Простейшие способы решения проблемы - вариации по мотивам пост#3 (см)
Не протокол - карта. Вам нужен контроль - добавляете регистр и описание назначения. С той стороны ребенок 2-х летний или там будут упираться рогом ?
3.Можете заюзать программный сервер. Тогда страшных заказчиков не придется беспокоить. Но - программный.
Всё.
Спасибо, к сожалению, не знаю как удалить предыдущий пост.
ПЛК будучи слейвом (сервером) в режиме Modbus TCP может определить наличие соединения штатными средствами?
Извините, что вмешиваюсь, но ПЛК-то зачем это знать? ПМСМ, это как раз мастеру (условно - SCADA) нужно знать статус соединения с источником данных.
tracemodefan
14.08.2023, 10:44
Извините, что вмешиваюсь, но ПЛК-то зачем это знать? ПМСМ, это как раз мастеру (условно - SCADA) нужно знать статус соединения с источником данных.
Бывает сидит оператор и смотрит за тех.процессом, а процесс вялотекущий, и изменения не всегда фиксируются взглядом оператора после 9 часов упорного смотра в монитор. В этот самый момент связь отваливается и контроллер ставит процесс на паузу, а в скаде маячит "ОШИБКА СВЯЗИ!!! АХТУНГ!!!". Контроль нужен с обеих сторон.
kondor3000
14.08.2023, 13:19
Бывает сидит оператор и смотрит за тех.процессом, а процесс вялотекущий, и изменения не всегда фиксируются взглядом оператора после 9 часов упорного смотра в монитор. В этот самый момент связь отваливается и контроллер ставит процесс на паузу, а в скаде маячит "ОШИБКА СВЯЗИ!!! АХТУНГ!!!". Контроль нужен с обеих сторон.
Допустим вы определите в ПЛК, что отвалилась связь, если он слейв, толку от этого никакого. Только со стороны мастера можно переподключить порт ( если не физический обрыв).
Поэтому надо делать так, чтобы связь не отваливалась. А если отвалилась, то переподключить порт на Скаде.
kondor3000 может тут речь о том, чтобы ПЛК позакрывал сокеты, если связь пропала ? Мастер при очередной попытке откроет соединение вновь. А вот если у ПЛК зависнут открытые сокеты, к нему уже будет нельзя подключиться, пока не перезагрузят его.
Причем тут сокеты ?
Алгоритм работы может менятся. Командир сказал вперед и помер, и что, так и идем ?
Валенок я про другое, если при подключении со стороны Scada ПЛК открывает сокет, и при потере связи не закрывает его. Командир после очередного восстановления связи орёт, орёт, а ему никто не собирается отвечать, уши заложило :)
Вроде как-то всплывала подобная тема, что связь восстанавливалась только после перезапуска ПЛК, не с сокетами было связано?
А вот если у ПЛК зависнут открытые сокеты, к нему уже будет нельзя подключиться, пока не перезагрузят его.
С чего бы? При отсутствии обмена клиент должен закрыть сокеты по истечении таймера keep alive.
imaex при чем тут обмен? при обрыве связи клиента происходит закрытие сокета на сервере (ПЛК) ?
При восстановлении связи клиент озаботится каким-то образом о закрытии оборванного соединения ?
Тут
https://modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf
все сценарии расписаны.
tracemodefan
15.08.2023, 14:24
Допустим вы определите в ПЛК, что отвалилась связь, если он слейв, толку от этого никакого. Только со стороны мастера можно переподключить порт ( если не физический обрыв).
Поэтому надо делать так, чтобы связь не отваливалась. А если отвалилась, то переподключить порт на Скаде.
Мое утверждение никак не противоречит вашим изъяснениям. В "нормальной" скаде всегда есть возможность перезаупстить соединение. Но в жизни так бывает, что не всегда есть возможность построить надежную внутреннюю сетку без отвалов. А процесс бывает надо паузнуть из-за отсутствия связи с оператором.
Да и тем более в скаде делается такой же сторожевой таймер, и ставятся на паузу процессы обработки в скаде. Связь восстановили, ошибки квитировали и продолжили свои дела технологические.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot