Просмотр полной версии : Modbus.lib
Васильев
17.09.2023, 21:38
прошу помощи в решении вопроса
в проекте использую библиотеку modbus.lib тестирую на железе.
1. Когда все устройства подключены (опрос идёт последовательно с интервалом 250 мс), всё замечательно работает,
но стоит одно из устройств отключить (или адресовать не существующее устройство в сети в качестве тестирования)
как начинаются таймауты от других slave устройств.
2. Если адресовать устройство находящееся в сети с адресом 32 (по другому адресу -42 ) иногда приходят пакеты с кодом ошибки
от устройства с адресом 32.
где то читал - есть глюк библиотеки, что то правят. но не могу найти оригинал статьи.
Спасибо большое.
kondor3000
17.09.2023, 23:01
прошу помощи в решении вопроса
в проекте использую библиотеку modbus.lib тестирую на железе.
1. Когда все устройства подключены (опрос идёт последовательно с интервалом 250 мс), всё замечательно работает,
но стоит одно из устройств отключить (или адресовать не существующее устройство в сети в качестве тестирования)
как начинаются таймауты от других slave устройств.
2. Если адресовать устройство находящееся в сети с адресом 32 (по другому адресу -42 ) иногда приходят пакеты с кодом ошибки
от устройства с адресом 32.
где то читал - есть глюк библиотеки, что то правят. но не могу найти оригинал статьи.
Спасибо большое.
Во первых по Модбас можно сделать интервалы 100- 50 и даже 10 ms. В отличие от TCP всё будет работать.
Во вторых ошибки надо просто отсекать в коде. Это есть даже в примерах на сайте.
И ещё ради теста проверьте групповой опрос через конфигурацию, через String. Сильно удивитесь. https://owen.ru/forum/showthread.php?t=22915&page=40&p=244022&viewfull=1#post244022
200-300 переменных туда сюда за 50-70 ms легко и без ошибок.
Посмотрите тему Диспетчер модбас (https://owen.ru/forum/showthread.php?t=25112&highlight=%E4%E8%F1%EF%E5%F2%F7%E5%F0+%EC%EE%E4%E1 %E0%F1).
Работа с этой библиотекой становится гораздо удобней, и будут данные по статистике и работе с отключенными устройствами
Васильев
18.09.2023, 08:15
Благодарю, очень интересная статья. Требует детального изучения.
скорее всего буду переписывать проект под эту библиотеку.
Васильев
18.09.2023, 13:23
Друзья,
помогите разобраться с проектом - совсем запутался в трех соснах:)
не могу понять чём дело. в проекте всё убрал, оставил только работу с МВ110-8А и МВ110-6у
использую стандартную библиотеку ModBus.lib
при циклическом чтении всё отлично - данные передаются
при включении записи в МВ110-6у начинают ссыпаться ошибки
(то по таймауту, то ошибка в протоколе модбус код 3 - неверный параметр)
по индикации на МВ110-8А видно, что ему отправляется 2 пакета вместо одного
а пакет с ошибкой 03 получает МВ110-8А
точно глюк программы.. но не вижу где - глаза замылились
сейчас посмотрел на выходе прибора, данные выгружены как в буфере
значит в МВ110-8А отправляется ещё один пакет - ошибочный, но откуда он берётся?
Спасибо большое.
kondor3000
18.09.2023, 14:58
Друзья,
помогите разобраться с проектом - совсем запутался в трех соснах:)
не могу понять чём дело. в проекте всё убрал, оставил только работу с МВ110-8А и МВ110-6у
использую стандартную библиотеку ModBus.lib
Спасибо большое.
Эту программу можно выкинуть, взять пример на сайте Модбас чтение и Модбас запись на ST, чуть подправить адреса и регистры и всё будет работать.
Примеры / Примеры сетевого обмена
5 Обмен через библиотеки Modbus и OwenNet https://owen.ru/product/codesys_v2/example_program
Всё можно поместить в одну, разделив по шагам или максимум в 2 программы.
ЗЫ Вот реально на 2-3 String это всё бы работало через конфиг. Вот мой пример чтения всех 48 регистров МВ110-8А через String
https://owen.ru/forum/showthread.php?t=35094#10
Друзья,
помогите разобраться с проектом - совсем запутался в трех соснах:)
не могу понять чём дело. в проекте всё убрал, оставил только работу с МВ110-8А и МВ110-6у
использую стандартную библиотеку ModBus.lib
при циклическом чтении всё отлично - данные передаются
при включении записи в МВ110-6у начинают ссыпаться ошибки
(то по таймауту, то ошибка в протоколе модбус код 3 - неверный параметр)
по индикации на МВ110-8А видно, что ему отправляется 2 пакета вместо одного
а пакет с ошибкой 03 получает МВ110-8А
точно глюк программы.. но не вижу где - глаза замылились
сейчас посмотрел на выходе прибора, данные выгружены как в буфере
значит в МВ110-8А отправляется ещё один пакет - ошибочный, но откуда он берётся?
Спасибо большое.
Вы реально усложняете себе жизнь. Голый Modbus.lib можно использовать когда 1-2 устройства и это нужно единственный и неповторимый раз.
Потратьте несколько дней на разбор работы с Диспетчером и ваш код обмена по модбас сократится до десятка строк, нескольких типовых файлов с типами и функциями для используемых устройств и с возможностью их комбинации в любых сочетаниях
Васильев
18.09.2023, 16:17
непременно изучу, но
любой инженер может сломать работающее и починить неисправное
хочу разобраться и понять что и как, чтобы в дальнейшем не задавать глупых вопросов...
почему не работает
в проекте несколько разных устройств и обмениваться через регистры не удобно
(4 МВ110-8А, 2 МВ110-6у, 4 частотника VF51) вот поэтому был выбран вариант обмена через modbus.lib
kondor3000
18.09.2023, 16:41
непременно изучу, но
любой инженер может сломать работающее и починить неисправное
хочу разобраться и понять что и как, чтобы в дальнейшем не задавать глупых вопросов...
почему не работает
в проекте несколько разных устройств и обмениваться через регистры не удобно
(4 МВ110-8А, 2 МВ110-6у, 4 частотника VF51) вот поэтому был выбран вариант обмена через modbus.lib
Вот на 5-7 страницах обсуждение чтения 7 модулей 8АС ( можно уменьшить или увеличить) с примерами и проектами https://owen.ru/forum/showthread.php?t=10555&page=987
А так же вывод всех переменных массивом структур на панель
непременно изучу, но
любой инженер может сломать работающее и починить неисправное
хочу разобраться и понять что и как, чтобы в дальнейшем не задавать глупых вопросов...
почему не работает
в проекте несколько разных устройств и обмениваться через регистры не удобно
(4 МВ110-8А, 2 МВ110-6у, 4 частотника VF51) вот поэтому был выбран вариант обмена через modbus.lib
Так там тоже обмен идёт через блоки библиотеки modbus.lib. Единственное отличие - механизм вызова блоков организуется не в самой программе, а в коде диспетчера. А в функциях для устройств используются те-же блоки из modbus.lib, что и у вас сейчас
Васильев
18.09.2023, 16:53
блоки одни и те же - тогда мне совсем непонятно почему не работает???
может быть буфер передачи и приема разделены?
или стоит закрывать порт после успешного обмена, но...
ведь пока не записываю в МВ110-6У все прекрасно работает!
с таймаутами игрался не влияет, хоть секундную задержку ставить
Все правильно здесь?
70269
Васильев
18.09.2023, 20:01
да всё верно
complete - обмен завершился (посылка принята или таймаут)
exception результат ответ обмена ( 0 все хорошо, иначе ошибка ff таймаут, CRC, нет то адресат, или 1,2,3,4 согласно протоколу modbus)
я как раз получаю ответ 3 - не верный параметр (проверил буфера - всё верно) не знаю в каком направлении копать.
сейчас хочу разделить буфер передачи и приёма и еще закрывать порт после передачи.
kondor3000
18.09.2023, 21:52
да всё верно
complete - обмен завершился (посылка принята или таймаут)
exception результат ответ обмена ( 0 все хорошо, иначе ошибка ff таймаут, CRC, нет то адресат, или 1,2,3,4 согласно протоколу modbus)
я как раз получаю ответ 3 - не верный параметр (проверил буфера - всё верно) не знаю в каком направлении копать.
сейчас хочу разделить буфер передачи и приёма и еще закрывать порт после передачи.
Не надо закрывать ничего, вот пример на 1 шт. 8А (адр. 32) и 1 шт. 6У (адрес 1). ПЛК можно заменить на любой другой
Васильев
18.09.2023, 22:41
так у меня же весь алгоритм как ваш
заполняю буфер, разрешаю работу, анализирую результат
изначально когда идет чтение МВ110-8А, МВ110-6у нет ни одной ошибки,
всё четко получаю данные температуры и читаю выгруженные данные в МВ110-6у
проблема вот в чем..
когда в алгоритм включаю запись в МВ110-6у начинаю идти пакеты с кодом ошибки 3 - неверный данные
kondor3000
18.09.2023, 23:06
так у меня же весь алгоритм как ваш
заполняю буфер, разрешаю работу, анализирую результат
изначально когда идет чтение МВ110-8А, МВ110-6у нет ни одной ошибки,
всё четко получаю данные температуры и читаю выгруженные данные в МВ110-6у
проблема вот в чем..
когда в алгоритм включаю запись в МВ110-6у начинаю идти пакеты с кодом ошибки 3 - неверный данные
Попробуйте буфер очистить перед записью. Или просто мой пример загрузите и посмотрите. Только адреса измените.
.. в МВ110-6у начинаю идти пакеты с кодом ошибки 3 - неверный данные
вышли за 0..1000 или не привели к сетевому порядку байт.
257 отправьте во все выходы для проверки
Васильев
18.09.2023, 23:30
посмотрите пожалуйста логи
с 2 это когда запись в МВ110-6у включена - появляются лишние пакеты отмечены красным
Васильев
18.09.2023, 23:35
получается команда 3 работает чтение регистров,
а при выполнении команды 16 возникают непонятки..а именно
есть ответ, что записано хорошо
потом еще два пакета, последний с кодом ошибки 3
помогите пожалуйста разобраться
Шняга а не логи
Просто список байт туда/сюда как есть приведите
И все в какой то одной системе. А не то dec, то вроде bin
Чего там разбираться? Отправляете какашки. Об этом девайс и сообщает
Васильев
19.09.2023, 00:13
в какой программе ввести лог?
вроде все понятно...
вот еще видео по шагам
получается после записи командой 16. последующая команда 3 не выполняется..
Васильев
19.09.2023, 00:15
видео по шагам
да всё верно
complete - обмен завершился (посылка принята или таймаут)
exception результат ответ обмена ( 0 все хорошо, иначе ошибка ff таймаут, CRC, нет то адресат, или 1,2,3,4 согласно протоколу modbus)
я как раз получаю ответ 3 - не верный параметр (проверил буфера - всё верно) не знаю в каком направлении копать.
сейчас хочу разделить буфер передачи и приёма и еще закрывать порт после передачи.
Нет, я в том смысле, что вызываете RS2_WriteRegs, а анализируете состояние RS2_ReadRegs
Васильев
19.09.2023, 05:32
Благодарю!!! Это была ошибкой!
Ещё ошибкой было (выяснил ближе к 4:15) это адресация по шине!
У меня были выставлены адреса для МВ110-8А 31, для Мв110-6у -32!
По даташиту каждое устройство МВ110-8А занимает в адресном пространстве 8 адресов (не зависимо на какой протокол настроено)
и каждое устройство МВ110-6У занимает 6 адресов от базового. Информация всё равно неявно указано, что это справедливо для ModBus.
Сказано точно для протокола ОВЕН и DCOM устройства занимают по 8 и 6 адресов соответственно.
Вот тут тоже был косяк. Исправил думал всё заработает, а нет ошибка была еще и в программе. Спасибо большое!
на это на все потратил ровно три дня.. ёпрст
как говорил один командир: - учи матчасть сынок ..
Благодарю!!! Это была ошибкой!
Ещё ошибкой было (выяснил ближе к 4:15) это адресация по шине!
У меня были выставлены адреса для МВ110-8А 31, для Мв110-6у -32!
По даташиту каждое устройство МВ110-8А занимает в адресном пространстве 8 адресов (не зависимо на какой протокол настроено)
и каждое устройство МВ110-6У занимает 6 адресов от базового. Информация всё равно неявно указано, что это справедливо для ModBus.
Сказано точно для протокола ОВЕН и DCOM устройства занимают по 8 и 6 адресов соответственно.
Вот тут тоже был косяк. Исправил думал всё заработает, а нет ошибка была еще и в программе. Спасибо большое!
на это на все потратил ровно три дня.. ёпрст
как говорил один командир: - учи матчасть сынок ..
Нет, для протокола modbus эти ограничения адресации не применяются
Васильев
19.09.2023, 06:08
конфигуратор Mx110.exe подключается по 8 и 6 адресам от базового соответственно
вот это меня на толкнуло на мысль, что подключается по диапазону адресов...
сейчас в программе поменял адрес на +1 и нет связи. Бррр...
главное выявили проблему и внесли ясность. Еще раз огромное спасибо!
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot