Поводом написания данной статьи послужил тот факт, что в протоколе modbus отсутствуют такие типы данных, как 32-хразрядное целое и 32-хразрядное число с плавающей точкой.
Стандарт modbus определяет только передачу битов и 16-разрядных регистров. Поэтому производители различных устройств передают другие типы данных так, как кажется удобным именно этому производителю.
Нам было удобно сделать так:
FLOAT и LONG побайтно передаются в порядке 3-4-1-2, т.е. число LONG, равное 08403020h передаётся как 30h.20h.08h.40h
Tx: [8] 01 04 A0 08 00 02 D2 09
Rx: [9] 01 04 04
30 20 08 40 F3 7E
------------------
INT передаются в обычном для modbus виде. Т.е. 0064h передаётся как 00h.64h
Tx: [8] 01 04 A0 8B 00 01 63 E0
Rx: [7] 01 04 02
00 64 B8 DB
------------------
То же самое касается статусов и койлов - всё как и должно быть в modbus.
------------------
Для облегчения взаимопонимания со сторонними устройствами нами были написаны следующие алгоритмы по "перевороту байтов":
Выделение старшего слова и младшего слова (HIGH и LOW) из переменной типа LONG:
http://forum.segnetics.com/showthread.php?t=736
Переворот байтов внутри FLOAT:
http://forum.segnetics.com/showthread.php?t=461