Зависание опроса, после откл. опрашиваемого

Стартовая страница Форумы Разработка и интеграция Зависание опроса, после откл. опрашиваемого

Просмотр 15 сообщений - с 1 по 15 (из 41 всего)
  • Автор
    Сообщения
  • #16653
    Аватарmanjey73
    Участник

    Так-с. Схема подключения. Scada на Raspberry Pi, опрос через 2-х портовый Ethernet-RS485 (USR N-520), оба подключены к ИБП.
    Счетчик Меркурий 236 на одном порту, и Allen Bradley на втором порту.
    При отключении света соответственно отключается счетчик (питание интерфейса по 3-ей фазе), Allen Bradley тоже на ИБП, но вчера я его отключил из розетки. Картина та же.
    Драйвера соответственно разные, но работающие через COM порт. В Scada настроен как TCP клиент на Ethernet-RS485 преобразователь.

    #16654
    Аватарmanjey73
    Участник

    #16655
    Аватарmanjey73
    Участник

    При отключении устройства от сети, в логе происходит запрос, ответа нет. Прибор подключаем обратно к сети, ничего не меняется. Только после перезапуска линии в логе появляется надпись Принято (0/2) Ошибка связи. Как будто не срабатывает отключение связи по timeout.

    Так происходит на обоих приборах. Вот конец лога при отключении питания прибора

    2020-07-14 23:12:01 Отключение от 192.168.0.12
    
    2020-07-14 23:14:00 Установка TCP-соединения с 192.168.0.12:26
    
    2020-07-14 23:14:00 Сеанс связи с КП 133 "MicroLogix1400_1", тип: KpRAdf1, адрес: 89
    Отправка (20): 10 01 59 10 02 59 00 0F 00 CA 19 A2 3A 0A 89 00 00 10 03 ED
    

    Хотя питание я на него подал, и скопировал лог гораздо позже, после его подключения.

    В драйверах вроде нет потоков, то есть весь опрос происходит в Session.
    В драйверах реализован разный способ остановки опроса, если в Меркурий вычисляется длина ответа, то в Allen Bradley идет остановка по массивам байт. Но логически все выполняется в Session последовательно.

    Вчера поздно приперся домой, так что логи только с одного устройства. Со счетчика нет. Еще могу отключить счетчик воды Пульсар по питанию, он висит на USB-RS485 преобразователе.

    #16656
    MikhailMikhail
    Модератор

    Нужно точнее определить момент зависания.
    Добавьте в драйвере вывод в лог до и после отправки данных, до и после приёма данных.

    Отключается ли питание сетевого роутера и преобразователя Ethernet-RS485 при отключении света?

    #16657
    Аватарmanjey73
    Участник

    Нет, питание остального не отключается. Галочка «Оставаться на связи» отключена.

    Сегодня еще постараюсь проверить на счетчике воды Пульсар. У него отдельное питание.

    Добавлю вывод в лог. Проверю еще чтение счетчика через USB-RS485 в такой ситуации.
    По результату отпишусь.

    #16658
    Аватарmanjey73
    Участник

    Успел проверить только счетчик воды. На скрине все видно. Отключил питание счетчика, потом включил.

    Все таки подозрение что не отрабатывает код остановки когда происходит опрос COM over TCP

    завтра добавлю код логирования в драйвера Меркурий и Allen Bradley и вечером проверю.

    #16659
    Аватарmanjey73
    Участник

    Сегодня отключали свет. Снял логи до перезагрузки Коммуникатора

    
    2020-07-16 10:45:43 Отключение от 192.168.0.12
    
    2020-07-16 10:46:00 Установка TCP-соединения с 192.168.0.12:23
    
    2020-07-16 10:46:00 Сеанс связи с КП 64 "Mercury236мгн_20", тип: KpMercury23x, адрес: 20
    Отправка (5): FE 03 08 11 06
    Отправка (6): 14 08 14 00 8B 16
    Приём (1/19): FE
    Ошибка связи!
    Отправка (6): 14 08 14 00 8B 16
    

    Видимо отключение произошло на моменте чтения (Прием (1/19).

    И после перезагрузки Коммуникатора

    даже как бы и ответ пришел, очень интересно, почему данного ответа не было в логе ? Хотя не важно, timeout линии точно не отрабатывает, когда COM порт подключен через Ethernet-RS485, подключенный к ИБП. Отключается питание только на конечном устройстве.

    #16660
    Аватарmanjey73
    Участник

    Да, счетчик воды, подключенный через USB-RS485 и по питанию на грязном, как ни в чем не бывало продолжил чтение после появления питания.

    2020-07-16 10:46:00 Сеанс связи с КП 53 "Счетчик воды", тип: KpPulsar, адрес: 68309
    Отправка (14): 00 06 83 09 01 0E 01 00 00 00 C2 90 99 EC
    Приём (14/14): 00 06 83 09 01 0E 8C 6C 4F 40 C2 90 00 38
    OK!
    Отправка (12): 00 06 83 09 0A 0C 1C 00 56 EE 22 05
    Приём (18/18): 00 06 83 09 0A 12 02 00 00 00 00 00 00 00 56 EE FE 3E
    OK!
    
    2020-07-16 10:47:00 Сеанс связи с КП 53 "Счетчик воды", тип: KpPulsar, адрес: 68309
    Отправка (14): 00 06 83 09 01 0E 01 00 00 00 80 81 69 40
    Приём (0/14): 
    Ошибка связи!
    Отправка (14): 00 06 83 09 01 0E 01 00 00 00 80 81 69 40
    Приём (0/14): 
    Ошибка связи!
    
    --------- тут все ошибки связи пока не было света -------
    
    2020-07-16 11:28:00 Сеанс связи с КП 53 "Счетчик воды", тип: KpPulsar, адрес: 68309
    Отправка (14): 00 06 83 09 01 0E 01 00 00 00 EB 75 47 F7
    Приём (0/14): 
    Ошибка связи!
    Отправка (14): 00 06 83 09 01 0E 01 00 00 00 EB 75 47 F7
    Приём (0/14): 
    Ошибка связи!
    
    2020-07-16 11:29:00 Сеанс связи с КП 53 "Счетчик воды", тип: KpPulsar, адрес: 68309
    Отправка (14): 00 06 83 09 01 0E 01 00 00 00 27 48 D3 26
    Приём (0/14): 
    Ошибка связи!
    Отправка (14): 00 06 83 09 01 0E 01 00 00 00 27 48 D3 26
    Приём (0/14): 
    Ошибка связи!
    
    2020-07-16 11:30:00 Сеанс связи с КП 53 "Счетчик воды", тип: KpPulsar, адрес: 68309
    Отправка (14): 00 06 83 09 01 0E 01 00 00 00 C3 3A 18 03
    Приём (14/14): 00 06 83 09 01 0E EE 7C 4F 40 C3 3A 48 56
    OK!
    Отправка (12): 00 06 83 09 0A 0C 1C 00 D1 BB 81 CA
    Приём (18/18): 00 06 83 09 0A 12 02 00 00 00 00 00 00 00 D1 BB 5D F1
    OK!
    

    И вот я перестартанул линию, чтобы Меркурий начал читаться

    2020-07-16 12:52:00 Сеанс связи с КП 53 "Счетчик воды", тип: KpPulsar, адрес: 68309
    Отправка (14): 00 06 83 09 01 0E 01 00 00 00 87 17 EB 1E
    Приём (14/14): 00 06 83 09 01 0E 77 BE 4F 40 87 17 DF 53
    OK!
    Отправка (12): 00 06 83 09 0A 0C 1C 00 52 7F E1 69
    Приём (18/18): 00 06 83 09 0A 12 02 00 00 00 00 00 00 00 52 7F 3D 52
    OK!
    
    2020-07-16 12:52:07 Закрытие последовательного порта /dev/mydev/Com5
    
    2020-07-16 12:52:07 Завершение работы линии связи 12 "Вода"
    --------------------------------------------------------------------------------
    --------------------------------------------------------------------------------
    2020-07-16 12:52:15 Инициализация линии связи 12 "Вода"
    2020-07-16 12:52:17 Запуск линии связи 12 "Вода"
    
    2020-07-16 12:52:17 Открытие последовательного порта /dev/mydev/Com5
    
    2020-07-16 12:52:17 Сеанс связи с КП 53 "Счетчик воды", тип: KpPulsar, адрес: 68309
    Отправка (14): 00 06 83 09 01 0E 01 00 00 00 72 45 2D B3
    Приём (14/14): 00 06 83 09 01 0E 77 BE 4F 40 72 45 19 FE
    OK!
    #16661
    MikhailMikhail
    Модератор

    То есть зависания перестали происходить?
    Если нет, то в каком месте зависание?

    #16664
    Аватарmanjey73
    Участник

    Не перестали.
    1. Счетчик эл. Меркурий 236 подключен через Ethernet-RS485 (на ибп) как TCP клиент
    зависает
    2. счетчик воды подключен через USB-RS485, питание берет от грязной розетки. не зависает.

    драйвера и того и другого есть на ГИТе, по части опроса они практически идентичны, так как известна длина ответа. Механизмов остановки по массиву байт не используется.

    3. PLC Allen-Bradley так же подключен через тот же Ethernet-RS485 на втором порту, но и сам сидит на ИБП. Вот его я отключал из розетки и зависание такое же.

    Момент зависания виден на скрине. СО стороны Scada идет запрос и тишина. Ни тебе отработки по таймауту, ничего. Но когда перегружаешь Коммуникатор, чтобы возобновился опрос, каким то чудом в лог попадает запись «Прием (0/19» и т.д.

    В момент зависания в логи нет строк «Прием (0/Х)» нет записи «Ошибка» и т.д. И это будет висеть до тех пор, пока не перезапустишь Коммуникатор. Как вариант можно вырубить питание еще и преобразователю, вероятно восстановится соединение после этого.

    #16666
    Аватарmanjey73
    Участник

    Так как соединение через TCP клиент и связь с Ethernet-RS485 преобразователем есть, то Коммуникатор ждет ответа от прибора бесконечно, но если успел прийти хоть один байт, тогда срабатывает timeout. Что видно по скрину. Но если нет ни одного байта (следующий запрос на скрине) то выпадает в осадок. А так как после включения питания прибора он ждет запроса, которого уже нет и не будет, так как Коммуникатор выпал в осадок на ожидание то так и продолжает висеть.

    #16671
    MikhailMikhail
    Модератор

    Как я уже писал: «Добавьте в драйвере вывод в лог до и после отправки данных, до и после приёма данных.»
    Без этого непонятно, зависание происходит в момент отправки или в момент приёма.

    Возникнет ли зависание, если запустить опрос с Windows-машины? Может быть проблема проявляется только на Mono.

    #16672
    Аватарmanjey73
    Участник

    Скорее всего вы правы, проблема в Mono вероятно.
    Запустил опрос на Windows, вырубил питание на ПЛК, срабатывает по таймауту, потом включил и пошел опрос.

    Завтра обновлю Raspberry по полной. Вообще она у меня зависает время от времени, вплоть до невозможности подключиться по SSH. А чего ей не хватает непонятно?…

    #16673
    Аватарmanjey73
    Участник

    Обновил систему и Mono
    Mono JIT compiler version 6.10.0.104 (tarball Fri Jun 26 20:06:03 UTC 2020)

    Ничего не изменилось.
    Лог до перезагрузки Коммуникатора

    2020-07-18 09:44:01 Отключение от 192.168.0.12
    
    2020-07-18 09:46:00 Установка TCP-соединения с 192.168.0.12:26
    
    2020-07-18 09:46:00 Сеанс связи с КП 133 "MicroLogix1400_1", тип: KpRAdf1, адрес: 89
    Отправка (20): 10 01 59 10 02 59 00 0F 00 D6 04 A2 3A 0A 89 00 00 10 03 F6
    

    и после перезагрузки Коммуникатора

    2020-07-18 09:44:01 Отключение от 192.168.0.12
    
    2020-07-18 09:46:00 Установка TCP-соединения с 192.168.0.12:26
    
    2020-07-18 09:46:00 Сеанс связи с КП 133 "MicroLogix1400_1", тип: KpRAdf1, адрес: 89
    Отправка (20): 10 01 59 10 02 59 00 0F 00 D6 04 A2 3A 0A 89 00 00 10 03 F6
    Приём (0/2): 
    Ошибка связи!
    
    2020-07-18 09:49:31 Отключение от 192.168.0.12
    
    2020-07-18 09:49:31 Завершение работы линии связи 19 "Allen"
    --------------------------------------------------------------------------------
    --------------------------------------------------------------------------------
    2020-07-18 09:49:37 Инициализация линии связи 19 "Allen"
    
    Registration key is valid
    2020-07-18 09:49:39 Запуск линии связи 19 "Allen"
    
    2020-07-18 09:49:39 Установка TCP-соединения с 192.168.0.12:26
    
    2020-07-18 09:49:39 Сеанс связи с КП 133 "MicroLogix1400_1", тип: KpRAdf1, адрес: 89
    Отправка (20): 10 01 59 10 02 59 00 0F 00 01 00 A2 3A 0A 89 00 00 10 03 CF
    Приём (2/2): 10 06
    OK!
    Отправка (4): 10 05 59 A7
    Приём (69): 10 02 00 59 4F 00 01 00 59 00 01 00 AB 1A 05 00 00 00 00 00 00 42 00 00 00 01 00 49 D1 FF 57 00 CB FF FB FF 00 00 00 00 00 00 00 00 05 00 F1 FF 00 00 ED 01 00 00 2C 01 00 00 00 00 04 00 00 00 28 00 10 03 80
    Отправка (2): 10 06
    OK!
    Отправка (20): 10 01 59 10 02 59 00 0F 00 02 00 A2 9E 0B 89 00 00 10 03 69
    Приём (2/2): 10 06
    OK!
    Отправка (4): 10 05 59 A7
    Приём (171): 10 02 00 59 4F 00 02 00 00 00 64 00 00 00 E8 03 00 00 64 00 31 01 ED 01 0A 00 10 10 03 99 01 8C 03 4D 04 FD 03 2C 01 E4 FF D2 FF BE FF A8 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C3 F2 00 C0 01 00 00 00 E8 03 00 00 10 10 00 2D 00 06 00 19 00 08 00 0B 00 00 00 2C 01 E4 FF D2 FF BE FF A8 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2C 01 00 00 00 00 00 00 00 00 19 00 1E 00 78 00 2D 00 7C 01 0A 00 20 1C 08 00 00 00 00 00 00 00 00 00 59 00 00 0A 2C 01 0A 00 00 00 00 00 00 00 00 00 F0 00 10 03 34
    Отправка (2): 10 06
    OK!
    Отправка (20): 10 01 59 10 02 59 00 0F 00 03 00 A2 14 0C 89 00 00 10 03 F1
    Приём (2/2): 10 06
    OK!
    Отправка (4): 10 05 59 A7
    Приём (31): 10 02 00 59 4F 00 03 00 31 08 3D 03 8E 03 00 00 00 00 00 00 00 00 00 00 00 00 07 05 10 03 3F
    Отправка (2): 10 06
    OK!
    Отправка (20): 10 01 59 10 02 59 00 0F 00 04 00 A2 14 08 8A 00 00 10 03 F3
    Приём (2/2): 10 06
    OK!
    Отправка (4): 10 05 59 A7
    Приём (32): 10 02 00 59 4F 00 04 00 00 C8 E2 45 9E 80 D6 3F 75 CD E4 3C 00 10 10 03 45 00 00 BC 41 10 03 7B
    Отправка (2): 10 06
    OK!
    
    2020-07-18 09:49:40 Отключение от 192.168.0.12

    Как видно строк Приём (0/2): и Ошибка связи! до перезагрузки Коммуникатора НЕТ. а после перезагрузки появляются.

    #16674
    MikhailMikhail
    Модератор

    Значит опять в Mono… Обязательно перейдём на .NET Core — вопрос времени.

    Надпись «Приём (0/2)» появляется уже после того, как метод приёма отработал. Поэтому нам нужно убедиться, что приём уже начался и зависание происходит либо на отправке, либо на приёме. Поэтому нужно в лог добавить дополнительный вывод сообщений — до начала приёма и после окончания приёма.

Просмотр 15 сообщений - с 1 по 15 (из 41 всего)
  • Вы должны авторизироваться для ответа в этой теме.