20-04-2021



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. ASComm Excel Add-in is a simple to use, non-programmatic way to populate Excel 2007 - 2016 spreadsheets with data from PLCs, instrumentation, and other pr. Leave the Modbus to Us! Do you need to add Modbus communications to the Windows app you are developing? If so, stop looking. Start talking Modbus today with Sapia Software Components for Windows.

Two Developer Team

Catalog Item:ASMBSERIAL-TEAM-2
Price (USD):$878
Tech Support:30 days, limited
Updates:Current version only, in final release status
Online Purchase:Buy Now
Offline Purchase:Order Form or Call
Version:Revision History
Availability:Immediate via Internet Download

Three Developer Team

Catalog Item:ASMBSERIAL-TEAM-3
Price (USD):$1207
Tech Support:30 days, limited
Updates:Current version only, in final release status
Online Purchase:Call to Order
Offline Purchase:Order Form or Call
Version:Revision History
Availability:Immediate via Internet Download

Mbaxp

Four Developer Team

Catalog Item:ASMBSERIAL-TEAM-4
Price (USD):$1536
Tech Support:30 days, limited
Updates:Current version only, in final release status
Online Purchase:Call to Order
Offline Purchase:Order Form or Call
Version:Revision History
Availability:Immediate via Internet Download

Five Developer Team

Catalog Item:ASMBSERIAL-TEAM-5
Price (USD):$1865
Tech Support:30 days, limited
Updates:Current version only, in final release status
Online Purchase:Call to Order
Offline Purchase:Order Form or Call
Version:Revision History
Availability:Immediate via Internet Download

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:

MbaxpThe 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.

Mbaxp

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.

Mbaxp ocx

Practical Help

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.

Function KeywordSwap ModeSource BytesTarget Bytes
2.i16-1.i32N/A[ a b ] [ c d ][ a b c d ]
2.i16-1.i32-sbyte and word swap[ a b ] [ c d ][ d c b a ]
2.i16-1.i32-sbbyte swap[ a b ] [ c d ][ b a d c ]
2.i16-1.i32-swword swap[ a b ] [ c d ][ c d a b ]

The following table shows the FieldServer function moves that copy two adjacent 16-bit registers to a 32-bit floating point value:

Function KeywordSwap ModeSource BytesTarget Bytes
2.i16-1.ifloatN/A[ a b ] [ c d ][ a b c d ]
2.i16-1.ifloat-sbyte and word swap[ a b ] [ c d ][ d c b a ]
2.i16-1.ifloat-sbbyte swap[ a b ] [ c d ][ b a d c ]
2.i16-1.ifloat-swword swap[ a b ] [ c d ][ c d a b ]

The following table shows the FieldServer function moves that copy a single 32-bit floating point value to two adjacent 16-bit registers:

Function KeywordSwap ModeSource BytesTarget Bytes
1.float-2.i16N/A[ a b c d ][ a b ][ c d ]
1.float-2.i16-sbyte and word swap[ a b c d ][ d c ][ b a ]
1.float-2.i16-sbbyte swap[ a b c d ][ b a ][ d c ]
1.float-2.i16-swword swap[ a b c d ][ c d ][ a b ]

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:

16-bit ValuesFunction MoveResultFunction MoveResult
0x2000 0x47F12.i16-1.float123456.001.float-2.i160x2000 0x47F1
0xF147 0x00202.i16-1.float-s123456.001.float-2.i16-s0xF147 0X0020
0x0020 0xF1472.i16-1.float-sb123456.001.float-2.i16-sb0x0020 0xF147
0x47F1 0x20002.i16-1.float-sw123456.001.float-2.i16-sw0x47F1 0x2000

Mbaxp Crack

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.

Mbaxp Tools

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 can be downloaded HERE. The utility presents the decimal float value of 123456.00 as follows: