PDA

Просмотр полной версии : Как определить состояние соединения с ПК по Modbus TCP



teo111
08.08.2023, 22:39
Здравствуйте! ПЛК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. Если обмен через сокеты, там есть кол-во принятых байт и еще что-то полезное.
Смотря что на ПК используется в качестве слейва. Много костылей можно придумать для диагностики соединения.

1exan
09.08.2023, 04:47
1. ПК устанавливает бит в TRUE -> ПЛК сбрасывает в FALSE -> ПК устанавливает бит в TRUE и т.д. и анализируем в ПЛК
2. Читаем время в ПК и сравниваем с прошлым прочитанным.
3. Вместо времени в п.2 используем простой инкрементный счетчик.
4. Если обмен через сокеты, там есть кол-во принятых байт и еще что-то полезное.
Смотря что на ПК используется в качестве слейва. Много костылей можно придумать для диагностики соединения.

Тоже делал так контроль пока не столкнулся с MS4D, из которой отправка переменных происходит только при их изменении (OPC UA).
Наверное можно было изменить настройки этого тега в OPC, но сделал по-другому - в ПК (скаде) контрольный тег всё время инвертируется, а в ПЛК отслеживается наличие его изменений - при "застывании" тега на ПЛК фиксируется потеря связи

tracemodefan
09.08.2023, 16:17
Коллега, а что за скада у вас?
Я реализовал такую процедуру проверки в TraceMode 6.
Проект контроллера во вложении.
69391

teo111
09.08.2023, 22:50
На стороне ПК работает специализированное самописное ПО. Использовать костыли с периодической записью со стороны ПК единичек и сбросом их со стороны ПЛК технически проблем никаких нет. Но по возможности не хочется нагружать протокол взаимодействия подобными штуками, если существуют какие-нибудь готовые средства контроля соединения.

kondor3000
09.08.2023, 23:17
На стороне ПК работает специализированное самописное ПО. Использовать костыли с периодической записью со стороны ПК единичек и сбросом их со стороны ПЛК технически проблем никаких нет. Но по возможности не хочется нагружать протокол взаимодействия подобными штуками, если существуют какие-нибудь готовые средства контроля соединения.

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

1exan
10.08.2023, 04:55
На стороне ПК работает специализированное самописное ПО. Использовать костыли с периодической записью со стороны ПК единичек и сбросом их со стороны ПЛК технически проблем никаких нет. Но по возможности не хочется нагружать протокол взаимодействия подобными штуками, если существуют какие-нибудь готовые средства контроля соединения.

Вообще все советы выше касаются ситуации, когда ПЛК - это слейв (сервер)


Здравствуйте! ПЛК110[М02] общается с компьютером используя Modbus TCP. ПЛК является мастером. Как в программе ПЛК определить, что компьютер в данный момент подключен к ПЛК (установлено TCP соединение)? Среда Codesys V2.3.
Если ПЛК - мастер, то проблем с контролем связи штатными средствами не должно быть вообще

teo111
12.08.2023, 10:06
Если ПЛК - мастер, то проблем с контролем связи штатными средствами не должно быть вообще
Это обнадёживает, но куда дальше копать уже не знаю.

teo111
12.08.2023, 10:20
Ерунду не пишите, передача лишнего бита, раз в секунду со сбросом при получении и даже регистра , никак не нагрузят обмен.
Можно использовать любой свободный бит, любого регистра, который уже есть в обмене.

Неточно выразился, я не имел ввиду нагрузку на оборудование. Мы делаем оборудование для заказчика, заказчик сам пишет ПО управления. Протокол уже оговорён. Не хотелось бы в этот протокол добавлять что-то, если это "что-то" можно избежать благодаря наличию штатных средств.

krollcbas
12.08.2023, 10:33
Зачем делать для обмена с HMI ПЛК-мастером? Должна быть на мой взгляд логика иной. HMI мастер и он отслеживает состояние подчиненных устройств.
ПЛК мастером должен быть для модулей IO.

Курица тащит за собой цыплят, а не наоборот.

Еще часто пускаю в обмене целочисленную переменную, которая постоянно инкрементируется и отслеживаю на другом конце изменение

teo111
12.08.2023, 11:12
Я дико извиняюсь, оказывается ПЛК это SLAVE (сервер). Попутал, т.к. интуитивно кажется что мастер должен быть сервером, а слейв - клиентом.

teo111
12.08.2023, 11:33
Мы все умрём.

Не надо умирать )). Вопрос, выходит, таков. ПЛК будучи слейвом (сервером) в режиме Modbus TCP может определить наличие соединения штатными средствами? Или нужно отправлять ему периодически что то для проверки соединения (инкрементировать ему какой-нибудь регистр, или записывать туда единичку, а ПЛК будет обнулять) и другого решения НЕТ?

