https://www.lammertbies.nl/comm/info/crc-calculation?crc=8005&method=hex

위의 그림은 해당사이트의 CRC 계산 데이터를 입력하는 창입니다.
저는 주로 modbus rtu 데이터를 검증할때 사용하며 위에서 3번째에 있는 CRC16(Modbus)가 모드버스 CRC 값이 됩니다.
[사용방법]
Input type을 ASCII와 HEX중 선택하고, 그 위 입력창에 계산을 원하는 데이터를 모두 입력후 Calculate CRC 버튼을 누르면 위 박스 데이터에 패킷 형태에 맞게 CRC가 자동계산됩니다.
예제 데이터를 입력해보며 같이 확인해 보겠습니다.
필자의 경우 modbus rtu 데이터 패킷을 master에 아래와 같이 보내려고 합니다.
이때 CRC값을 데이터끝에 2byte로 보내야 하는데 이럴때 이 계산기가 유용하게 사용됩니다.
펌웨어를 통해 내가 계산한 CRC값과 검증이 필요할때도 사용하면 유용합니다.
자~!! 데이터를 한번 보낸다고 가정하고 CRC를 계산해보겠습니다.
Read temperature data of Modbus RTU (Master to Slave)
Modbus Slave ID |
Function Code |
Start Protocol Address | Quantity of Registers |
CRC16 | |||
Hi | Lo | Hi | Lo | Lo | Hi | ||
C0 | 03 | 9C | 40 | 00 | 02 | ?? | ?? |
1 byte | 1 byte | 1 byte | 1 byte | 1 byte | 1 byte | 1 byte | 1 byte |
Data Description. (모든값은 HEX 데이터 입니다.)
Master와 Slave의 통신내용을 대화로 풀면 아래와 같이 되겠습니다.
[마스터가 먼저 아래와 같이 대화를 요청합니다]
Slave ID C0야.
펑션코드 03이니까 난 니가 가지고 있는 데이터를 읽을거야.
데이터시트에 Slave 니가 적어논것처럼 온도값을 가지고 있는 레지스터가 9C 40번 부터 9C 41번 이렇게 2개라고 했으니까 읽기시작하는 주소는 9C 40이고, 거기서부터 2개의 레지스터를 읽을거야.
그리고 내 검증값은 ?? ?? 야. 니가 계산해보고 데이터형태가 맞으면 응답줘~
자 이제 ?? ?? 값을 알기위해 사이트에서 계산을 해보도록 하겠습니다.
참고로 CRC 계산에 사용되는 데이터는 Slave ID부터 Quantity of Registers까지 데이터를 계산하는 것입니다.
쉽게말해 패킷 처음부터 CRC16데이터 전까지의 데이터를 가지고 CRC를 계산합니다.

입력타입을 HEX로 지정하고 위의 패킷 데이터를 그림과 같이 입력한 후 계산버튼을 누르면 위와 같이 계산값이 바뀌게 됩니다.
Read temperature data of Modbus RTU (Master to Slave)
Modbus Slave ID |
Function Code |
Start Protocol Address | Quantity of Registers |
CRC16 | |||
Hi | Lo | Hi | Lo | Lo | Hi | ||
C0 | 03 | 9C | 40 | 00 | 02 | FB | 5E |
1 byte | 1 byte | 1 byte | 1 byte | 1 byte | 1 byte | 1 byte | 1 byte |
이렇게 CRC가 계산되어 Slave에게 전송되게 됩니다.
그럼 Slave측도 해당 패킷을 파싱한 후 자신이 계산한 CRC값과 보내온 CRC값이 동일하면
온도 데이터를 Master측으로 전송하게 됩니다.
오늘은 CRC계산과 검증방법에 대해 위와 같이 기록을 남기며, Modbus RTU에 대한
통신방법 및 예제를 통한 자세한 설명은 새로운 포스팅으로 통해 기록하도록 하겠습니다.
감사합니다.
컴맹을 눈띄게 해주시네.. 감사합니다
출처:
https://inliebe19.blogspot.com/2021/02/modbus-rtu-crc-crc-calculation.html
Modbus RTU 및 CRC 계산 검증하기 (CRC calculation)
modbus
inliebe19.blogspot.com