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

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

Просмотр 11 сообщений - с 31 по 41 (из 41 всего)
  • Автор
    Сообщения
  • #16702
    Mikhail
    Модератор

    После упрощения метода Read, нормально ли отрабатывает чтение при наличии питания?

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

    Есть ли возможность попробовать Moxa NPort для сравнения? Может быть железо тоже ведёт себя по-разному, не только .NET и Mono.

    #16704
    manjey73
    Участник

    1. При наличии питания конечного устройства чтение как обычно в норме.
    2. Зависает в той же точке, но при остановке или перезапуске Коммуникатора выдает ошибку
    Ошибка при считывании данных: Unable to read data from the transport connection: Operation on non-blocking socket would block.
    А в оригинальном ScadaCommCommon после остановки или перезапуска появляется в логе
    Прием(0/Х)
    Ошибка связи!

    У меня нет Moxa к сожалению. Максимум, что могу попробовать, организовать Ethernet-RS485 на другом одноплатнике, например используя или remserial или socat.
    Не думаю, что поведение изменится, но постараюсь проверить хоть так.

    Если у вас есть машина с Linux для тестирования, могу на ПЛК дать драйвер, организовать доступ на USR-N520 и подвесить на GPIO Raspberry реле для отключения питания ПЛК. Ну или лучше на второй счетчик это организовать, а то ПЛК у меня вот-вот отберут… Потому что проблема достаточно серьезная, учитывая возможность разворачивать сервера на Linux.

    А кто нынче Mono рулит ? Microsoft ?

    #16722
    Mikhail
    Модератор

    Максимум, что могу попробовать, организовать Ethernet-RS485 на другом одноплатнике, например используя или remserial или socat.

    Давайте попробуем.

    Попробуйте ещё до вызова NetStream.Read проверить NetStream.DataAvailable. Если false, то не читать.

    А кто нынче Mono рулит ? Microsoft ?

    Да.

    #16723
    manjey73
    Участник

    NetStream.DataAvailable. Если false, то не читать.

    Тут подробнее, как это в коде будет выглядеть ?

    #16727
    Mikhail
    Модератор

    Примерно:

    if (NetStream.DataAvailable)
      readCnt += NetStream.Read(buffer, readCnt + offset, count - readCnt);
    #16737
    manjey73
    Участник

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

    Счетчик

    2020-07-24 13:43:00 Сеанс связи с КП 64 "Mercury236мгн_20", тип: KpMercury23x, адрес: 20
    Отправка (6): 14 04 02 FF 05 35
    Приём (0/16): 
    Ошибка связи!
    Отправка (6): 14 04 02 FF 05 35
    Приём (16/16): 14 20 00 00 06 07 20 40 00 00 06 07 20 07 AC CD
    OK!
    Отправка (5): 14 04 00 33 04
    Приём (11/11): 14 20 00 00 06 07 20 40 00 00 06
    Ошибка CRC!
    Отправка (5): 14 04 00 33 04
    Приём (11/11): 07 20 07 AC CD 14 40 42 13 05 24
    Ошибка CRC!
    Отправка (5): 14 08 02 B7 C5
    Приём (7/7): 07 20 01 3E 56 14 41
    Ошибка CRC!
    Отправка (5): 14 08 02 B7 C5
    Приём (7/7): 42 13 05 24 07 20 01
    Ошибка CRC!
    Ошибка связи! Недопустимая команда
    Отправка (5): FE 03 08 11 06
    Отправка (6): 14 08 14 00 8B 16
    Приём (16/19): FF 9A 14 00 01 00 01 84 03 14 00 01 00 01 84 03
    Ошибка CRC!
    Отправка (6): 14 08 14 00 8B 16
    Приём (19/19): 14 04 00 72 E1 04 00 A6 E0 00 00 00 00 00 40 CC 00 B9 67
    OK!
    Отправка (6): 14 08 14 04 8A D5
    Приём (19/19): 14 04 00 72 E1 04 00 A6 E0 00 00 00 00 00 40 CC 00 B9 67
    OK!
    Отправка (6): 14 08 14 08 8A D0
    Приём (19/19): 14 00 00 FB 87 00 00 41 8F 00 00 00 00 00 40 46 07 30 98
    OK!
    Отправка (6): 14 08 14 30 8B 02
    Приём (15/15): 14 04 00 D1 F1 04 00 80 EA 00 00 00 00 00 40
    Ошибка CRC!
    Отправка (6): 14 08 14 30 8B 02
    Приём (15/15): 51 07 92 D3 14 00 DB 03 00 E0 03 00 00 00 40
    Ошибка CRC!
    Отправка (6): 14 08 14 10 8A DA
    Приём (12/12): 6C 00 5F 8B 14 00 DB 03 00 E0 03 00
    Ошибка CRC!
    Отправка (6): 14 08 14 10 8A DA
    Приём (12/12): 00 00 40 6C 00 5F 8B 14 00 BC 55 00
    Ошибка CRC!
    Отправка (6): 14 08 14 20 8A CE
    Приём (12/12): C2 55 00 C2 55 C7 21 14 00 BC 55 00
    Ошибка CRC!
    Отправка (6): 14 08 14 20 8A CE
    Приём (12/12): C2 55 00 C2 55 C7 21 14 00 4E 39 00
    Ошибка CRC!
    Отправка (6): 14 08 14 40 8A E6
    Приём (6/6): 00 00 00 54 00 22
    Ошибка CRC!
    Отправка (6): 14 08 14 40 8A E6
    Приём (6/6): 38 14 00 4E 39 00
    Ошибка CRC!

    ПЛК

    2020-07-24 13:41:39 Запуск линии связи 19 "Allen"
    
    2020-07-24 13:41:39 Установка TCP-соединения с 192.168.0.12:26
    
    2020-07-24 13:41: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
    Приём (0/2): 
    Ошибка связи!
    Отправка (20): 10 01 59 10 02 59 00 0F 00 02 00 A2 3A 0A 89 00 00 10 03 CE
    Приём (2/2): 10 06
    OK!
    Отправка (4): 10 05 59 A7
    Приём (71): 10 06 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
    Ошибка КС! crc = 6E
    
    2020-07-24 13:41:40 Отключение от 192.168.0.12
    
    2020-07-24 13:42:00 Установка TCP-соединения с 192.168.0.12:26
    
    2020-07-24 13:42:00 Сеанс связи с КП 133 "MicroLogix1400_1", тип: KpRAdf1, адрес: 89
    Отправка (20): 10 01 59 10 02 59 00 0F 00 02 00 A2 3A 0A 89 00 00 10 03 CE
    Приём (0/2): 
    Ошибка связи!
    Отправка (20): 10 01 59 10 02 59 00 0F 00 03 00 A2 3A 0A 89 00 00 10 03 CD
    Приём (2/2): 10 06
    OK!
    Отправка (4): 10 05 59 A7
    Приём (71): 10 06 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
    Ошибка КС! crc = 6E
    
    2020-07-24 13:42:00 Отключение от 192.168.0.12

    Добавление if (NetStream.DataAvailable) только ухудшает обмен… такое ощущение, что проглатываются байты.

    #16748
    Mikhail
    Модератор

    А если так?

    while (readCnt < count && startDT <= utcNowDT && utcNowDT <= stopDT)
    {
        // считывание данных
        try { 
          if (NetStream.DataAvailable)
              readCnt += NetStream.Read(buffer, readCnt + offset, count - readCnt); }
        catch (IOException) { }
    
        // накопление данных во внутреннем буфере соединения
        if (readCnt < count)
            Thread.Sleep(DataAccumThreadDelay);
    
        utcNowDT = DateTime.UtcNow;
    }
    #16749
    manjey73
    Участник

    С этим кодом вроде все ОК.
    Лог с ПЛК при отключении только ПЛК выдает Ошибка Связи, после восстановления питания пошел опрос как положено на следующем цикле.

    2020-07-27 11:16:00 Сеанс связи с КП 133 "MicroLogix1400_1", тип: KpRAdf1, адрес: 89
    Отправка (20): 10 01 59 10 02 59 00 0F 00 09 00 A2 3A 0A 89 00 00 10 03 C7
    Приём (2/2): 10 06
    OK!
    Отправка (4): 10 05 59 A7
    Приём (69): 10 02 00 59 4F 00 09 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 78
    Отправка (2): 10 06
    OK!
    Отправка (20): 10 01 59 10 02 59 00 0F 00 0A 00 A2 9E 0B 89 00 00 10 03 61
    Приём (2/2): 10 06
    OK!
    Отправка (4): 10 05 59 A7
    Приём (171): 10 02 00 59 4F 00 0A 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 E3 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 E3 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 2E
    Отправка (2): 10 06
    OK!
    Отправка (20): 10 01 59 10 02 59 00 0F 00 0B 00 A2 14 0C 89 00 00 10 03 E9
    Приём (2/2): 10 06
    OK!
    Отправка (4): 10 05 59 A7
    Приём (31): 10 02 00 59 4F 00 0B 00 31 08 3D 03 8E 03 00 00 00 00 00 00 00 00 00 00 00 00 07 05 10 03 37
    Отправка (2): 10 06
    OK!
    Отправка (20): 10 01 59 10 02 59 00 0F 00 0C 00 A2 14 08 8A 00 00 10 03 EB
    Приём (2/2): 10 06
    OK!
    Отправка (4): 10 05 59 A7
    Приём (32): 10 02 00 59 4F 00 0C 00 00 C8 E2 45 9E 80 D6 3F 75 CD E4 3C 00 10 10 03 45 00 00 BC 41 10 03 73
    Отправка (2): 10 06
    OK!
    
    2020-07-27 11:16:01 Отключение от 192.168.0.12
    
    2020-07-27 11:18:00 Установка TCP-соединения с 192.168.0.12:26
    
    2020-07-27 11:18:00 Сеанс связи с КП 133 "MicroLogix1400_1", тип: KpRAdf1, адрес: 89
    Отправка (20): 10 01 59 10 02 59 00 0F 00 0D 00 A2 3A 0A 89 00 00 10 03 C3
    Приём (0/2): 
    Ошибка связи!
    Отправка (20): 10 01 59 10 02 59 00 0F 00 0E 00 A2 3A 0A 89 00 00 10 03 C2
    Приём (0/2): 
    Ошибка связи!
    
    2020-07-27 11:18:03 Отключение от 192.168.0.12
    
    2020-07-27 11:20:00 Установка TCP-соединения с 192.168.0.12:26
    
    2020-07-27 11:20:00 Сеанс связи с КП 133 "MicroLogix1400_1", тип: KpRAdf1, адрес: 89
    Отправка (20): 10 01 59 10 02 59 00 0F 00 0F 00 A2 3A 0A 89 00 00 10 03 C1
    Приём (2/2): 10 06
    OK!
    Отправка (4): 10 05 59 A7
    Приём (69): 10 02 00 59 4F 00 0F 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 72
    Отправка (2): 10 06
    OK!
    Отправка (20): 10 01 59 10 02 59 00 0F 00 11 00 A2 9E 0B 89 00 00 10 03 5A
    Приём (2/2): 10 06
    OK!
    Отправка (4): 10 05 59 A7
    Приём (171): 10 02 00 59 4F 00 11 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 E3 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 E3 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 27
    Отправка (2): 10 06
    OK!
    Отправка (20): 10 01 59 10 02 59 00 0F 00 12 00 A2 14 0C 89 00 00 10 03 E2
    Приём (2/2): 10 06
    OK!
    Отправка (4): 10 05 59 A7
    Приём (31): 10 02 00 59 4F 00 12 00 31 08 3D 03 8E 03 00 00 00 00 00 00 00 00 00 00 00 00 07 05 10 03 30
    Отправка (2): 10 06
    OK!
    Отправка (20): 10 01 59 10 02 59 00 0F 00 13 00 A2 14 08 8A 00 00 10 03 E4
    Приём (2/2): 10 06
    OK!
    Отправка (4): 10 05 59 A7
    Приём (32): 10 02 00 59 4F 00 13 00 00 C8 E2 45 9E 80 D6 3F 75 CD E4 3C 00 10 10 03 45 00 00 BC 41 10 03 6C
    Отправка (2): 10 06
    OK!
    
    2020-07-27 11:20:01 Отключение от 192.168.0.12

    Счетчик читается тоже нормально, вечером приеду отключу один счетчик для проверки.

    #16756
    Mikhail
    Модератор

    Можете погонять на разных компьютерах, Windows и Linux? Если будет работать, то я включу изменение в основной код. Это очень важная часть ПО, не хотелось бы при выходе новой версии всё сломать ))

    #16759
    manjey73
    Участник

    Запустил опрос на Windows, минут 20 погонял, нареканий при опросе нет.
    Так же на Linux отключал как ПЛК так и один счетчик, зависаний нет, как положено — «Ошибка связи» и новый опрос на следующем цикле.

    #16765
    Mikhail
    Модератор

    Хорошо, тогда включим это изменение в код.

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