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

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

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

    Отключил питание ПЛК

    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 До чтения
    
    #16676
    manjey73
    Участник

    По коду логи расставил так

                    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
    
    
    #16677
    manjey73
    Участник

    То есть из Connection.Read не выходит, но при перезапуске Коммуникатора и отключенном питании ПЛК в лог попадают данные, которые после него установлены.

    #16680
    manjey73
    Участник

    Может можно в системе сделать какой-то программный костыль, пока не выйдет версия 6 или не исправят в Mono ?

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

    Правильно ли я понял, что зависает чтение именно в момент отключения питания? А если питание уже было отключено, то зависание не происходит?

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

    Ссылка на метод чтения без условий останова, который вызывается.

    можно в системе сделать какой-то программный костыль

    Именно так ) Осталось придумать какой.

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

    У Вас собирается ScadaCommCommon?
    Если да, то в указанном методе Read замените весь цикл while на одну строку:

    readCnt += NetStream.Read(buffer, readCnt + offset, count - readCnt);

    Надеюсь, что в таком упрощённом виде зависать будет негде.

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

    Какой Timeout используется?

    #16685
    manjey73
    Участник

    Timeout используется штатный из окошка настроек Опрос КП в Коммуникаторе. Или о каком речь ?
    Зависание происходит если отключить прибор между опросами.
    Единственный раз, когда подловил момент сработки timeout, когда в момент опроса вырубили свет и это зафиксировалось в логе. Успел прийти один байт вместо 19 и сработал таймаут, повторный запрос привел к зависанию, так как уже 0 байт ессно.

    То есть зависает в период опроса, если нет ни одного байта в ответе (источник отключен), ну а если хоть байт пришел, см. выше… руками я такое повторить не могу, просто не успеваю, по крайней мере на ПЛК. На счетчике может быть успею, но это мне надо автомат дергать в уличном щитке.

    Сейчас попробую собрать и вечером проверю.

    • Этот ответ был изменен 3 года, 8 месяцев назад от manjey73.
    • Этот ответ был изменен 3 года, 8 месяцев назад от manjey73.
    #16688
    Mikhail
    Модератор

    Какой конвертер Ethernet-RS485 ?

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

    Timeout используется штатный из окошка настроек Опрос КП в Коммуникаторе. Или о каком речь ?

    Да, этот. Чему равен таймаут?

    #16690
    manjey73
    Участник

    1500 как для счетчика так и для ПЛК, линии разные.
    USR N-520 двух портовый https://usriot.ru/serial-to-ethernet/serial-device-servers/industrial-device-servers/usr-n520

    Собрал ScadaCommCommon, доеду домой, опробую.

    #16691
    manjey73
    Участник

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

    #16692
    manjey73
    Участник

    Костыль не сработал, при остановке или перезапуске Коммуникатора выдает сообщение об ошибке.

    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.
    #16694
    manjey73
    Участник

    да пи…. похоже один порт умер (свет выключали сегодня), оба счетчика не отвечают, хотя ПЛК и счетчик воды запустился….

    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
    

    Хотя электричество уже есть. Отключал из опроса один счетчик с линии, второй тоже молчит…
    И опять вырубили свет…. 🙁

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