Тема / Topic: Modbus RTU суммарный расход в четырех регистрах
Дмитрий А
Junior Member / Новичок
Участник № / Member № 9731
отправлено / posted
Приветствую! Нужно забрать с расходомера суммарный расход, который содержится в 4 регистрах, у двоих человек за весь день перебора разных настроек не получается это сделать, максимум что получилось число из 2 регистров, но нам надо 4. Пробовали все перестановки (308, 309), меняли прототипы и типы (246, 377, 378) - ничего не помогает, есть некие числа вообще не похожие на то что в устройстве, тестировали через виртуальное устройство ПО Modbus Slave, порт настроен верно, регистры отдельно получаем, значение из 4 регистров - НЕТ! Нам нужно описание как настроить, или хотя бы какие параметры точно нужны, а какие лишние, примеры связи и т.п. Идет ПНР, время важно! Надеемся что тех. поддержка проявит свою квалификацию и клиентоориентированность.
Сообщения / Posts 15 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
отправлено / posted
- 4 регистра это double float - Call.chgr у которого аргументы double и Длина по аргументам [311]=1, связанный с источником
Сообщения / Posts 873 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Здравствуйте! Нужно забрать с расходомера суммарный расход, который содержится в 4 регистрах... Нам нужно описание как настроить
Релиз 7.1.0.3. Во встроенной Справочной Системе в описании настройки подключения ModBus-устройства все описано.
Справка вызывается по нажатию F1. При том, если открыт некоторый раздел, то Справка открывается на описании данного раздела. Например, Вы и Ваши два коллеги открываете в Среде Разработки Источники - Протоколы Net/RS - uModbus на редактирование и нажимаете F1.
Или из Оглавления Справочная Система - Источники/Приемники - Группа "Протоколы Net/RS" - Обмен по MODBUS
К каналу Call с типом вызова ChGroupReq и аргументами с типом данных "lreal". Так же в настройках (редактирование) источника Источники - Протоколы Net/RS - uModbus - Modbus_* установить флажок "Длина по аргументам (311)"
Длина по аргументам [311] – если этот флаг установлен, то при привязке такого источника-приемника MODBUS к каналу CALL.ChGroupReq количество запрашиваемых байт (N) равно сумме длин всех аргументов (в байтах), исключая аргументы BOOL и STRING. Число запрашиваемых регистров – это N, округленное до ближайшего большего четного числа и деленное пополам;
Только в такой конфигурации возможна работа со значениями DOUBLE (64 бита, LREAL) (по 8 байт в аргумент).
Дмитрий А
Junior Member / Новичок
Участник № / Member № 9731
отправлено / posted
Запутанно все как-то. у меня сделано так, напишите где ошибка: В источнике 305 = R2InReq(4) т.к. используются Input регистры 246 = ANALOG-64 311 - включено 377 = lreal 378 = 1
Канал Call 86 = привязал из источника 123, 261 = ChGroupReq(8) аргумент lreal - а что привязывать ???
Сообщения / Posts 15 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
отправлено / posted
- убедиться что в аргументе( не привязанным ни к чему ) правильное значение - потом делаем канал(F64) и к нему привязываем аргумент или к аргументу привязываем канала(атрибут 2 IN)
Сообщения / Posts 873 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
В источнике 305 = R2InReq(4) т.к. используются Input регистры Номер функции выбирается с учетом карты сигналов устройства. Если в описании к Расходомеру указано, что данный регистр можно читать 4-ой функцией, то верно. 246 = ANALOG-64 Можно так оставить, но можно выставить CHGR 311 - включено Верно. 377 = lreal Если в 246 не CHGR, то не трогать. 378 = 1 Если в 246 не CHGR, то не трогать.
Канал Call 86 = привязал из источника Верно 123, 261 = ChGroupReq(8) 123 = ChGroupReq Верно. аргумент lreal - а что привязывать ??? Nico предлагает правильное решение - сначала убедиться что Вы получаете то что надо и в правильном виде (может придется заниматься поворотом байт). А уже после либо расширять количество аргументов в Call.ChGroupReq (если таких параметров несколько и они последовательны) или привязываться к аргументам канала Call.ChGroupReq со стороны других каналов, куда необходимо передать данные.
После создания источника, привязки его к каналу Call с аргументом, можно сохранить проект, скомпилировать и запустить. Далее откройте Панель МРВ, в левом окне найдите Ваш канал Call.ChGroupReq, выделите его, в правом окне найдите 124 атрибут и дважды кликните (он раскроется) и проверьте значение в аргументе. Оно должно совпадать с числом в расходомере.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Дмитрий А
Junior Member / Новичок
Участник № / Member № 9731
отправлено / posted
Мне кажется какая-то стена непонимания. Отдельные регистры получаю замечательно, все все совпадает, но как слепить , сцепить, связать это чтобы получилось ОДНО число ну никак не пойму! В устройстве 1 рег = 776, 2 рег = 0, 3 рег = 0, 4 рег = 16422, вместе эти числа на устройстве образуют ОДНО число = 11 (это суммарный расход), любыми программами работы с модбас я легко получаю это число 11, указав что число состоит из 4 регистров. КАК это сделать в TraceMode 7 так и не понял. Запускаю runtime вижу там и числа по отдельности и у канала Call в атрибуте 124, все верно, но получить ОДНО число из 4-х как?
Сообщения / Posts 15 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Мне кажется какая-то стена непонимания. Если Вы все сделали строго рекомендациям, то получили бы результат.
Запускаю runtime вижу там и числа по отдельности и у канала Call в атрибуте 124, все верно, но получить ОДНО число из 4-х как? Если Вы сделали у канала CAll.ChGroupReq аргумент типа lreal, то в реальном времени, если раскрыть 124 атрибут, будет Ваше число 11.
Если там не 11, то необходимо повернуть порядок чтения байт. Это настраивается в настройках подключения к устройству uModbus.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Дмитрий А
Junior Member / Новичок
Участник № / Member № 9731
отправлено / posted
Может есть у кого маленький пример в виде проекта как получить 64-битное число?, а то если по одному параметру в день через форум разбирать так я и до нового года не сделаю
Сообщения / Posts 15 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Дмитрий А
Junior Member / Новичок
Участник № / Member № 9731
отправлено / posted
У CAll.ChGroupReq должен быть один атрибут типа lreal и больше никаких атрибутов, так? атрибут этот надо привязывать к чему либо?
Сообщения / Posts 15 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Дмитрий А
Junior Member / Новичок
Участник № / Member № 9731
отправлено / posted
У CAll.ChGroupReq должен быть один атрибут типа lreal и больше никаких атрибутов, так? Если необходимо считать один параметр, то один аргумент, если несколько, то столько сколько необходимо. Привязка источника ModBus к каналу Call описана в Справочной Системе.