html Регистры Modbus и порядок слов в 32-битных значениях — FCTELE
                                   +8618758069661 [email protected]
Поиск продукции Подсказка: пробел = И, | = ИЛИ, ! = НЕ

Почему значение Modbus неверно? 16-битные регистры, 32-битные данные и порядок слов

Есть вопросы? Позвоните нам сегодня!

+8618758069661

Или оставьте нам сообщение

Онлайн-сообщение

Почему значение Modbus неверно? 16-битные регистры, 32-битные данные и порядок слов

Просмотры: 13 +13Оригинальный материал FCTELEАвтор: техническая команда FCTELE

ИНТЕРПРЕТАЦИЯ ДАННЫХ MODBUS

Почему обмен данными может проходить успешно, а показание быть неверным?

Успешный обмен доставляет содержимое регистров, но не подтверждает, как приложение должно его интерпретировать. Для 32-битного значения необходимы правильный порядок целых слов, тип данных, масштабирование и единица измерения. Также требуется согласованность обновления данных по времени. Начните с карты регистров устройства и сохраните исходный ответ. Здесь рассматриваются общие принципы, а не конфигурация конкретного прибора или гарантия атомарных снимков данных.

01

Байты

A standard 16-bit register is carried as two ordered bytes.1234High byte first

Стандартный 16-битный регистр передается в виде двух байтов в определенном порядке.

02

Слова

Rebuild whole words using the device map and the correct data type.41C80000Float: 25.0

Восстанавливайте значение из целых слов по карте устройства с учетом правильного типа данных.

03

Моменты времени

Check whether both words belong to one coherent update.Old: 0000 FFFFNew: 0001 0000Do not mix halves

Проверьте, относятся ли оба слова к одному согласованному обновлению.

01 Изучите карту

Уточните систему обозначения адресов, количество регистров, тип, масштаб и единицу измерения.

02 Сохраните исходные данные

Сохраните один разрешенный запрос чтения и соответствующий ему ответ.

03 Проверьте согласованность

Проверьте порядок обновления и, при наличии, временную метку кэша шлюза.

Контрольный список выбора и проверки — развернуть
Проверка Что подтвердить Как проверить
Кодирование Порядок байтов и целых слов Сравните исходные байты с официальной картой
Смысл Тип данных, масштаб и единица измерения Проверьте несколько известных значений
Актуальность Согласованность обновлений и давность данных в кэше Изучите описание реализации и данные временных меток

Прибор отображает 25, а компьютер показывает неправдоподобное десятичное значение, хотя журнал обмена сообщает об успехе. Кабель или оптоволокно не обязательно неисправны: данные могли поступить без изменений, а затем быть неверно интерпретированы. Чтобы разобраться в порядке слов Modbus, не нужна страница формул. Проследите, что содержит регистр, как сообщение передает это содержимое и как программа восстанавливает значение, чтобы отличить успешную передачу от правильного показания.

Старший и младший байты одного 16-битного регистра последовательно помещаются в сообщение
Рисунок 1: порядок байтов для 0x1234, а не временная последовательность битов при последовательной передаче или схема конкретной микросхемы.

Начните с пронумерованных ячеек данных

Modbus определяет правила обмена данными промышленных устройств. При чтении регистров хранения или входных регистров представьте область данных устройства как ряд пронумерованных ячеек. Каждый такой регистр содержит 16 бит, или два байта; в каждом байте восемь бит. Это логические единицы данных, а не утверждение о том, что внутри прибора физически установлен ряд отдельных микросхем.

Номер указывает программе, где искать данные, но не дает полного объяснения того, что там хранится. Одни и те же два байта могут представлять беззнаковое целое число или набор флагов состояния. Карта регистров устройства объясняет, означают ли данные температуру, давление, энергию или что-то другое. Воспринимайте карту как упаковочную ведомость: адрес, тип данных, единица измерения, масштабирование и условия действительности данных должны рассматриваться вместе. Одного копирования адреса недостаточно.

Проверьте также систему обозначения адресов. В руководстве может использоваться ссылочный номер регистра хранения, например 40001, тогда как в сообщении используется начальное смещение; некоторые программы выполняют это преобразование за пользователя. Сопоставьте данные с примером запроса из той же документации, чтобы установить, ожидает ли интерфейс ссылочный номер или смещение. Это позволит избежать сдвига всего чтения на одну ячейку. Многократная перестановка слов для компенсации ошибки адреса лишь затрудняет диагностику.

