Appendix D - Crc Calculation - Siemens SITRANS F M MAGFLO series Operating Manual

Modbus rtu rs-485 add-on module for usm ii transmitters
Hide thumbs Also See for SITRANS F M MAGFLO series:
Table of Contents

Advertisement

Modbus RTU RS-485
APPENDIX D
CRC calculation
APPENDIX D
The Cyclical Redundancy Checking (CRC) field is two bytes, containing a 16-bit binary value.
The CRC value is first generated by the transmitting device, which appends the CRC to the
message. The device that receives recalculates a CRC during receipt of the message, and
compares the calculated value to the actual value it received in the CRC field. If the two values
are not equal, an error results.
There are many ways of calculating a CRC checksum. To ensure correct calculation, please refer
to [Reference 1] Modbus over serial line, where detailed descriptions and programming
examples are available. Even more information and programming examples in different pro-
gramming languages can be found on:
Below is a short text description of how the CRC is calculated. This description is then followed
by a C programming example.
CRC calculation:
1. Load a 16-bit register with FFFF hex (all 1's). Call this the CRC register.
2. Exclusive OR the first 8-bit byte of the message with the low-order byte of the 16-bit CRC
register, putting the result in the CRC register.
3. Shift the CRC register one bit to the right (toward the LSB), zero-filling the MSB. Extract and
examine the LSB.
4. (If the LSB was 0): Repeat step 3 (another shift).
(If the LSB was 1): Exclusive OR the CRC register with the polynomial value 0xA001 (1010
0000 0000 0001).
5. Repeat steps 3 and 4 until 8 shifts have been performed. When this is done, a complete 8-
bit byte will have been processed.
6. Repeat steps 2 through 5 for the next 8-bit byte of the message. Continue doing this until all
bytes have been processed.
7. The final content of the CRC register is the CRC value.
8. When the CRC is placed into the message, its upper and lower bytes must be swapped as
described below.
Placing the CRC into the Message
When the 16-bit CRC (two 8-bit bytes) is transmitted in the message, the low-order byte will be
transmitted first, followed by the high-order byte.
For example, if the CRC value is 1241 hex (0001 0010 0100 0001):
Data
Func
Addr
Count
SFIDK.PS.023.D2.02
www.modbus.org
searching for CRC.
Data n
Data n + 1
Data n + 2 Data n + x CRC LO
CRC HI
0x41
0x12
31

Hide quick links:

Advertisement

Table of Contents
loading

This manual is also suitable for:

Sitrans f c massflo series

Table of Contents