HUBPLC / CRC16
Modbus CRC-16
計算 HEX 資料的校驗碼與線路傳送順序。
RESULT / 計算結果
- CRC 數值
- CDC5
- 封包傳送順序
- C5 CD
- 完整封包
- 01 03 00 00 00 0A C5 CD
公式與說明
使用教學 / PLC 與通訊
從輸入設定到結果判讀
輸入的是 HEX 資料,不是畫面上的文字編碼
本工具計算 Modbus RTU 的 CRC-16。輸入每個位元組的兩位十六進位數,以空白或逗號分隔,例如 01 03 00 00 00 0A。不要加 0x 前綴,也不要把整串連成 01030000000A。輸入範圍從站號開始,包含功能碼與資料,但不包含原本的 CRC。
操作案例:站號 1,從位址 0 讀取 10 個保持暫存器
- 在「HEX 位元組(空白或逗號分隔)」填入
01 03 00 00 00 0A。 - 確認「CRC 數值」為 CDC5,「封包傳送順序」為 C5 CD。
- 「完整封包」應為
01 03 00 00 00 0A C5 CD,可用「複製完整封包」取得結果。
| HEX | 意義 |
|---|---|
| 01 | 站號 1 |
| 03 | 讀取 Holding Registers |
| 00 00 | 起始位址 0;若採五位數參考編號慣例,即 40001 |
| 00 0A | 讀取數量 10 個暫存器,不是 10 個位元組 |
| C5 CD | CRC 低位元組在前 |
為什麼 CDC5 傳送時變成 C5 CD?
CRC 數值用一般十六進位寫法顯示為 CDC5,其中高位元組是 CD、低位元組是 C5。Modbus RTU 在封包尾端先傳 CRC 低位元組,所以附加 C5 CD。此規則是針對 CRC,不能因此把起始位址 00 09 也顛倒成 09 00。
核對一筆抓到的封包時,先移除最後兩個 CRC 位元組,再把剩下的資料輸入本工具。將「封包傳送順序」與原封包尾端比較;不要連原 CRC 一起輸入後,把新產生的 CRC 再附加一次。
CRC 一致,為什麼仍然沒有回應?
- CRC 相符只表示這段資料的校驗一致,不代表站號、功能碼、位址或讀取數量符合設備要求。
- 確認主站軟體是否自動附加 CRC;若已自動處理,不要再貼入含 CRC 的完整封包,避免重複附加。
- 沒有回應時,另查站號、鮑率、同位元與停止位元設定、接線及逾時。工具不會連接串列埠或檢查傳送時序。
- 這個校驗用於 RTU。Modbus ASCII 使用 LRC;Modbus TCP 使用不同的封裝,不能直接在其封包尾端套用此 CRC。