How Real (Floating Point) and 32-bit Data is Encoded in Modbus RTU Messages by
The article discusses some of the typical difficulties encountered when handling 32-bit data types via Modbus RTU and offers practical help for solving these problems.
The point-to-point Modbus protocol is a popular choice for RTU communications if for no other reason that itâs basic convenience. The protocol itself controls the interactions of each device on a Modbus network, how device establishes a known address, how each device recognizes its messages and how basic information is extracted from the data. In essence, the protocol is the foundation of the entire Modbus network.
Such convenience does not come without some complications however, and Modbus RTU Message protocol is no exception. The protocol itself was designed based on devices with a 16-bit register length. Consequently, special considerations were required when implementing 32-bit data elements. This implementation settled on using two consecutive 16-bit registers to represent 32 bits of data or essentially 4 bytes of data. It is within these 4 bytes of data that single-precision floating point data can be encoded into a Modbus RTU message.
The Importance of Byte Order
Modbus itself does not define a floating point data type but it is widely accepted that it implements 32-bit floating point data using the IEEE-754 standard. However, the IEEE standard has no clear cut definition of byte order of the data payload. Therefore the most important consideration when dealing with 32-bit data is that data is addressed in the proper order.
For example, the number 123456.00 as defined in the IEEE 754 standard for single-precision 32-bit floating point numbers appears as follows:
The affects of various byte orderings are significant. For example, ordering the 4 bytes of data that represent 123456.00 in a âB A D Câ sequence in known as a âbyte swapâ. When interpreted as an IEEE 744 floating point data type, the result is quite different:
Ordering the same bytes in a âC D A Bâ sequence is known as a âword swapâ. Again, the results differ drastically from the original value of 123456.00:
Furthermore, both a âbyte swapâ and a âword swapâ would essentially reverse the sequence of the bytes altogether to produce yet another result:
Clearly, when using network protocols such as Modbus, strict attention must be paid to how bytes of memory are ordered when they are transmitted, also known as the 'byte order'.
Determining Byte Order
The Modbus protocol itself is declared as a âbig-Endianâ protocol, as per the Modbus Application Protocol Specification, V1.1.b:
"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."
Big-Endian is the most commonly used format for network protocols â so common, in fact, that it is also referred to as ânetwork orderâ.
Given that the Modbus RTU message protocol is big-Endian, in order to successfully exchange a 32-bit datatype via a Modbus RTU message, the endianness of both the master and the slave must considered. Many RTU master and slave devices allow specific selection of byte order particularly in the case of software-simulated units. One must merely insure that both all units are set to the same byte order.
As a rule of thumb, the family of a deviceâs microprocessor determines its endianness. Typically, the big-Endian style (the high-order byte is stored first, followed by the low-order byte) is generally found in CPUs designed with a Motorola processor. The little-Endian style (the low-order byte is stored first, followed by the high-order byte) is generally found in CPUs using the Intel architecture. It is a matter of personal perspective as to which style is considered âbackwardsâ.
If, however, byte order and endianness is not a configurable option, you will have to determine the how to interpret the byte. This can be done requesting a known floating-point value from the slave. If an impossible value is returned, i.e. a number with a double-digit exponent or such, the byte ordering will most likely need modification.
The FieldServer Modbus RTU drivers offer several function moves that handle 32-bit integers and 32-bit float values. More importantly, these function moves consider all different forms of byte sequencing. The following table shows the FieldServer function moves that copy two adjacent 16-bit registers to a 32-bit integer value.
The following table shows the FieldServer function moves that copy two adjacent 16-bit registers to a 32-bit floating point value:
The following table shows the FieldServer function moves that copy a single 32-bit floating point value to two adjacent 16-bit registers:
Given the vairous FieldServer function moves, the correct handling of 32-bit data is dependent on choosing the proper one. Observe the following behavior of these FieldServer function moves on the known single-precision decimal float value of 123456.00:
Notice that different byte and word orderings require the use of the appropriate FieldServer function move. Once the proper function move is selected, the data can be converted in both directions.
Of the many hex-to-floating point converters and calculators that are available in the Internet, very few actually allow manipulation of the byte and word orders. One such utility is located at
Modbus-RTU-Solutions where both Linux and Windows versions of the utilities can be downloaded. Once installed, the utility is run as an executable with a single dialog interface. The utility presents the decimal float value of 123456.00 as follows:
One can then swap bytes and/or words to analyze what potential endianness issues may exist between Modbus RTU master and slave devices.
Additional information, free Modbus tools, converters to other protocols such as BACnet, Lonworks, JCI Metasys N2, SNMP, HTTP, XML, Rockwell, GE, Omron are available at
Peter Chipkin is team leader in the development of the worldâs first ISA SP88 compliant PLC programming tool called Magus, automation of the process plant at Red Dog Mine in Alaska, leading his own staff in the development of over 40 protocol drivers and being part of a team rolling out embedded BACnet. Peter can be contacted at firstname.lastname@example.org.
See More Details.
Site customized for Screen Resolution - 1400 x 1050