Драйвер ИВТМ на Raspberry

Помечено: 

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

    Вопрос к разработчикам:
    Размер кольцевого буфера принимаемых данных устанавливается файлом драйвера КП или вычисляется динамически?

    #16408
    manjey73
    Участник

    Почему начало ответа обрезается ? в Терминале есть настройка паузы перед получением ответа ? пробовать уменьшать delay в опросе КП до минимума…

    В настройках самого датчика есть возможность что либо корректировать ? пауза перед ответом например ?

    #16409
    manjey73
    Участник

    Судя по логам, у вас в RS идет четкий прием конца строк ответов, проглатывается начало.

    Увеличьте период опроса с 5 сек до 20 сек или больше.
    уменьшите timeout до разумных пределов, чтобы весь ответ мог поместиться. delay уменьшите до минимума насколько возможно.

    з.ы. вообще ощущение, что в Linux не успевает порт переключиться на прием как вариант. Что у вас за Raspberrry ? Что на ней крутится вообще ?

    • Этот ответ был изменен 3 года, 10 месяцев назад от manjey73.
    #16411
    qweqweqwe
    Участник

    В настройках самого датчика есть возможность что либо корректировать ? пауза перед ответом например ?

    В настройках прибора можно изменить только адрес и скорость обмена. в описании протокола:

    
    Время ожидания ответа не более 300 мс
    

    Увеличьте период опроса с 5 сек до 20 сек или больше.
    уменьшите timeout до разумных пределов, чтобы весь ответ мог поместиться. delay уменьшите до минимума насколько возможно.

    
    2020-06-11 08:50:07 Stop communication line 3 "USB>RS485"
    --------------------------------------------------------------------------------
    --------------------------------------------------------------------------------
    2020-06-11 08:50:23 Initialize communication line 3 "USB>RS485"
    2020-06-11 08:50:24 Start communication line 3 "USB>RS485"
    
    2020-06-11 08:50:24 Open serial port /dev/ttyUSB0
    
    2020-06-11 08:50:24 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: 1A2EC1C4225
    Error: invalid checksum!
    
    2020-06-11 08:50:30 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: 15DCD1C4209
    Error: invalid checksum!
    
    2020-06-11 08:50:40 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: 19AA61C420C
    Error: invalid checksum!
    
    2020-06-11 08:50:50 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: 41A2631C42FC
    Error: invalid checksum!
    
    2020-06-11 08:51:00 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: 4104581C42EF
    Error: invalid checksum!
    
    2020-06-11 08:51:10 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: FC
    Error: incorrect response length!
    
    2020-06-11 08:51:20 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: FA
    Error: incorrect response length!
    
    2020-06-11 08:51:30 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: 34
    Error: incorrect response length!
    
    2020-06-11 08:51:40 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: 3D
    Error: incorrect response length!
    
    2020-06-11 08:51:50 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: 21B4203
    Error: incorrect response length!
    
    2020-06-11 08:52:00 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: 51B420E
    Error: incorrect response length!
    
    2020-06-11 08:52:10 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: B1A4245
    Error: incorrect response length!
    
    2020-06-11 08:52:20 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: E1A4218
    Error: incorrect response length!
    
    2020-06-11 08:52:30 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: 41364A1B4205
    Error: invalid checksum!
    
    2020-06-11 08:52:40 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: 4172F81A421B
    Error: invalid checksum!
    
    2020-06-11 08:52:50 Communication session with the Device 4 "IVTM-3", type: KpIvtm7M, address: 4
    Запрос текущих данных
    Send: $0004RR000008B4
    Receive: 141A25E1A4218
    Error: invalid checksum!
    
    2020-06-11 08:52:58 Close serial port /dev/ttyUSB0
    
    2020-06-11 08:52:58 Stop communication line 3 "USB>RS485"
    --------------------------------------------------------------------------------
    
    
    
    $0004RR000008B4
    !0004RRB55BB241A2EC1C4225
    $0004RR000008B4
    !0004RR0841B2415DCD1C4209
    $0004RR000008B4
    !0004RR293AB2419AA61C420C
    $0004RR000008B4
    !0004RR962CB241A2631C42FC
    $0004RR000008B4
    !0004RR851DB24104581C42EF
    $0004RR000008B4
    !0004RR8310B2413F5F1C42FC
    $0004RR000008B4
    !0004RR7F07B241044B1C42FA
    $0004RR000008B4
    !0004RRDA03B241AEFE1B4234
    $0004RR000008B4
    !0004RR5FFBB141D7DA1B423D
    $0004RR000008B4
    !0004RR37F6B141E6621B4203
    $0004RR000008B4
    !0004RR45F5B141CF251B420E
    $0004RR000008B4
    !0004RRADF2B141CDFB1A4245
    $0004RR000008B4
    !0004RR19F1B141A2FE1A4218
    $0004RR000008B4
    !0004RR4CF0B141364A1B4205
    $0004RR000008B4
    !0004RR97EFB14172F81A421B
    $0004RR000008B4
    !0004RR61EFB141A25E1A4218
    
    

    з.ы. вообще ощущение, что в Linux не успевает порт переключиться на прием как вариант. Что у вас за Raspberrry ? Что на ней крутится вообще ?

    Raspberry 4b, чистый образ Raspbian без gui, установлена только Scada.
    И такая ситуация проявляется как на аппаратном порту платы через MAX13487E, так и через USB преобразователь.

    В аппаратном обеспечении проблем не наблюдается, данные приходят:

    
    pi@raspberrypi:~ $ cat /dev/ttyUSB0
    !0004RRBEB9AF41F604154223
    
    #16412
    manjey73
    Участник

    хм, очень интересно…. подозреваю что драйвер портов Raspberry мешает как то.

    на Pi3 никогда не наблюдал подобного при работе через COM порты, чтобы не читал начало ответа.

    Проверьте, вы на Windows отключили опрос ? вообще попытки опроса к этим же портам есть ? а то я тут через Ethernet — RS485 забыл отключить опрос. Пока был дома, адрес был недоступен, а на работе завелось и у меня шли ошибки опроса по порту с Raspberry.

    В общем убедиться, что к этому же устройству нет попыток подключения.

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

    Размер кольцевого буфера принимаемых данных устанавливается файлом драйвера КП или вычисляется динамически?

    Для приёма текущих данных используется метод SerialPort.ReadLine, который использует свой встроенный буфер.

    Т.к. протокол Modbus использует бинарную кодировку, то этот метод в драйвере Modbus не используется.

    Похоже, что метод SerialPort.ReadLine работает некорректно в данном случае. Можем на следующей неделе провести эксперименты. Вы можете вместо ИВТМ подключить Moxa и с компьютера отправлять строки на Raspberry, чтобы более точно определить, что и как обрезается?

    Экспериментировать нужно на драйвере KpTest, он принимает любой входящий текст. Сделайте пробный проект и присылайте сюда логи.

    #16420
    qweqweqwe
    Участник

    Вы можете вместо ИВТМ подключить Moxa и с компьютера отправлять строки на Raspberry, чтобы более точно определить, что и как обрезается?

    Да, конечно могу. В понедельник продолжу.

    #16433
    qweqweqwe
    Участник

    Собрал драйвер, загрузил, работает. Какие дальнейшие действия?

    #16434
    qweqweqwe
    Участник

    На Raspberry

    
    --------------------------------------------------------------------------------
    2020-06-15 08:09:04 Initialize communication line 3 "USB>RS485"
    2020-06-15 08:09:04 Start communication line 3 "USB>RS485"
    
    2020-06-15 08:09:04 Open serial port /dev/ttyUSB0
    
    2020-06-15 08:09:04 Communication session with the Device 6 "TestKP", type: KpTest
    Send: test 0
    Write duration: 0.004
    Receive: no data
    Read duration: 1.003
    
    2020-06-15 08:09:11 Communication session with the Device 6 "TestKP", type: KpTest
    Send: test 0
    Write duration: 0.000
    Receive: no data
    Read duration: 1.009
    
    2020-06-15 08:09:17 Communication session with the Device 6 "TestKP", type: KpTest
    Send: test 0
    Write duration: 0.000
    Receive: no data
    Read duration: 1.001
    
    

    На Windows

    
    2020-06-15 10:10:07 Сеанс связи с КП 2 "TEST", тип: KpTest
    Отправка (7): test 0<0D>
    Write duration: 0.000
    Приём: test 0
    Read duration: 1.020
    
    2020-06-15 10:10:14 Сеанс связи с КП 2 "TEST", тип: KpTest
    Отправка (7): test 0<0D>
    Write duration: 0.000
    Приём: test 0
    Read duration: 1.017
    
    2020-06-15 10:10:20 Сеанс связи с КП 2 "TEST", тип: KpTest
    Отправка (7): test 0<0D>
    Write duration: 0.000
    Приём: test 0
    Read duration: 1.011
    
    2020-06-15 10:10:26 Сеанс связи с КП 2 "TEST", тип: KpTest
    Отправка (7): test 0<0D>
    Write duration: 0.000
    Приём: test 0
    Read duration: 1.025
    
    2020-06-15 10:10:33 Завершение работы линии связи 2 "MOXA>RS485"
    --------------------------------------------------------------------------------
    
    #16435
    qweqweqwe
    Участник

    Попробовали поставить костыль в SerialConnection.cs :

     string line;
                        /*try { line = SerialPort.ReadLine().Trim(); }
                        catch (TimeoutException) { line = ""; }*/
    
                        char[] char_line = new char[1024];
                        SerialPort.Read(char_line, 0, 1024);
                        line = char_line.ToString().Trim();
    

    Не помогло, в логах Timeout.

    #16436
    manjey73
    Участник

    я подозреваю, что в Raspberry порт занимается все таки чем-то. какой-то механизм системы именно для указанного Михаилом режима работы порта.

    #16437
    manjey73
    Участник

    pi@raspberrypi:~ $ cat /dev/ttyUSB0

    Когда вы даете команду cat и получаете чистый ответ из порта говорит о том, что какие-то механизмы в Linux для чтения порта запущены. Весь вопрос в том, какие ?

    У меня была похожая ситуация с чтением датчика 1Wire, я не смог добиться его чтения, пришлось в cron запихивать чтение в файл через cat и уже читать файл. Возможно тут похожая ситуация.

    #16439
    qweqweqwe
    Участник

    Когда вы даете команду cat и получаете чистый ответ из порта говорит о том, что какие-то механизмы в Linux для чтения порта запущены. Весь вопрос в том, какие ?

    С портом всё в порядке, это точно. Без вариантов. Обмен с датчиками по протоколу Modbus работает без нареканий. Проблема при обмене через текстовый протокол именно через RapidScada. При отправке команд и получении ответа через терминал ошибок нет.

    #16440
    manjey73
    Участник

    Have shell and kernel messages on the serial connection been disabled with the raspi-config tool to prevent the kernel from using the serial port? (sudo raspi-config, Advanced-Options, Serial, No)

    Похожая проблема у человека была на nodejs
    https://github.com/serialport/node-serialport/issues/715

    через cat работало а в nodejs нет

    Вам же Михаил написал, что в другом режиме работы порта проблем нет, и не только Modbus, но и на других протоколах.
    выключите поддержку порта как описано выше

    у меня Raspberry xbnftn Меркурий, Энергомеру и другое оборудование, но получается не через ReadLine

    • Этот ответ был изменен 3 года, 10 месяцев назад от manjey73.
    #16442
    qweqweqwe
    Участник

    выключите поддержку порта как описано выше

    Выключил при первоначальной настройке.

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