Стартовая страница › Форумы › Разработка и интеграция › Зависание опроса, после откл. опрашиваемого
- В этой теме 40 ответов, 2 участника, последнее обновление 3 года, 8 месяцев назад сделано Mikhail.
-
АвторСообщения
-
18.07.2020 в 14:33 #16675manjey73Участник
Отключил питание ПЛК
2020-07-18 14:26:00 Установка TCP-соединения с 192.168.0.12:26 2020-07-18 14:26:00 Сеанс связи с КП 133 "MicroLogix1400_1", тип: KpRAdf1, адрес: 89 Test До записи Test После записи до лога Отправка (20): 10 01 59 10 02 59 00 0F 00 2A 00 A2 3A 0A 89 00 00 10 03 A6 Test После записи и лога Test До чтения
Сделал рестарт Коммуникатора без подключения питания ПЛК
2020-07-18 14:26:00 Установка TCP-соединения с 192.168.0.12:26 2020-07-18 14:26:00 Сеанс связи с КП 133 "MicroLogix1400_1", тип: KpRAdf1, адрес: 89 Test До записи Test После записи до лога Отправка (20): 10 01 59 10 02 59 00 0F 00 2A 00 A2 3A 0A 89 00 00 10 03 A6 Test После записи и лога Test До чтения Test После чтения до лога Приём (0/2): Test После чтения и лога Ошибка связи! 2020-07-18 14:27:14 Отключение от 192.168.0.12 2020-07-18 14:27:14 Завершение работы линии связи 19 "Allen" -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- 2020-07-18 14:27:20 Инициализация линии связи 19 "Allen" Registration key is valid 2020-07-18 14:27:22 Запуск линии связи 19 "Allen" 2020-07-18 14:27:22 Установка TCP-соединения с 192.168.0.12:26 2020-07-18 14:27:22 Сеанс связи с КП 133 "MicroLogix1400_1", тип: KpRAdf1, адрес: 89 Test До записи Test После записи до лога Отправка (20): 10 01 59 10 02 59 00 0F 00 01 00 A2 3A 0A 89 00 00 10 03 CF Test После записи и лога Test До чтения
Подключил питание ПЛК без перезапуска Коммуникатора
2020-07-18 14:26:00 Сеанс связи с КП 133 "MicroLogix1400_1", тип: KpRAdf1, адрес: 89 Test До записи Test После записи до лога Отправка (20): 10 01 59 10 02 59 00 0F 00 2A 00 A2 3A 0A 89 00 00 10 03 A6 Test После записи и лога Test До чтения Test После чтения до лога Приём (0/2): Test После чтения и лога Ошибка связи! 2020-07-18 14:27:14 Отключение от 192.168.0.12 2020-07-18 14:27:14 Завершение работы линии связи 19 "Allen" -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- 2020-07-18 14:27:20 Инициализация линии связи 19 "Allen" Registration key is valid 2020-07-18 14:27:22 Запуск линии связи 19 "Allen" 2020-07-18 14:27:22 Установка TCP-соединения с 192.168.0.12:26 2020-07-18 14:27:22 Сеанс связи с КП 133 "MicroLogix1400_1", тип: KpRAdf1, адрес: 89 Test До записи Test После записи до лога Отправка (20): 10 01 59 10 02 59 00 0F 00 01 00 A2 3A 0A 89 00 00 10 03 CF Test После записи и лога Test До чтения Test После чтения до лога Приём (1/2): 00 Test После чтения и лога Test До записи Test После записи до лога Отправка (20): 10 01 59 10 02 59 00 0F 00 01 00 A2 3A 0A 89 00 00 10 03 CF Test После записи и лога Test До чтения
18.07.2020 в 14:37 #16676manjey73УчастникПо коду логи расставил так
while (RequestNeeded(ref tryNum)) { // Отправить на расчет CS после подстановки номера запроса tns = (ushort)CommonProps[address]; byteTNS = BitConverter.GetBytes(tns); Array.Copy(byteTNS, 0, req.ReqData, req.IdxTNS, 2); byte[] ch_cs = CheckCS(req.ReqData, out outData); Array.Copy(ch_cs, 0, req.ReqData, req.ReqData.Length - ch_cs.Length, ch_cs.Length); // отправка запроса WriteToLog("Test До записи"); // TEST TEST TEST Connection.Write(req.ReqData, 0, req.ReqData.Length, CommUtils.ProtocolLogFormats.Hex, out logText); WriteToLog("Test После записи до лога"); // TEST TEST TEST WriteToLog(logText); WriteToLog("Test После записи и лога"); // TEST TEST TEST // приём ответа подтверждения WriteToLog("Test До чтения"); // TEST TEST TEST readCnt = Connection.Read(inBuf, 0, 2, ReqParams.Timeout, CommUtils.ProtocolLogFormats.Hex, out logText); WriteToLog("Test После чтения до лога"); // TEST TEST TEST WriteToLog(logText); WriteToLog("Test После чтения и лога"); // TEST TEST TEST
18.07.2020 в 14:39 #16677manjey73УчастникТо есть из Connection.Read не выходит, но при перезапуске Коммуникатора и отключенном питании ПЛК в лог попадают данные, которые после него установлены.
20.07.2020 в 15:29 #16680manjey73УчастникМожет можно в системе сделать какой-то программный костыль, пока не выйдет версия 6 или не исправят в Mono ?
20.07.2020 в 17:05 #16681MikhailМодераторПравильно ли я понял, что зависает чтение именно в момент отключения питания? А если питание уже было отключено, то зависание не происходит?
20.07.2020 в 17:08 #16682MikhailМодераторСсылка на метод чтения без условий останова, который вызывается.
можно в системе сделать какой-то программный костыль
Именно так ) Осталось придумать какой.
20.07.2020 в 17:17 #16683MikhailМодераторУ Вас собирается ScadaCommCommon?
Если да, то в указанном методе Read замените весь цикл while на одну строку:readCnt += NetStream.Read(buffer, readCnt + offset, count - readCnt);
Надеюсь, что в таком упрощённом виде зависать будет негде.
20.07.2020 в 17:21 #16684MikhailМодераторКакой Timeout используется?
20.07.2020 в 17:27 #16685manjey73УчастникTimeout используется штатный из окошка настроек Опрос КП в Коммуникаторе. Или о каком речь ?
Зависание происходит если отключить прибор между опросами.
Единственный раз, когда подловил момент сработки timeout, когда в момент опроса вырубили свет и это зафиксировалось в логе. Успел прийти один байт вместо 19 и сработал таймаут, повторный запрос привел к зависанию, так как уже 0 байт ессно.То есть зависает в период опроса, если нет ни одного байта в ответе (источник отключен), ну а если хоть байт пришел, см. выше… руками я такое повторить не могу, просто не успеваю, по крайней мере на ПЛК. На счетчике может быть успею, но это мне надо автомат дергать в уличном щитке.
Сейчас попробую собрать и вечером проверю.
20.07.2020 в 17:32 #16688MikhailМодераторКакой конвертер Ethernet-RS485 ?
20.07.2020 в 17:33 #16689MikhailМодераторTimeout используется штатный из окошка настроек Опрос КП в Коммуникаторе. Или о каком речь ?
Да, этот. Чему равен таймаут?
20.07.2020 в 17:46 #16690manjey73Участник1500 как для счетчика так и для ПЛК, линии разные.
USR N-520 двух портовый https://usriot.ru/serial-to-ethernet/serial-device-servers/industrial-device-servers/usr-n520Собрал ScadaCommCommon, доеду домой, опробую.
20.07.2020 в 17:48 #16691manjey73УчастникЕсли отключать сам преобразователь и потом вернуть ему питание, то все отрабатывает, но там другой код я так понимаю работает.
20.07.2020 в 22:12 #16692manjey73УчастникКостыль не сработал, при остановке или перезапуске Коммуникатора выдает сообщение об ошибке.
2020-07-20 22:04:00 Установка TCP-соединения с 192.168.0.12:26 2020-07-20 22:04:00 Сеанс связи с КП 133 "MicroLogix1400_1", тип: KpRAdf1, адрес: 89 Отправка (20): 10 01 59 10 02 59 00 0F 00 26 00 A2 3A 0A 89 00 00 10 03 AA 2020-07-20 22:05:34 Ошибка при выполнении сеанса опроса КП 133 "MicroLogix1400_1": Ошибка при считывании данных: Unable to read data from the transport connection: Operation on non-blocking socket would block. 2020-07-20 22:05:34 Отключение от 192.168.0.12 2020-07-20 22:05:34 Завершение работы линии связи 19 "Allen" -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- 2020-07-20 22:05:40 Инициализация линии связи 19 "Allen" Registration key is valid 2020-07-20 22:05:42 Запуск линии связи 19 "Allen" 2020-07-20 22:05:42 Установка TCP-соединения с 192.168.0.12:26 2020-07-20 22:05:42 Сеанс связи с КП 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 2020-07-20 22:06:04 Ошибка при выполнении сеанса опроса КП 133 "MicroLogix1400_1": Ошибка при считывании данных: Unable to read data from the transport connection: Operation on non-blocking socket would block. 2020-07-20 22:06:04 Отключение от 192.168.0.12 2020-07-20 22:06:04 Завершение работы линии связи 19 "Allen"
Отправка (20): 10 01 59 10 02 59 00 0F 00 01 00 A2 3A 0A 89 00 00 10 03 CF так же висит на данной строке, пока не нажмешь перезапуск.
- Этот ответ был изменен 3 года, 8 месяцев назад от manjey73.
21.07.2020 в 11:49 #16694manjey73Участникда пи…. похоже один порт умер (свет выключали сегодня), оба счетчика не отвечают, хотя ПЛК и счетчик воды запустился….
2020-07-21 11:23:56 Сеанс связи с КП 64 "Mercury236мгн_20", тип: KpMercury23x, адрес: 20 Отправка (4): 14 00 0E B0
Висит на этом. При перезапуске добавляет
Приём (0/4): Ошибка связи! Отправка (5): FE 03 08 11 06 2020-07-21 11:47:30 Отключение от 192.168.0.12
Хотя электричество уже есть. Отключал из опроса один счетчик с линии, второй тоже молчит…
И опять вырубили свет…. 🙁 -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.