Просмотр полной версии : Не устойчивое соединение с ПЛК110-60.Р-М v2
Serhioromano
12.12.2016, 16:42
Я пытаюсь подключаться к контроллеру по Ethernet с системы Скада. Долго не мог понять в чем пролема, много настраивал. Оказалось что с правильными настроками подключение происходит не постоянно. Из 5 попыток только одна подключается к контроллеру. Другие выдает сообщение что связь с котролером не установлена.
Я по TeamViewer общался с разработчиком скада. Он проверял все что мог. Он сказал что скорей всего причина в контроллере. Вот что выдает Wireshark если соединение успешное.
http://www.owen.ru/forum/attachment.php?attachmentid=28052&stc=1&d=1481549999
А вот что при не успешном соединении
http://www.owen.ru/forum/attachment.php?attachmentid=28053&stc=1&d=1481550023
К сожалению для меня это мало имеет смысла но думаю может кто то сможет подсказать в чем может быть пролема.
Евгений Багаев
12.12.2016, 16:52
Здравствуйте, какая версия прошивки у контроллера? Посмотреть можно командой PLCInfo в ПЛК-браузере.
Serhioromano
12.12.2016, 18:18
PLCInfo
PLC model MODEL PLC 110-60
Binary VERSION 0.3.52
Need Target version >= 3.07
Compiled: 15:03:27 Mar 22 2016
STM32 binary version 114
MAC 6A:77:00:FF:EF:59
IP 192.168.1.120
GATE 10.0.6.1
MASK 255.255.255.0
Евгений Багаев
12.12.2016, 18:30
Вам необходимо прошить ПЛК на актуальную версию 0.3.64
Взять можно здесь: http://www.owen.ru/catalog/codesys_v2/73292499
Инструкция по смене прошивки прилагается
Serhioromano
12.12.2016, 18:59
PLCInfo
PLC model MODEL PLC 110-60
Binary VERSION 0.3.64
Need Target version >= 3.10
Compiled: 11:15:40 Nov 8 2016
STM32 binary version 114
MAC 6A:77:00:FF:EF:59
IP 192.168.1.120
GATE 10.0.6.1
MASK 255.255.255.0
Вот новые данные.
Но ни чего не изменилось. Первое подключение было успешно. Потом через 3 раза потом через 5. Я не уверен что это вообще проблема контроллера, может это всетаки скада система. Но как я понял по логам видно что как то не так отвечает контроллер.
Я могу устроить сессию c TeamViewer если есть желание.
В конечном итоге все работает. Через 5 раз но соединение утанавливается и потом вроде устойчиво работает. Но если проблема в контроллере было бы не плохо ее устранить. Но это на ваше желание. Я смогу с этим жить.
Филоненко Владислав
13.12.2016, 13:31
Судя по всему, разработчики SCADA думают, что на ПЛК много открытых портов 502 (а он там 1 на каждый slave).
Поэтому они не закрывают текущую сессию и пытаются открыть новую. Через некоторое время сессия всё-же разрывается и тогда можно подключится.
Serhioromano
13.12.2016, 16:15
Вот что мне написал разработчик скады.
Библиотека которую я использую при разрыве (disconnect) закрывает TCP socket и все. Что там еще надо чтобы они закрыли порт со своей стороны (со стороны контроллера) не ясно. Возможно там есть возможность выставить тайминг закрытие порта или создать несколько слейв устройств с одним и тем же адресом. Потому что непонятно как ты собираешься реализовать подключение нескольких устройств к одному контроллеру.
Что ему сказать?
Возможно что при закрытии сокета у вас стоит какая-то задержка перед произведение полного отключения?
Вот что мне написал разработчик скады.
Что ему сказать?
Возможно что при закрытии сокета у вас стоит какая-то задержка перед произведение полного отключения?
нам тоже не понятно что это за другие устройства, не скринах вроде только по одному серверу и клиенту. У овена если не передаются данные больше 12мс соединение разрывается, можно в этом причина, хотя это и касается библиотеки, а не конфигуратора
Филоненко Владислав
13.12.2016, 20:09
ну какие 12 мс? Таймауты конечно не по 2 часа как в винде, но десяток секунд есть.
Судя по логу SCADA сначала работает по порту 51479 (пакет 22)
Затем, ХЗ почему, не закрывая соединение, начинает новые сессии по другим исходящим портам всё к тому же, ещё не освобождённому порту 502.
ПЛК всё еще надеется на взаимность с портом 51479, и отвергает всяких проходимцев.
А к нему продолжают стучатся посторонние соединения с портов 51504, 51505 и т.д. (пакеты 242, 278 и т.д.)
И только спустя 7 секунд уже ПЛК инициирует закрытие сессии.
Вероятно "закрывают соединение не так как надо"
P.S. на 1 slave можно навесить и несколько TCP сокетов и все на 502 порт. Но это "зарывание головы в песок", а не корректная работа SCADA.
Пригласите разработчика SCADA к нам в тему.
51479 это ответный порт на запрос по 502 порту,посмотрите кто у него слейв,а кто мастер
а по 12мс это я в реальности видел когда mqtt протокол делал, пришлось пригласить каждые 10мс чтоб раза небывало между брокером и подписчиком, которые работают по событиям
51479 это ответный порт на запрос по 502 порту,посмотрите кто у него слейв,а кто мастер
а по 12мс это я в реальности видел когда mqtt протокол делал, пришлось пригласить каждые 10мс чтоб раза небывало между брокером и подписчиком, которые работают по событиям
Работал с sysLibSocket, нет там конечно 12мс, от 10 до 14 секунд, причем зависит от времени цикла ПЛК (почему хз).
Если открываю tcp slave через конфигуратор, то опрашивать могу и 1 раз в 2 секунды, никаких закрытий НЕ будет.
Первый скрин явно ПЛК slave, видно.
Второй путает первая строка, но опять же потом вижу тоже что и говорит Владислав.
да, я скорее всего путать и речь о секундах, нет возможности проекты взглянуть
да и по поводу того что выдает дамп тоже не хватает времени прочесть мануал. Если сравнивать две картинки и принять за правильную первую, то выходит что в конфигураторе сменили слейв не мастера.
Serhioromano
14.12.2016, 08:00
Я ни чего не менял. В логах все тоже самое. ПЛК настроен как слейв это видно из скриншота первого. Все под тоже конфикурацией. Запустил первый раз, сразу выключил, и потом не получается запустить несколько секунд.
Я провел несколько экспериментов. Значит если я давно не работал, запускаю и подключается все с первого раза. Если выключу, пойду попью чая, такая история. Но если я выключу и в течении 5 секунд хочу подключится опять то такая пертуршка.
Думаю для конечного проекта это не проблема. Там ни кто не будет переключать туда сюда. А вот для процесса разработки это неприятная вещь.
Разработчик скада читает эту ветку. Попрошу его тут написать.
Филоненко Владислав
14.12.2016, 14:31
Поищите в SCADA параметр времени жизни соединения.
Serhioromano
14.12.2016, 17:24
Поищите в SCADA параметр времени жизни соединения.
Нет такого параметра. Как только я разрываю соединения по заявлениям разработчкика скада, соединение или сокет закрывается стразуже. Перечетайте тему. Проблема в том что после явной остановки проекта в скада, почему-то контроллер еще несколько секунд держит порт закрытым.
TeslaSCADA
14.12.2016, 20:22
Здравствуйте,
Не совсем понятно как SCADA которая является Modbus мастером может закрыть порт TCP соединение со стороны Modbus slave устройства. При разрыве соединения наша SCADA со своей стороны закрывает соединения и я так понимаю, что контроллер со свое стороны через 10-12с тоже его закрывает. Тут есть вопрос только в том:
1. Можно ли регулировать в настройках контроллера данное время закрытие порта когда нет обмена информации с Modbus мастером.
2. Существует ли возможность открыть несколько портов на 1 slave соединение?
3. Существует ли возможность создать несколько slave-ов? Или что нужно сделать для того чтобы иметь возможность подключиться нескольким Modbus клиентам?
Филоненко Владислав
15.12.2016, 10:22
Нет такого параметра. Как только я разрываю соединения по заявлениям разработчкика скада, соединение или сокет закрывается стразуже. Перечетайте тему. Проблема в том что после явной остановки проекта в скада, почему-то контроллер еще несколько секунд держит порт закрытым.
По логу снифера SCADA не завершает соединение правильным образом. Поэтому порт и оказывается занят ещё неск. секунд.
Филоненко Владислав
15.12.2016, 10:34
Здравствуйте,
Не совсем понятно как SCADA которая является Modbus мастером может закрыть порт TCP соединение со стороны Modbus slave устройства. При разрыве соединения наша SCADA со своей стороны закрывает соединения и я так понимаю, что контроллер со свое стороны через 10-12с тоже его закрывает. Тут есть вопрос только в том:
1. Можно ли регулировать в настройках контроллера данное время закрытие порта когда нет обмена информации с Modbus мастером.
2. Существует ли возможность открыть несколько портов на 1 slave соединение?
3. Существует ли возможность создать несколько slave-ов? Или что нужно сделать для того чтобы иметь возможность подключиться нескольким Modbus клиентам?
1. shutdown(socket,2); close(socket); Обычно помогает :) Вариант для Win систем немного больше по коду http://www.programmersforum.ru/showthread.php?t=214758 без shutdown Винда до 2! часов будет ждать у моря погоды!
2. Да, вставив несколько портов TCP Slave в Slave устройство на ПЛК. Но это метод страуса.
3. Да. Это правильный метод. Несколько slave на РАЗНЫХ портах для разных клиентов.
P.S. Это распространённое заблуждение среди SCADA-строителей, что раз есть техническая возможность работать с одним портом несколькими соединениями, то эту концепцию можно и в ModBus TCP применить. Концептуально ModBus TCP это протокол master-slave с 1 мастером.
Если мастеров несколько - возникает ситуация с машиной с 2 рулями.
И, хотя в ПЛК можно добавить 2 и более портов TCP Slave, мастера должны работать в режиме 1 пишет, все остальные только читают. Такой режим безопасен.
TeslaSCADA
15.12.2016, 11:49
Проблема же не в том что я со стороны SCADA не могут закрыть сокет. Со стороны SCADA системы он конечно же закрывается. Просто прежде чем контроллер разрывает соединение со своей стороны проходит какое-то время. В течение этого времени при попытке организовать соединение возникают проблемы т.к. со стороны контроллера порт занят.
Филоненко Владислав
15.12.2016, 15:34
Проблема же не в том что я со стороны SCADA не могут закрыть сокет. Со стороны SCADA системы он конечно же закрывается. Просто прежде чем контроллер разрывает соединение со своей стороны проходит какое-то время. В течение этого времени при попытке организовать соединение возникают проблемы т.к. со стороны контроллера порт занят.
SCADA соединение не разрывает. Лог снифера это чётко показывает. Соединение вынужден, из-за отсутствия обмена, рвать ПЛК.
Когда закрывается соединение, инициатор посылает FIN, ему в ответ FIN ASK
TeslaSCADA
15.12.2016, 22:50
FIN при остановки и при закрытие сокета посылается и получается FIN ACK обратно. Просто это не вошло в представленный Dump. Ниже представлен другой Dump при остановки рантайма.
28119
FIN при остановки и при закрытие сокета посылается и получается FIN ACK обратно. Просто это не вошло в представленный Dump. Ниже представлен другой Dump при остановки рантайма.
28119
:) вот так сложно было повторить проблему темы, ну показали финаск, продолжили бы, сразу бы попытались установить новое соединение, чтоб было видно что проблема не конкретно одного человека. Иди у Вас этого не наблюдается?
Филоненко Владислав
16.12.2016, 11:13
Вообще эта мода выкладывать логи в виде картинок...да ещё и кусочным методом...
TeslaSCADA
16.12.2016, 12:46
Эта проблема наблюдается только при соединении с конкретным контроллером.
Филоненко Владислав
16.12.2016, 13:10
С конкретным экземпляром или типом?
И можно лог с ошибкой полностью, не картинкой?
Serhioromano
21.12.2016, 13:19
Я думаю это мне нужно сделть. У меня же этот контроллер. Поробую сегодня опять все навроить и записать полные логи.
Serhioromano
21.12.2016, 13:51
Вот лог. Извините опять картика. Честно сказать кое как эту прогу запустил. Я вообще не знаю как она работает. ПРобовал сохранить как текст но там вообще не понятно что сохраняется.
Сначала подключился, потом отключился и 2 раза попробовал сразуже подключится.
http://www.owen.ru/forum/attachment.php?attachmentid=28265&stc=1&d=1482317433
Если скажете как передать лог не картинкой моге это сделать.
Владимир Ситников
21.12.2016, 13:54
Если скажете как передать лог не картинкой моге это сделать.
Нажмите File > Save, укажите имя файла и всего делов.
Но есть нюанс: в собранных данных могут быть разнообразные пароли (если захватывались все пакеты, а не только между ПЛК и ПК). Поэтому нужно либо перепроверять (что лишнего ничего не собралось), либо отправлять файл в личку.
Serhioromano
21.12.2016, 14:10
Да нет там отслеживался только айпи контроллера. И потом сохранить не так то и легко.
http://www.owen.ru/forum/attachment.php?attachmentid=28273&stc=1&d=1482318600
Что выбрать? Я ни однго формата тут не знаю.
Владимир Ситников
21.12.2016, 14:52
Да нет там отслеживался только айпи контроллера. И потом сохранить не так то и легко.
http://www.owen.ru/forum/attachment.php?attachmentid=28273&stc=1&d=1482318600
Что выбрать? Я ни однго формата тут не знаю.
Выбирайте "Wireshark/... - pcapng"
Serhioromano
23.12.2016, 09:33
Ну а по картинке кто-нибудь может что сказать?
Владимир Ситников
23.12.2016, 10:32
Ну а по картинке кто-нибудь может что сказать?
Во-первых, нужно всё-таки логи в нормально собрать.
Лечить по фотографии это неблагодарное дело.
Можно несколько подобных, но в виде файлов?
Странно выглядит, что на 627 запрос ПЛК не отвечает сразу, а отвечает только после того, как происходит tcp retransmit от scada.
На ПЛК какая программа?
На "пустой" программе проблема воспроизводится?
На пакете 652 scada закрывает соединение (шлёт FIN+ACK в ПЛК). 655ым пакетом ПЛК подтверждает, что понял, что scada закрыла соединение.
НО соединение остаётся открытым на стороне ПЛК и почему-то ПЛК не закрывает соединение.
По-хорошему, должен быть FIN+ACK пакет от ПЛК, а его нет.
Т.е. выглядит как half-open: scada закрыла, ПЛК нет.
Филоненко Владислав
23.12.2016, 10:39
При закрытии SCAD-ой shutdown не сделан. поэтому в сети гуляют пакеты от предыдущего соединения.
Владимир Ситников
23.12.2016, 11:02
При закрытии SCAD-ой shutdown не сделан. поэтому в сети гуляют пакеты от предыдущего соединения.
О каком shutdown речь?
Ещё раз: scada отправляет FIN+ACK (пакет 652), чем она и говорит о закрытии соединения со своей стороны.
ПЛК почему-то закрывать соединение не думает, и именно ПЛК является инициатором "TCP keepalive".
На эти keepalive scada отвечает ACK'ами, т.к. по спецификации TCP, даже если соединение со стороны scada закрыто, то продолжать приём всё равно нужно.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot