HUBPLC / CRC16

Modbus CRC-16

計算 HEX 資料的校驗碼與線路傳送順序。

● 在瀏覽器內運算

RESULT / 計算結果

CRC 數值
CDC5
封包傳送順序
C5 CD
完整封包
01 03 00 00 00 0A C5 CD
公式與說明
CRC-16/Modbus 初始值為 FFFF。CRC 數值以高位元組在前顯示;實際封包以低位元組在前傳送。

使用教學 / PLC 與通訊

從輸入設定到結果判讀

輸入的是 HEX 資料,不是畫面上的文字編碼

本工具計算 Modbus RTU 的 CRC-16。輸入每個位元組的兩位十六進位數,以空白或逗號分隔,例如 01 03 00 00 00 0A。不要加 0x 前綴,也不要把整串連成 01030000000A。輸入範圍從站號開始,包含功能碼與資料,但不包含原本的 CRC。

操作案例:站號 1,從位址 0 讀取 10 個保持暫存器

  1. 在「HEX 位元組(空白或逗號分隔)」填入 01 03 00 00 00 0A。
  2. 確認「CRC 數值」為 CDC5,「封包傳送順序」為 C5 CD。
  3. 「完整封包」應為 01 03 00 00 00 0A C5 CD,可用「複製完整封包」取得結果。
此讀取請求的位元組拆解
HEX意義
01站號 1
03讀取 Holding Registers
00 00起始位址 0;若採五位數參考編號慣例,即 40001
00 0A讀取數量 10 個暫存器,不是 10 個位元組
C5 CDCRC 低位元組在前

為什麼 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。

範例為離線計算與格式核對,未連接實際 PLC、傳送器或 RS485 設備驗證。設備量程、資料格式與通訊設定仍須依對應型號手冊確認。

規格參考:Modbus Organization 官方規格入口(Application Protocol V1.1b3、Serial Line V1.02)。