Стартовая страница › Форумы › Взаимодействие с устройствами › Modbus › ModBus Опрос по команде
- В этой теме 16 ответов, 5 участников, последнее обновление 4 недели назад сделано Mikhail.
-
АвторСообщения
-
13.09.2024 в 12:11 #34647DaniilOpushnevУчастник
Здравствуйте! Из вводных: Есть устройство измерения температуры/влажности эксис ИВТМ 7 М 3-Е. Скадой подключаюсь к нему по modbus TCP, все хорошо, опрос постоянный есть. Данные от датчика приходят с точностью до десятитысячных, которые постоянно колеблются, провоцируя постоянные вылеты за граничные значения. Установка разрядности D.D во входных каналах не помогает. Данные фиксировать необходимо раз в час, но период опроса более 5 секунд выставить нельзя, в виду особенности датчика.
К сути: Хочу решить проблему с помощью функции «Опрос только по команде», чтобы скада инициализировала связь раз в час. А команда будет отправляться автоматически с помощью модуля AutoControl. Из документации прибора чтение данных осуществляется функцией 0х04. Я плохо знаю протокол modbus, поэтому есть трудности с настройкой. В шаблоне устройства я создал команду, настройки сделал интуитивные:<?xml version="1.0" encoding="utf-8"?> <DeviceTemplate> <Options> <ZeroAddr>false</ZeroAddr> <DecAddr>true</DecAddr> <DefByteOrder2 /> <DefByteOrder4 /> <DefByteOrder8 /> </Options> <ElemGroups> <ElemGroup active="true" dataBlock="InputRegisters" address="0" name="My group"> <Elem type="float" byteOrder="2301" isBitMask="false" tagCode="C" name="Temp C" /> <Elem type="float" byteOrder="2301" isBitMask="false" tagCode="%" name="hum %" /> <Elem type="float" byteOrder="2301" isBitMask="false" tagCode="-" name="Per (not used" /> <Elem type="ushort" isBitMask="false" tagCode="!" name="Service massage" /> </ElemGroup> </ElemGroups> <Cmds> <Cmd dataBlock="Custom" funcCode="4" cmdNum="0" cmdCode="04" name="Опрос" /> </Cmds> </DeviceTemplate>
Привязал команду к выходному каналу ТУ, а его связал с модулем AutoControl. Схема работает, то когда скада сама пытается отправить команду в логе приходят ошибки, но после сеанса связи устройство само посылает пакет данных. Очевидно, что первые ошибки связаны с тем, что отправляется неправильный запрос. Перепробовал уже много настроек результат одинаковый.
Подскажите, пожалуйста, как правильно реализовать мой замысел, где и какие настройки я упустил?Кстати, если в приложении Администратор вручную опросить устройство кнопкой «Опросить», то ошибок нет, сразу приходит нужный пакет данных.
P.S. отдельный драйвер для датчиков ИВТМ у меня не заработал, ругался на отсутствующий файл.. да и как я понял из описания он только для чтения архивных данных из устройства.
13.09.2024 в 12:28 #34648a80808УчастникПроще привязать к каналу с формулой EveryHour() без МАУ
13.09.2024 в 12:29 #34649MikhailМодераторДобрый день!
Отдельный драйвер читает и текущие и архивные данные из ИВТМ по нестандартному протоколу производителя. Вероятно, они добавили поддержку Modbus, раньше мне не попадалась информацию об этом.13.09.2024 в 12:30 #34650MikhailМодераторКоманда Modbus предназначена для записи значения в прибор. Вам она не нужна, а нужен именно опрос. Настройте опрос прибора и пришлите скриншоты настроек, чтобы было понятнее. Если всё будет работать при отправке команды на опрос из Администратора, то следующим шагом будет отправить такую же команду на опрос из модуля автоматического управления.
13.09.2024 в 12:32 #3465113.09.2024 в 12:43 #34661a80808УчастникУ меня ИВТМ-7 2018 года уже с поддержкой ModBus RTU, потому как там только RS-485. Вроде в новых версиях у них появился Ethernet порт и ModBus TCP.
13.09.2024 в 13:50 #34670DaniilOpushnevУчастникНастроил через команду App.Comm.PollDevice. Настройки следующие:
Первый опрос в нужное время проходит успешно, но следующий с ошибкой:
Но эта ошибка, скорее всего, связана с самим устройством. Понаблюдаю еще как будет проходить опрос с часовым интервалом.
13.09.2024 в 13:51 #34671DaniilOpushnevУчастникКартинки не заработали почему то, вставлю просто ссылками:
Настройка канала: https://disk.yandex.ru/i/rTdNAjUn4vPZhg
Настройка модуля контроля: https://disk.yandex.ru/i/KKlBijY7w1FPWQ
Лог линии: https://disk.yandex.ru/i/xNB7M9sqavieYg
13.09.2024 в 14:18 #34676manjey73УчастникСнимите галку «Оставаться на связи» если стоит. И какой результат будет?
а почему в Код команды не прописать App.Comm.PollDivice ?
- Этот ответ был изменен 1 месяц назад от manjey73.
13.09.2024 в 14:45 #34678DaniilOpushnevУчастникГалку «Оставаться на связи» снял, все в норму пришло. Все работает как надо.
Всем спасибо!А на 5ю версию есть подобная команда?
13.09.2024 в 14:45 #34680JurasskParkУчастникА почему в свойствах коммуникатора у линии и девайса не выставить периодичность 1 раз в час? )
13.09.2024 в 14:50 #34684manjey73Участник@DaniilOpushnev на 5-ю нет. там надо спецфайлики в папку Cmd запихивать, еще и правильно их сформировать, может и получится.
Так все же вопрос, почему команда в виде строки, а не сразу в Код команды ?
Указать номер устройства и в Число передать кажется тоже номер устройства
13.09.2024 в 15:18 #34685DaniilOpushnevУчастникВ код команды тоже работает, спасибо!
И просто выставить период тоже работает, все проще чем казалось..) Спасибо! С периодичностью и на 5й версии заработает.13.09.2024 в 16:07 #34689a80808УчастникНо с задержкой может оказаться не привязанной к началу часа….
13.09.2024 в 18:05 #34694DaniilOpushnevУчастникДа я тоже об этом подумал, поэтому поставил период в 10 минут, это хотя бы позволит избавиться от «дребезга» значений. А так в 5й версии в модуле автоуправление есть функция опрос КП, буду тестировать ее в понедельник.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.