ModBus Опрос по команде

Помечено: , ,

Просмотр 15 сообщений - с 1 по 15 (из 17 всего)
  • Автор
    Сообщения
  • #34647
    DaniilOpushnev
    Участник

    Здравствуйте! Из вводных: Есть устройство измерения температуры/влажности эксис ИВТМ 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. отдельный драйвер для датчиков ИВТМ у меня не заработал, ругался на отсутствующий файл.. да и как я понял из описания он только для чтения архивных данных из устройства.

    #34648
    a80808
    Участник

    Проще привязать к каналу с формулой EveryHour() без МАУ

    #34649
    Mikhail
    Модератор

    Добрый день!
    Отдельный драйвер читает и текущие и архивные данные из ИВТМ по нестандартному протоколу производителя. Вероятно, они добавили поддержку Modbus, раньше мне не попадалась информацию об этом.

    #34650
    Mikhail
    Модератор

    Команда Modbus предназначена для записи значения в прибор. Вам она не нужна, а нужен именно опрос. Настройте опрос прибора и пришлите скриншоты настроек, чтобы было понятнее. Если всё будет работать при отправке команды на опрос из Администратора, то следующим шагом будет отправить такую же команду на опрос из модуля автоматического управления.

    #34651
    Mikhail
    Модератор

    Вот тема опроса по команде.

    #34661
    a80808
    Участник

    У меня ИВТМ-7 2018 года уже с поддержкой ModBus RTU, потому как там только RS-485. Вроде в новых версиях у них появился Ethernet порт и ModBus TCP.

    #34670
    DaniilOpushnev
    Участник

    Настроил через команду App.Comm.PollDevice. Настройки следующие:
    Настройка канала ТУНастройка AutoControl
    Первый опрос в нужное время проходит успешно, но следующий с ошибкой:
    Лог линии

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

    #34671
    DaniilOpushnev
    Участник

    Картинки не заработали почему то, вставлю просто ссылками:

    Настройка канала: https://disk.yandex.ru/i/rTdNAjUn4vPZhg

    Настройка модуля контроля: https://disk.yandex.ru/i/KKlBijY7w1FPWQ

    Лог линии: https://disk.yandex.ru/i/xNB7M9sqavieYg

    #34676
    manjey73
    Участник

    Снимите галку «Оставаться на связи» если стоит. И какой результат будет?

    а почему в Код команды не прописать App.Comm.PollDivice ?

    • Этот ответ был изменен 1 месяц назад от manjey73.
    #34678
    DaniilOpushnev
    Участник

    Галку «Оставаться на связи» снял, все в норму пришло. Все работает как надо.
    Всем спасибо!

    А на 5ю версию есть подобная команда?

    #34680
    JurasskPark
    Участник

    А почему в свойствах коммуникатора у линии и девайса не выставить периодичность 1 раз в час? )

    #34684
    manjey73
    Участник

    @DaniilOpushnev на 5-ю нет. там надо спецфайлики в папку Cmd запихивать, еще и правильно их сформировать, может и получится.

    Так все же вопрос, почему команда в виде строки, а не сразу в Код команды ?

    Указать номер устройства и в Число передать кажется тоже номер устройства

    #34685
    DaniilOpushnev
    Участник

    В код команды тоже работает, спасибо!
    И просто выставить период тоже работает, все проще чем казалось..) Спасибо! С периодичностью и на 5й версии заработает.

    #34689
    a80808
    Участник

    Но с задержкой может оказаться не привязанной к началу часа….

    #34694
    DaniilOpushnev
    Участник

    Да я тоже об этом подумал, поэтому поставил период в 10 минут, это хотя бы позволит избавиться от «дребезга» значений. А так в 5й версии в модуле автоуправление есть функция опрос КП, буду тестировать ее в понедельник.

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