4
правки
SiMM (обсуждение | вклад) (Новая страница: « Нестандартная адресация В документации на некоторые, особенно старые, устройства адреса элементов (регистров) указываются в формате, не соответствующем стандарту. В этом формате тип элемента кодируется первой цифрой адреса, а адресация начинается н...») |
SiMM (обсуждение | вклад) (→Структуры данных Modbus: новая тема) |
||
Строка 12: | Строка 12: | ||
Так же этот факт получил отражение в рис.8 на стр.8 – мне эта «кривость» стандарта тоже не нравится, но это ещё не повод подменивать понятия и называть чёрное белым ¯\_(ツ)_/¯ | Так же этот факт получил отражение в рис.8 на стр.8 – мне эта «кривость» стандарта тоже не нравится, но это ещё не повод подменивать понятия и называть чёрное белым ¯\_(ツ)_/¯ | ||
[[Участник:SiMM|SiMM]] ([[Обсуждение участника:SiMM|обсуждение]]) 16:04, 10 ноября 2023 (MSK) | [[Участник:SiMM|SiMM]] ([[Обсуждение участника:SiMM|обсуждение]]) 16:04, 10 ноября 2023 (MSK) | ||
== Структуры данных Modbus == | |||
В Modbus принято кодировать адреса и данные в формате big-endian, то есть в формате, когда байты следуют, начиная со старшего: например, при передаче шестнадцатеричного числа 0x1234 сначала устройством будет принят байт 0x12, а затем — 0x34. Для передачи данных другого типа, например, чисел с плавающей запятой (float), текстовых строк, даты и времени суток и т.п. производитель может выбрать свой собственный способ кодирования — для расшифровки получаемых данных важно ознакомится со спецификацией производителя устройства. | |||
Кмк, не мешало бы акцентировать внимание на том, что иной выбор производителя (например, формат Intel вместо Motorola) не соответствует спецификации – см. стр.5 https://modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf : | |||
4.2 Data Encoding | |||
• MODBUS uses a ‘big-Endian’ representation for addresses and data items. This means that when a numerical quantity larger than a single byte is transmitted, the most significant byte is sent first. So for example | |||
Register size value | |||
16 - bits 0x1234 the first byte sent is 0x12 then 0x34 | |||
☞ Note: For more details, see RFC 791, Internet Protocol, Sep 81 DARPA. | |||
Самое смешное при этом – CRC этому стандарту не соответствует и передаётся младшим байтом вперёд (см., например, рис.12 на стр.13 спецификации https://modbus.org/docs/Modbus_over_serial_line_V1_02.pdf ). [[Участник:SiMM|SiMM]] ([[Обсуждение участника:SiMM|обсуждение]]) 16:23, 10 ноября 2023 (MSK) |
правки