
FC410 with Modbus
Operating Instructions, 02/2016, A5E33120874-AC
145
CRC calculation
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 receiving device 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 occurs.
In the following a short text description of how the CRC is calculated is provided. 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):
Addr
Func
Data count Data n
Data n+1
Data n+2
Data n+x
CRC LO
CRC HI
0x41
0x12
CRC programming example
/* Table of CRC values for high-order byte */
static __flash unsigned char auchCRCHi[] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80,
0x41, 0x00, 0xC1, 0x81,
Содержание SITRANS FC410
Страница 2: ......
Страница 70: ...Commissioning 6 14 Process variables FC410 with Modbus 68 Operating Instructions 02 2016 A5E33120874 AC ...
Страница 92: ...Troubleshooting FAQs 10 2 Troubleshooting FC410 with Modbus 90 Operating Instructions 02 2016 A5E33120874 AC ...
Страница 142: ...Sensor dimension dependent default settings FC410 with Modbus 140 Operating Instructions 02 2016 A5E33120874 AC ...
Страница 146: ...Zero point adjustment FC410 with Modbus 144 Operating Instructions 02 2016 A5E33120874 AC ...
Страница 150: ...CRC calculation FC410 with Modbus 148 Operating Instructions 02 2016 A5E33120874 AC ...
Страница 152: ...Exception codes E 1 Exception handling FC410 with Modbus 150 Operating Instructions 02 2016 A5E33120874 AC ...
Страница 154: ...Float definition F 1 Float definition FC410 with Modbus 152 Operating Instructions 02 2016 A5E33120874 AC ...