Стартовая страница › Форумы › Ошибки в работе › Modbus TCP: Некорректные данные MBAP Header!
- В этой теме 88 ответов, 9 участников, последнее обновление 9 месяцев, 3 недели назад сделано Mikhail.
-
АвторСообщения
-
09.10.2018 в 11:32 #10355baurУчастник
Похоже надо будет дорабатывать драйвер, чтобы он генерировал ID транзакции и проверял потом этот же ID на соответствие (хотя можно и без проверки, если ответ пришел)
похоже на это, потому что некоторые клиенты постоянно путают значение (берет данные с других адресов или как будто происходить смещение) хотя не возвращает ошибку
09.10.2018 в 18:19 #10356MikhailМодераторПо стандарту, который реализован в драйвере Rapid SCADA, нули допустимы. Однако производитель оборудования мог и не поддержать стандарт на 100%.
09.10.2018 в 18:23 #10357MikhailМодераторНо чтобы сделать окончательный вывод о причине, нужно провести тестирование более аккуратно:
1. С помощью утилиты типа Hercules отправить единичный корректный запрос, как это делает Коммуникатор. Записать и расшифровать ответ.
2. С помощью этой же утилиты отправить запрос с номерами пакетов. Записать и расшифровать ответ.
3. Выписать полученные логи рядом и сравнить.10.10.2018 в 10:14 #10359manjey73УчастникМихаил, а можете тыкнуть пальцем 🙂 в точку кода, где первый два байта для Modbus TCP в буфер записываются ?
Ведь просто можно рендомом два байта добавить вместо нулей и пересобрать KpModbus.dll
Вам так это вообще быстрее всего сделать. Если проверки не вводить на ответы.
Народ бы сразу и узнал, отвечает прибор или нет.10.10.2018 в 18:56 #10363MikhailМодератор11.10.2018 в 11:16 #10368manjey73УчастникУдалил проверку MBAP заголовка. случайное число здесь записывается один раз при перезапусках Коммуникатора.
Проверил на эмуляторе Modbus. Попробуйте с прибором что он скажет и логи сюда…з.ы. если прибор ответит, то лучше если KpModbus Михаил сам модернизирует… у меня не на все тямы хватает 🙂
11.10.2018 в 13:57 #10369baurУчастнико, чудо! все работает. Только адресация +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!
11.10.2018 в 14:30 #10373manjey73УчастникНеа, тут нужна помощь Михаила. У меня не получилось сделать, чтобы каждый новый запрос имел свой собственный ID, и не получилось чтобы была проверка что ответ по ID соответствовал запросу.
Сами по логу посмотрите, что первые два байта после каждого запуска Коммуникатора одинаковые.я не силен так в программировании, чтобы в чужом коде все правильно сделать.
Видимо ваше устройство требует наличия ID отличного от нуля. Это в общем тоже не противоречит протоколу. Просто такая реализация… и в ответ устройство повторяет ID, что он типа отвечает именно на тот запрос…
Ну и собственно библиотека то в составе RapidScada, так что более правильнее будет, если Михаил ее доработает и в следующем релизе или когда там получится по времени уже будет обновленная с возможностью генерировать и проверять ID запросов.
- Этот ответ был изменен 5 лет, 6 месяцев назад от manjey73.
11.10.2018 в 14:37 #10375manjey73Участникз.ы. так адресацию вы в настройках шаблона выставляете. Хотя я это, мог собрать более раннюю версию KpModbus.dll
Хотя нет, у меня осталась эта настройка с 0 или 1 адресация.- Этот ответ был изменен 5 лет, 6 месяцев назад от manjey73.
11.10.2018 в 21:49 #10379MikhailМодераторНапишите для меня резюме, каким образом устанавливать ID запросов? По кругу увеличивая на 1 или можно случайным образом или как-то ещё?
Я не против это добавить в драйвер, но пока не могу сказать когда, т.к. в конце года большая загрузка.
11.10.2018 в 22:02 #10383manjey73Участникя делал через Random. Насколько понимаю, там главное потом отловить что послан запрос с определенным ID и сопоставить его с ответом прибора, что он ответил на запрос с тем же ID.
Но у меня пока не получилось чтобы ID менялся при каждом запросе. я вообще пока не очень дружу с разными кусками кода в сборке. когда несколько cs и между ними надо взаимодействовать.12.10.2018 в 20:13 #10384MikhailМодераторВ принципе для начала можно и без проверки ID в ответе сделать. На ошибки связанные с перепутанными ответами жалоб не было.
18.10.2018 в 11:01 #10417baurУчастникможно ли переименовать этот файл и регистрировать как отдельный драйвер или будет конфликт с основным?
18.10.2018 в 12:12 #10418manjey73Участникbaur будет конфликт, для этого надо все имена классов или их часть переименовывать. По идее в таком варианте библиотека должна работать с любым устройством Modbus без проблем. Потом просто замените на новую, когда Михаил сделает релизный вариант.
17.09.2020 в 14:50 #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
С уважением Алексей
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.