Стартовая страница › Форумы › Разработка и интеграция › Зависание опроса, после откл. опрашиваемого
- В этой теме 40 ответов, 2 участника, последнее обновление 3 года, 8 месяцев назад сделано Mikhail.
-
АвторСообщения
-
21.07.2020 в 15:47 #16702MikhailМодератор
После упрощения метода Read, нормально ли отрабатывает чтение при наличии питания?
Немного запутался в симптомах — можете подвести промежуточный итог, как ведёт себя система после изменений кода?
Есть ли возможность попробовать Moxa NPort для сравнения? Может быть железо тоже ведёт себя по-разному, не только .NET и Mono.
21.07.2020 в 15:55 #16704manjey73Участник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 ?
22.07.2020 в 20:26 #16722MikhailМодераторМаксимум, что могу попробовать, организовать Ethernet-RS485 на другом одноплатнике, например используя или remserial или socat.
Давайте попробуем.
Попробуйте ещё до вызова NetStream.Read проверить NetStream.DataAvailable. Если false, то не читать.
А кто нынче Mono рулит ? Microsoft ?
Да.
22.07.2020 в 22:23 #16723manjey73УчастникNetStream.DataAvailable. Если false, то не читать.
Тут подробнее, как это в коде будет выглядеть ?
23.07.2020 в 17:19 #16727MikhailМодераторПримерно:
if (NetStream.DataAvailable) readCnt += NetStream.Read(buffer, readCnt + offset, count - readCnt);
24.07.2020 в 13:50 #16737manjey73УчастникТак стало все печальнее в обычном режиме, когда устройства запитаны. Смысла нет даже проверять при отключении.
Счетчик
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) только ухудшает обмен… такое ощущение, что проглатываются байты.
27.07.2020 в 10:43 #16748MikhailМодераторА если так?
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; }
27.07.2020 в 11:23 #16749manjey73УчастникС этим кодом вроде все ОК.
Лог с ПЛК при отключении только ПЛК выдает Ошибка Связи, после восстановления питания пошел опрос как положено на следующем цикле.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
Счетчик читается тоже нормально, вечером приеду отключу один счетчик для проверки.
27.07.2020 в 18:19 #16756MikhailМодераторМожете погонять на разных компьютерах, Windows и Linux? Если будет работать, то я включу изменение в основной код. Это очень важная часть ПО, не хотелось бы при выходе новой версии всё сломать ))
27.07.2020 в 21:54 #16759manjey73УчастникЗапустил опрос на Windows, минут 20 погонял, нареканий при опросе нет.
Так же на Linux отключал как ПЛК так и один счетчик, зависаний нет, как положено — «Ошибка связи» и новый опрос на следующем цикле.28.07.2020 в 17:59 #16765MikhailМодераторХорошо, тогда включим это изменение в код.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.