PDA

Просмотр полной версии : Не устойчивое соединение с ПЛК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 и все. Что там еще надо чтобы они закрыли порт со своей стороны (со стороны контроллера) не ясно. Возможно там есть возможность выставить тайминг закрытие порта или создать несколько слейв устройств с одним и тем же адресом. Потому что непонятно как ты собираешься реализовать подключение нескольких устройств к одному контроллеру.

Что ему сказать?

Возможно что при закрытии сокета у вас стоит какая-то задержка перед произведение полного отключения?

capzap
13.12.2016, 17:28
Вот что мне написал разработчик скады.



Что ему сказать?

Возможно что при закрытии сокета у вас стоит какая-то задержка перед произведение полного отключения?

нам тоже не понятно что это за другие устройства, не скринах вроде только по одному серверу и клиенту. У овена если не передаются данные больше 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 к нам в тему.

capzap
13.12.2016, 20:19
51479 это ответный порт на запрос по 502 порту,посмотрите кто у него слейв,а кто мастер
а по 12мс это я в реальности видел когда mqtt протокол делал, пришлось пригласить каждые 10мс чтоб раза небывало между брокером и подписчиком, которые работают по событиям

Scream
13.12.2016, 22:21
51479 это ответный порт на запрос по 502 порту,посмотрите кто у него слейв,а кто мастер
а по 12мс это я в реальности видел когда mqtt протокол делал, пришлось пригласить каждые 10мс чтоб раза небывало между брокером и подписчиком, которые работают по событиям

Работал с sysLibSocket, нет там конечно 12мс, от 10 до 14 секунд, причем зависит от времени цикла ПЛК (почему хз).
Если открываю tcp slave через конфигуратор, то опрашивать могу и 1 раз в 2 секунды, никаких закрытий НЕ будет.

Scream
13.12.2016, 22:29
Первый скрин явно ПЛК slave, видно.
Второй путает первая строка, но опять же потом вижу тоже что и говорит Владислав.

capzap
14.12.2016, 05:19
да, я скорее всего путать и речь о секундах, нет возможности проекты взглянуть
да и по поводу того что выдает дамп тоже не хватает времени прочесть мануал. Если сравнивать две картинки и принять за правильную первую, то выходит что в конфигураторе сменили слейв не мастера.

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

capzap
16.12.2016, 04:38
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 закрыто, то продолжать приём всё равно нужно.