Modbus — объединить регистры в массив

Стартовая страница Форумы Понять, как работает ПО Modbus — объединить регистры в массив

Просмотр 14 сообщений - с 16 по 29 (из 29 всего)
  • Автор
    Записи
  • #37267
    manjey73
    Участник
    | ************************************ RAM_9234 ************************************ |
    +-------+----------------------------+----------------------------+----------+-------+
    | 98    | FreezeAlarmCode2           | FreezeAlarmCode2           |        0 |       |
    +-------+----------------------------+----------------------------+----------+-------+
    | 99    |                            |                            |       10 |       |
    +-------+----------------------------+----------------------------+----------+-------+
    | 100   |                            |                            |        1 |       |
    +-------+----------------------------+----------------------------+----------+-------+
    | 101   |                            |                            |       48 |       |
    +-------+----------------------------+----------------------------+----------+-------+
    | 102   |                            |                            |        5 |       |
    +-------+----------------------------+----------------------------+----------+-------+
    | 103   |                            |                            |        1 |       |
    +-------+----------------------------+----------------------------+----------+-------+
    | 104   | HeatPumpAlarm2             | HeatPumpAlarm2             |        0 |       |
    +-------+----------------------------+----------------------------+----------+-------+
    | 105   | ResHeatPumpAlarm2          | ResHeatPumpAlarm2          |        0 |       |
    +-------+----------------------------+----------------------------+----------+-------+

    Ну например деактивировать сами регисты, прочитать 3-и нужные группой быстрее, чем читать каждый.
    Показывать в таблице лога устройства еще и номер регистра с указанием что оно такое — Holding, Input. Discrete

    #37268
    manjey73
    Участник

    Вот справа есть таблица для номера канала. добавить еще столбец Комментарий или как-то так и номер(а) регистров указывать.

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

    нельзя сразу указывать множители. Как написал Михаил завязано на Modbus Slave. Ну так тогда и его надо будет научить и все-таки добавить множители.

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

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

    @manjey73, приведите, пожалуйста, парочку примеров структур, которые могут быть в Модбас.

    #37272
    manjey73
    Участник

    пример лога устройства

    Хочу отключить пустые теги, чтобы они не светились в таблице. Сейчас это можно сделать только разделяя запросы по группам, что приведет к увеличению запросов.
    Устройство RTU.

    Ну, я же не говорю добавить множители здесь и сейчас 🙂
    Это так сказать в ToDo.

    Да что там приводить то? Ну пример, который мне дали — чтение 30-ти байт 15 регистров.

    Формат сообщения об ошибке (30 байт)
    Байт Описание
    0..14 не актуально
    15 биты 0..3 – номер сети
    16 номер узла в сети
    17..18 год передачи ошибки (старший, младший)
    19 месяц передачи ошибки
    20 день передачи ошибки
    21 час передачи ошибки
    22 минута передачи ошибки
    23 секунда передачи ошибки
    24..27 не актуально
    28 0 или номер узла с отсутствием связи
    29 код ошибки (смотреть в инструкции по монтажу на контроллер)

    А если в рамках драйвера — создаем группу, начало чтения ну скажем с 1-го байта данной структуры и следом после нее еще кучка регистров.
    Пример
    1

    Мы создали группу со стартовым адресом 69, где есть «структура», ну в моем случае как раз начинается с нее.
    Надо типа такого — вместо регистра и его описания говорим = ты структура, количество регистров 15. Все, вместо пачки записей Alarm1, Alarm2 и т.д. у нас «подгруппа» Структуры.
    Открываем вкладку настроек этой подгруппы и начинаем там распихивать так же как в основном дереве — что байт, что два байта (меняем перестановку если необходимо).
    Что-то может оказаться битовой маской.
    Присваиваем отдельным элементам структуры имена, множители, описание имен маскам…

    з.ы. наглый запрос да? 🙂

    #37273
    manjey73
    Участник

    Это вот как раз будет полезным, когда добавятся расширенные команды Modbus где читается просто массив регистров.
    И что вот в подобные структуры запихнет производитель, зависит от производителя.
    Например может быть так, что два регистра будут вмещать в себя 3-х байтовые переменные. говорю же, хоть черта лысого производитель может так описать, либо просто в штатном наборе регистров, либо в массиве регистров расширенных команд Modbus.

    #37274
    JurasskPark
    Участник

    >>з.ы. наглый запрос да? 🙂
    Нет. Нормальный. Я так и делаю.

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

    Пожалуй, проектируя драйвер с нуля, будет проще реализовать такой подход, когда конфигурация исходит из логического представления данных, а не из физического.

    #37300
    manjey73
    Участник

    А чем оно не физическое?
    Мы берем любой текущий регистр и говорим ему что ты структура с некой длиной.
    Если у нас группа Holding то для драйвера это и есть набор регистров от сих до сих. Просто иконка другая (чтобы опознавало что это группа). Следующий регистр после будет иметь свой номер, после созданной группы.

    А вот настраивать группу в точно таком же окне, только уже с немного большей гибкостью. Добавить байты например для отдельных переменных.

    #37301
    manjey73
    Участник

    В плане запроса, получения общего ответа, расчета CRC ничего не меняется.
    Меняется только разбор, который надо добавить согласно настройками структуры и выдача этих переменных из Коммуникатора в Сервер.
    И создание переменных для мастера создания каналов.

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

    • Ответ изменён 1 год, 5 месяцев назад пользователем manjey73.
    #37303
    JurasskPark
    Участник

    Меняет.
    Например, у меня есть у драйвера массивы регистров. Под Coils, DiscreteInputs, HoldingRegister и InputRegistee. И ответ с команды я складываю в массив регистров 65536. И теги потом оттуда достают по своему адресу регистра значение.
    А у Михаила — получил и сразу сконвертировал.
    Так что логика разная. 🙂

    #37304
    manjey73
    Участник

    я имел ввиду что если разные группы, то они могут и остаться разными.
    Coils, DiscreteInputs, HoldingRegister и InputRegistee.

    Но если внутри группы есть структура, ее можно описать внутри со своим разбором и отдачей Коммуникатором так, так как надо. PDU же формируется как ни в чем не бывало в плоскости, незаметно для драйвера. По сути какая ему разница, если в обоих случаях ему надо прочитать 30 регистров Holding ?

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

    Внутри одной группы (одного запроса) может быть несколько структур.

    #37333
    manjey73
    Участник

    Вполне, почему бы и нет?

Просмотр 14 сообщений - с 16 по 29 (из 29 всего)
  • Для ответа в этой теме необходимо авторизоваться.