Какой байт регистра передается первым?

Пример значения регистра 0x1234 можно разделить на байты 12 и 34. Шестнадцатеричная запись — это всего лишь компактный способ записи исходных данных, а не сложное вычисление, которое необходимо выполнять на объекте. Стандартное кодирование регистров Modbus помещает старший байт 12 перед младшим байтом 34. Принимающая программа использует этот порядок для восстановления того же 16-битного содержимого.

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

Два регистра добавляют вопрос о порядке слов

32-битное значение не помещается в один 16-битный регистр и обычно занимает два соседних регистра. Помимо порядка байтов внутри каждого регистра возникает еще один вопрос: содержит ли первый регистр старшие 16 бит или младшие 16 бит полного значения? Именно этот порядок слов здесь рассматривается. Устройства и конфигурации могут различаться, поэтому сама по себе поддержка Modbus не означает единого порядка.

Например, 25.0 в формате числа с плавающей точкой одинарной точности IEEE 754 состоит из четырех байтов 41 C8 00 00. В одной иллюстративной карте регистров 41C8 размещается в регистре N, а 0000 — в N+1; в другой эти два слова расположены в обратном порядке. В обоих случаях при чтении и восстановлении по соответствующей карте получается 25.0. Применение первой интерпретации ко второй карте может дать совершенно неверное значение, несмотря на успешный обмен. Это учебные примеры, а не реальные адреса или настройки прибора.

Две альтернативные карты регистров позволяют восстановить одно и то же значение с плавающей точкой 25.0 из примера
Рисунок 2: N обозначает абстрактную позицию регистра, а не реальную карту или конфигурацию прибора.

Перестановка слов отличается от перестановки байтов внутри слов

Представьте две книги, в каждой из которых есть верхняя и нижняя страницы, представляющие четыре байта данных. Обмен книг местами напоминает перестановку двух 16-битных слов; обмен страниц внутри каждой книги напоминает перестановку байтов внутри слов. Эти операции затрагивают разные границы. Обозначения в программе, такие как big-endian, little-endian или swap, могут относиться к разным уровням, поэтому одного названия пункта меню недостаточно для определения преобразования.

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

CRC в конце кадра Modbus RTU — это код обнаружения ошибок, помогающий проверить, не изменилось ли переданное содержимое. Если устройство намеренно возвращает данные младшим словом вперед, его CRC может быть корректным. Последующая интерпретация программой этих данных как переданных старшим словом вперед не приведет к тому, что CRC укажет на эту ошибку интерпретации. Чтение другого, но допустимого адреса также может пройти проверку. Отдельно сохраняйте сведения о том, что поступило и как это было интерпретировано.

Одни и те же байты могут требовать разной интерпретации

Правильный порядок — лишь одно из требований. 32-битное целое число и 32-битное значение с плавающей точкой интерпретируются по-разному. Форматы с плавающей точкой могут представлять дробные числа, но это не означает, что каждый четырехбайтовый элемент следует декодировать как число с плавающей точкой. Знаковые целые числа допускают отрицательные значения, тогда как беззнаковые предполагают другую интерпретацию диапазона. Выбирайте эти параметры по документации устройства, а не по тому, насколько правдоподобно выглядит показание на экране.

Масштабирование и единицы измерения также входят в цепочку интерпретации. Если в карте регистров явно указано, что исходное целое число 253 означает 25.3 градусов Цельсия, программа должна применять это правило, а не отображать 253 градусов Цельсия. Это отдельный пример, не связанный с приведенным выше значением с плавающей точкой 25.0. Проверьте также коды недействительных значений, признаки отсутствия связи и зарезервированные биты. Отображение специального кода недоступности на графике как обычного измерения может создать убедительную, но ложную картину нарушения технологического процесса.

Чтения, выполненные по разные стороны момента обновления счетчика, объединяют слова, относящиеся к разным моментам времени
Рисунок 3: концептуальный пример согласованности обновления, а не результат измерения. Само по себе блочное чтение не гарантирует атомарного снимка данных.