teo111
12.08.2023, 11:37
Ну слава богу. На 5й день разобрались ху из ху.
1.Штатных средств контроля связи в штатном конфигураторе - нет
2.Простейшие способы решения проблемы - вариации по мотивам пост#3 (см)

Не протокол - карта. Вам нужен контроль - добавляете регистр и описание назначения. С той стороны ребенок 2-х летний или там будут упираться рогом ?
3.Можете заюзать программный сервер. Тогда страшных заказчиков не придется беспокоить. Но - программный.
Всё.

Спасибо, к сожалению, не знаю как удалить предыдущий пост.

imaex
12.08.2023, 11:51
ПЛК будучи слейвом (сервером) в режиме Modbus TCP может определить наличие соединения штатными средствами?

Извините, что вмешиваюсь, но ПЛК-то зачем это знать? ПМСМ, это как раз мастеру (условно - SCADA) нужно знать статус соединения с источником данных.

tracemodefan
14.08.2023, 10:44
Извините, что вмешиваюсь, но ПЛК-то зачем это знать? ПМСМ, это как раз мастеру (условно - SCADA) нужно знать статус соединения с источником данных.

Бывает сидит оператор и смотрит за тех.процессом, а процесс вялотекущий, и изменения не всегда фиксируются взглядом оператора после 9 часов упорного смотра в монитор. В этот самый момент связь отваливается и контроллер ставит процесс на паузу, а в скаде маячит "ОШИБКА СВЯЗИ!!! АХТУНГ!!!". Контроль нужен с обеих сторон.

kondor3000
14.08.2023, 13:19
Бывает сидит оператор и смотрит за тех.процессом, а процесс вялотекущий, и изменения не всегда фиксируются взглядом оператора после 9 часов упорного смотра в монитор. В этот самый момент связь отваливается и контроллер ставит процесс на паузу, а в скаде маячит "ОШИБКА СВЯЗИ!!! АХТУНГ!!!". Контроль нужен с обеих сторон.

Допустим вы определите в ПЛК, что отвалилась связь, если он слейв, толку от этого никакого. Только со стороны мастера можно переподключить порт ( если не физический обрыв).
Поэтому надо делать так, чтобы связь не отваливалась. А если отвалилась, то переподключить порт на Скаде.

melky
14.08.2023, 13:27
kondor3000 может тут речь о том, чтобы ПЛК позакрывал сокеты, если связь пропала ? Мастер при очередной попытке откроет соединение вновь. А вот если у ПЛК зависнут открытые сокеты, к нему уже будет нельзя подключиться, пока не перезагрузят его.

Валенок
14.08.2023, 13:34
Причем тут сокеты ?
Алгоритм работы может менятся. Командир сказал вперед и помер, и что, так и идем ?

melky
14.08.2023, 14:29
Валенок я про другое, если при подключении со стороны Scada ПЛК открывает сокет, и при потере связи не закрывает его. Командир после очередного восстановления связи орёт, орёт, а ему никто не собирается отвечать, уши заложило :)

Вроде как-то всплывала подобная тема, что связь восстанавливалась только после перезапуска ПЛК, не с сокетами было связано?

imaex
14.08.2023, 14:54
А вот если у ПЛК зависнут открытые сокеты, к нему уже будет нельзя подключиться, пока не перезагрузят его.

С чего бы? При отсутствии обмена клиент должен закрыть сокеты по истечении таймера keep alive.

melky
14.08.2023, 15:08
imaex при чем тут обмен? при обрыве связи клиента происходит закрытие сокета на сервере (ПЛК) ?
При восстановлении связи клиент озаботится каким-то образом о закрытии оборванного соединения ?

imaex
14.08.2023, 15:59
Тут

https://modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf

все сценарии расписаны.

tracemodefan
15.08.2023, 14:24
Допустим вы определите в ПЛК, что отвалилась связь, если он слейв, толку от этого никакого. Только со стороны мастера можно переподключить порт ( если не физический обрыв).
Поэтому надо делать так, чтобы связь не отваливалась. А если отвалилась, то переподключить порт на Скаде.

Мое утверждение никак не противоречит вашим изъяснениям. В "нормальной" скаде всегда есть возможность перезаупстить соединение. Но в жизни так бывает, что не всегда есть возможность построить надежную внутреннюю сетку без отвалов. А процесс бывает надо паузнуть из-за отсутствия связи с оператором.
Да и тем более в скаде делается такой же сторожевой таймер, и ставятся на паузу процессы обработки в скаде. Связь восстановили, ошибки квитировали и продолжили свои дела технологические.