Modbus TCP: Некорректные данные MBAP Header!

Стартовая страница Форумы Ошибки в работе Modbus TCP: Некорректные данные MBAP Header!

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

    Похоже надо будет дорабатывать драйвер, чтобы он генерировал ID транзакции и проверял потом этот же ID на соответствие (хотя можно и без проверки, если ответ пришел)

    похоже на это, потому что некоторые клиенты постоянно путают значение (берет данные с других адресов или как будто происходить смещение) хотя не возвращает ошибку

    #10356
    MikhailMikhail
    Модератор

    По стандарту, который реализован в драйвере Rapid SCADA, нули допустимы. Однако производитель оборудования мог и не поддержать стандарт на 100%.

    #10357
    MikhailMikhail
    Модератор

    Но чтобы сделать окончательный вывод о причине, нужно провести тестирование более аккуратно:
    1. С помощью утилиты типа Hercules отправить единичный корректный запрос, как это делает Коммуникатор. Записать и расшифровать ответ.
    2. С помощью этой же утилиты отправить запрос с номерами пакетов. Записать и расшифровать ответ.
    3. Выписать полученные логи рядом и сравнить.

    #10359
    Аватарmanjey73
    Участник

    Михаил, а можете тыкнуть пальцем 🙂 в точку кода, где первый два байта для Modbus TCP в буфер записываются ?
    Ведь просто можно рендомом два байта добавить вместо нулей и пересобрать KpModbus.dll
    Вам так это вообще быстрее всего сделать. Если проверки не вводить на ответы.
    Народ бы сразу и узнал, отвечает прибор или нет.

    #10363
    MikhailMikhail
    Модератор
    #10368
    Аватарmanjey73
    Участник

    Тестовый KpMobdus

    Удалил проверку MBAP заголовка. случайное число здесь записывается один раз при перезапусках Коммуникатора.
    Проверил на эмуляторе Modbus. Попробуйте с прибором что он скажет и логи сюда…

    з.ы. если прибор ответит, то лучше если KpModbus Михаил сам модернизирует… у меня не на все тямы хватает 🙂

    #10369
    baurbaur
    Участник

    о, чудо! все работает. Только адресация +1
    Спасибо!

    Библиотеку можно в продакшн сервер?

    2018-10-11 16:53:14 Сеанс связи с КП 11 "ADAM-6015 Серверная", тип: KpModbus, адрес: 1, позывной: 10.28.хх.хх
    Запрос значений группы элементов "Temperature"
    Отправка (12): 81 05 00 00 00 06 01 03 07 54 00 02
    Приём (7/7): 81 05 00 00 00 07 01
    Приём (6/6): 03 04 47 81 A5 2F
    OK!
    Запрос значений группы элементов "jknjk"
    Отправка (12): 81 05 00 00 00 06 01 03 07 50 00 02
    Приём (7/7): 81 05 00 00 00 07 01
    Приём (6/6): 03 04 4E EF 16 03
    OK!
    
    2018-10-11 16:53:14 Сеанс связи с КП 11 "ADAM-6015 Серверная", тип: KpModbus, адрес: 1, позывной: 10.28.хх.хх
    Запрос значений группы элементов "Temperature"
    Отправка (12): 81 05 00 00 00 06 01 03 07 54 00 02
    Приём (7/7): 81 05 00 00 00 07 01
    Приём (6/6): 03 04 47 81 A6 CE
    OK!
    Запрос значений группы элементов "jknjk"
    Отправка (12): 81 05 00 00 00 06 01 03 07 50 00 02
    Приём (7/7): 81 05 00 00 00 07 01
    Приём (6/6): 03 04 4E EF 16 03
    OK!
    #10373
    Аватарmanjey73
    Участник

    Неа, тут нужна помощь Михаила. У меня не получилось сделать, чтобы каждый новый запрос имел свой собственный ID, и не получилось чтобы была проверка что ответ по ID соответствовал запросу.
    Сами по логу посмотрите, что первые два байта после каждого запуска Коммуникатора одинаковые.

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

    Видимо ваше устройство требует наличия ID отличного от нуля. Это в общем тоже не противоречит протоколу. Просто такая реализация… и в ответ устройство повторяет ID, что он типа отвечает именно на тот запрос…

    Ну и собственно библиотека то в составе RapidScada, так что более правильнее будет, если Михаил ее доработает и в следующем релизе или когда там получится по времени уже будет обновленная с возможностью генерировать и проверять ID запросов.

    • Этот ответ был изменен 2 года, 8 месяцев назад от Аватарmanjey73.
    #10375
    Аватарmanjey73
    Участник

    з.ы. так адресацию вы в настройках шаблона выставляете. Хотя я это, мог собрать более раннюю версию KpModbus.dll
    Хотя нет, у меня осталась эта настройка с 0 или 1 адресация.

    • Этот ответ был изменен 2 года, 8 месяцев назад от Аватарmanjey73.
    #10379
    MikhailMikhail
    Модератор

    Напишите для меня резюме, каким образом устанавливать ID запросов? По кругу увеличивая на 1 или можно случайным образом или как-то ещё?

    Я не против это добавить в драйвер, но пока не могу сказать когда, т.к. в конце года большая загрузка.

    #10383
    Аватарmanjey73
    Участник

    я делал через Random. Насколько понимаю, там главное потом отловить что послан запрос с определенным ID и сопоставить его с ответом прибора, что он ответил на запрос с тем же ID.
    Но у меня пока не получилось чтобы ID менялся при каждом запросе. я вообще пока не очень дружу с разными кусками кода в сборке. когда несколько cs и между ними надо взаимодействовать.

    #10384
    MikhailMikhail
    Модератор

    В принципе для начала можно и без проверки ID в ответе сделать. На ошибки связанные с перепутанными ответами жалоб не было.

    #10417
    baurbaur
    Участник

    можно ли переименовать этот файл и регистрировать как отдельный драйвер или будет конфликт с основным?

    #10418
    Аватарmanjey73
    Участник

    baur будет конфликт, для этого надо все имена классов или их часть переименовывать. По идее в таком варианте библиотека должна работать с любым устройством Modbus без проблем. Потом просто замените на новую, когда Михаил сделает релизный вариант.

    #17237
    АлексейАлексей
    Участник

    Доброго времени суток дорогие формучане. Дабы не плодить темы по ошибке «Некорректные данные MBAP Header!» я решил написать свою проблему сюда.

    Имеются 2 КП. При работе одного КП (Насос №3) все хорошо, ответ приходит и так далее. Вот лог линии связи :

    2020-09-17 16:35:56 Установка TCP-соединения с 192.168.0.228:502
    
    2020-09-17 16:35:05 Сеанс связи с КП 4 "Насос №3", тип: KpModbus, адрес: 12
    Запрос значений группы элементов "Чтение"
    Отправка (12): 03 02 00 00 00 06 0C 03 00 66 00 01
    Приём (7/7): 03 02 00 00 00 05 0C
    Приём (4/4): 03 02 00 00
    OK!
    Запрос значений группы элементов "Чтение 2"
    Отправка (12): 03 03 00 00 00 06 0C 03 00 D3 00 03
    Приём (7/7): 03 03 00 00 00 09 0C
    Приём (8/8): 03 06 00 37 00 E7 02 EF
    OK!
    Запрос значений группы элементов "Чтение 3"
    Отправка (12): 03 04 00 00 00 06 0C 03 00 D7 00 02
    Приём (7/7): 03 04 00 00 00 07 0C
    Приём (6/6): 03 04 0F A5 00 EE
    OK!
    Запрос значений группы элементов "Чтение 4"
    Отправка (12): 03 05 00 00 00 06 0C 03 00 DB 00 03
    Приём (7/7): 03 05 00 00 00 09 0C
    Приём (8/8): 03 06 00 14 00 A9 00 49
    OK!

    Как только я добавляю второй КП (Насос №4), но его физически еще не подключив у меня соответственно валиться ошибка связи — это нормально . Вот продолжение лога все той же линии связи :

    2020-09-17 16:35:57 Сеанс связи с КП 6 "Насос №4", тип: KpModbus, адрес: 24
    Запрос значений группы элементов "Чтение"
    Отправка (12): 02 C5 00 00 00 06 18 03 00 66 00 01
    Приём (0/7): 
    Ошибка связи!
    Запрос значений группы элементов "Чтение"
    Отправка (12): 02 C6 00 00 00 06 18 03 00 66 00 01
    Приём (7/7): 02 C6 00 00 00 03 18
    Приём (2/2): 83 0A
    Ошибка устройства: [0A] GATEWAY PATH UNAVAILABLE!
    Запрос значений группы элементов "Чтение"
    Отправка (12): 02 C7 00 00 00 06 18 03 00 66 00 01
    Приём (0/7): 
    Ошибка связи!
    
    2020-09-17 16:36:01 Отключение от 192.168.0.228

    Но беда в другом ! Почему то показания первого КП (Насос №3) начинают давать сбой, а именно все в той же линии связи пишет следующее :

    2020-09-17 16:36:02 Установка TCP-соединения с 192.168.0.228:502
    
    2020-09-17 16:36:02 Сеанс связи с КП 4 "Насос №3", тип: KpModbus, адрес: 12
    Запрос значений группы элементов "Чтение"
    Отправка (12): 03 26 00 00 00 06 0C 03 00 66 00 01
    Приём (7/7): 03 26 00 00 00 03 18
    Некорректные данные MBAP Header!
    Запрос значений группы элементов "Чтение"
    Отправка (12): 03 27 00 00 00 06 0C 03 00 66 00 01
    Приём (7/7): 83 0A 03 27 00 00 00
    Некорректные данные MBAP Header!
    Запрос значений группы элементов "Чтение"
    Отправка (12): 03 28 00 00 00 06 0C 03 00 66 00 01
    Приём (7/7): 05 0C 03 02 00 00 03
    Некорректные данные MBAP Header!
    
    2020-09-17 16:36:04 Отключение от 192.168.0.228

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

    То есть получается что если в одной линии RS-485 будет подключено допустим 5 КП и одно из этих устройств будет отключено, то у меня будут вставать показания остальных 4 . Самое интересное, что если 2 КП подключены — то и показания все хорошо опрашиваются. Стоит только одно из них отключить, начинается свистопляска.

    Использую RTU устройства через ШЛЮЗ. Помогите пожалуйста решить проблему. Все выше советы я перепробовал. Пробовал заменить тестовый файл в данной теме выше KpModbus.dll — не работает. Использую версию SCADA 5.8.0

    С уважением Алексей

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