Даже при правильном порядке необходим единый момент измерения

При чтении двух регистров отдельными запросами устройство может обновить данные между чтениями. Рассмотрим условный 32-битный беззнаковый счетчик, изменяющийся с 0000 FFFF на 0001 0000. Чтение старого старшего слова 0000, а затем нового младшего слова 0000 дает 0000 0000. Этот результат не является ни полным старым, ни полным новым значением. Проблема заключается в согласованности считывания по времени.

Чтение двух последовательных регистров одним запросом обычно сокращает временное окно, возникающее при отдельных запросах, но не доказывает, что каждое устройство предоставляет атомарный снимок данных. Изучите документацию по реализации: предусмотрены ли фиксация данных, определенный порядок обновления, порядковые номера или временные метки, позволяющие определить согласованное обновление. Если шлюз кэширует данные, также зафиксируйте время обновления кэша. Только что полученное сообщение не обязательно содержит только что измеренное значение, а более частый опрос не заменяет механизм обеспечения согласованности.

Разграничьте ответственность на пути передачи данных

На сайте FCTELE представлен промышленный оптический модем FCP-D8G Modbus для монтажа на DIN-рейку, предназначенный для передачи последовательного обмена Modbus по оптоволокну по схеме «точка — точка». Этот пример показывает полезное разграничение: оптический канал передает данные обмена, а карта регистров прибора определяет их смысл. Использование оптического модема Modbus не означает автоматического распознавания порядка слов чисел с плавающей точкой любого прибора, преобразования единиц измерения или получения синхронизированных снимков измерений. Проверяйте фактические возможности по документации соответствующей версии изделия.

Начните проверку с одного устройства и одной разрешенной точки данных, доступной только для чтения. Сохраните запрос и ответ одной транзакции, подтвердите целевое устройство, код функции, систему обозначения начального адреса и количество регистров, затем проверьте исходные регистры, порядок слов, тип данных, масштабирование, единицы измерения и время обновления. Успешная проверка целостности — лишь один этап, а не доказательство правильной прикладной интерпретации. Прежде чем переходить к другим точкам, объясните и задокументируйте всю цепочку получения показания. Такая запись затем послужит основой для систематических проверок при замене прибора или программного пакета.

Если локальный инструмент считывает точку правильно, а через оптический канал она считывается неверно, сравните исходные ответы одного и того же устройства при одинаковой конфигурации, затем проверьте выбор канала, настройки последовательного интерфейса и журналы. Одинаковые исходные байты при разных отображаемых значениях указывают на настройки декодирования; разные байты или несоответствие транзакций требуют дальнейшего исследования пути передачи данных. Такой порядок сокращает ненужную замену оборудования, не позволяя при этом списывать реальные неисправности передачи на проблемы порядка слов.

Источники и область рассмотрения

Организация Modbus: регистры и форматы данных; Протокол прикладного уровня V1.1b3, раздел 4.2: кодирование байтов; Schneider Electric: карта регистров и примеры порядка слов; Schneider Electric: чтение значений с плавающей точкой с переставленными словами; Информация об оптическом модеме FCTELE FCP-D8G Modbus (на китайском языке). Настройки сторонних устройств не подтверждают возможности продукции FCTELE. Иллюстрации и примеры — самостоятельно подготовленные пояснения, а не результаты измерений или инструкции по подключению.

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

Частые вопросы

Почему даже при успешном обмене Modbus может отображаться неверное значение?

Передача и интерпретация — разные процессы. Проверьте целевое устройство, систему обозначения адресов, количество регистров, порядок слов, тип данных, масштабирование, единицу измерения и время обновления. Корректный CRC не доказывает правильность прикладной интерпретации.

Перестановка двух регистров — это то же самое, что перестановка байтов?

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

Гарантирует ли один запрос двух регистров единый момент измерения?

Нет. Блочное чтение может сократить временное окно, возникающее при отдельных запросах, но атомарность снимков данных, фиксация и порядок обновления зависят от реализации. Для кэшированных данных шлюза также необходимо проверять время обновления.

Дополнительные материалы

Несколько ПЛК и концентратор Modbus · Формирование кадра байта UART и считывание битов

Поделиться статьёй