CRC-16 Modbusチェックサム
装置1のレジスタ0から10個の保持レジスタを読む要求のCRCはCDC5で、回線上ではC5 CDの順に送られます。フレームを16進数かテキストで貼り付ければ、16ビットの値と送信順のバイトが分かります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- 123456789
- CRC(16進)
- 4B37
- CRC (整数)
- 19,255
- Crc lo
- 37
- Crc hi
- 4B
CRC-16 Modbusは、シリアル回線や多くの産業用バス上のほぼすべてのModbus RTUフレーム末尾に付く巡回冗長検査です。プログラマ、PLCインテグレータ、プロトコル試験担当者は、要求の組み立て、応答の検証、線路上の破損パケットのデバッグの際に、決定的な一つの数値を必要とします。本機能はプレーンなUTF-8テキスト、またはバイトのHexダンプを受け取り、多項式0xA001・初期値0xFFFFの標準CRC-16/MODBUSアルゴリズムを実行し、十六ビット結果を大文字十六進で、Modbus伝送順の下位・上位バイトとともに返します。
CRC-16 Modbusとは何か、産業ツールが必要とする理由
巡回冗長検査は、固定多項式に各データバイトを通すことで、1ビットの反転でも残留値がほぼ必ず変わるようにします。Modbus RTUは特定の十六ビットCRCを採用しました。
生成多項式は反射形0xA001(非反射形では0x8005相当)、レジスタ初期値は0xFFFF、各データバイトを下位八ビットにXORし、バイトごとに八回のシフトと条件付きXORを行い、最終XORはありません。得られた十六ビット語は、まず下位バイト、次に上位バイトの順でフレーム末尾に付加されます。
電気技術者やプロトコル解析者がスコープやシリアルスニファで見る順序です。教科書とチップのデータシートはこのプロファイルをCRC-16/MODBUSと呼びます。オンライン計算機は別の初期値や多項式を使い、PLCと静かに食い違うことがあります。
Modbus RTUの組み立てや検証、同じCRCを借りた計器プロトコル、CRC-16 Modbusと名指しされた任意のバイナリフレームでご利用ください。
活用例
キャプチャ解析とデバッグ
シリアルスニファのHexダンプをhexモードで貼り付け、CRCを再計算して、切れた・壊れた産業フレームを素早く見つけます。
よくある質問
どの多項式と初期値を使いますか?
CRC-16/MODBUS:反射多項式0xA001、初期レジスタ0xFFFF、最終XORなし。Modbus RTU上のPLCや計器の実装と一致します。
ModbusフレームでCRCのバイトはどの順に送られますか?
下位バイトが先、上位バイトが後です。4B37というCRCは37、4Bの順に送られ、オシロスコープやシリアル解析ツールでもこの順に見えます。このツールは2つのバイトを分けて、送信順で示します。
シリアル解析ツールの16進ダンプを貼り付けられますか?
できます。16進数の入力を選んでバイトを貼り付けると、空白、コロン、ハイフン、アンダースコア、カンマ、0xの接頭辞が先に取り除かれます。残りが偶数個の16進数字でない場合は、形式の誤りとして知らせます。
ほかのオンライン計算機と結果が違うのはなぜですか?
初期値や多項式が異なる計算機があり、PLCの値と黙って食い違うことがあるためです。123456789というテキストで確かめてください。CRC-16 Modbusなら4B37になり、それ以外は別の方式です。
空のメッセージのCRCも計算できますか?
できます。テキスト入力では空の文字列も受け付け、結果はレジスタの初期値であるFFFFになります。バイトを1つも処理していないためです。それ以外のテキストはUTF-8に変換してから計算します。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/crc16-modbus \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"123456789"}'const res = await fetch("https://api.kit.forhosting.com/enc/crc16-modbus", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "123456789"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/crc16-modbus",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "123456789"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/crc16-modbus", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"123456789"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"123456789"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/crc16-modbus", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "123456789"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.crc16_modbus",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
桁数が奇数や非Hex文字など不正なHexは、チェックサムをでっち上げずinvalid_inputで失敗します。
CRC-16 Modbusとは何か、産業ツールが必要とする理由
本エンドポイントは産業用プロファイルを固定しており、文字列一二三四五六七八九は周知の残留値0x4B37を、アドレス一・機能三・開始レジスタ零・数量十の典型的な保持レジスタ読み出し要求は0xCDC5(線路上はC5 CD)を生成します。
入力契約、Hex解析、応答フィールド
textモードでは文字列をUTF-8に符号化し、得られる各バイトがCRCに入ります。hexモードでは文字列をバイト列として解釈します。任意の0x接頭辞、空白、コロン、ハイフン、アンダースコア、カンマを先に除去し、残りは偶数個の十六進数字のみでなければなりません。検証失敗は課金されません。アルゴリズムはバイト長に線形で、すべてメモリ内で完結します。必須の文字列フィールドtextと、任意のinput_format(textまたはhex、既定はtext)を含むJSON本体をPOSTしてください。空文字は許可され、長さ零のペイロードでは残留値FFFFになります。除去後の桁数が奇数、または零から九およびAからF以外の文字があると、malformed hexを名指しするメッセージ付きのinvalid_inputとなり、クライアントは推測なしにフィールド横へエラーを出せます。成功時の本体には、大文字十六進四桁のcrc_hex、零から六万五千五百三十五までの符号なし整数crc_int、その語の下位・上位バイトcrc_loとcrc_hi、Modbus RTUで使う二バイトリトルエンディアン伝送順のwire_hex、解釈済みペイロードのbyte_count、エコーされたinput_format、および0xA001と0xFFFFのCRC-16/MODBUSを示す固定文字列algorithm・poly・initが含まれます。ペイロードにはdata・payload・value・inputの別名を受け付け、format・mode・encodingはinput_formatの別名です。ブラウザ利用ではペイロードを控えめに保ってください。
CRC-16 Modbus APIが価値を発揮する場面
プロトコルの逆解析者やセキュリティ研究者は、完全なスタックを立てずに、捕捉トラフィック上の残留値を再計算して清浄フレームと雑音を分けます。CRC-16 Modbusチェックサムで順位を狙うコンテンツサイトは、無料経路と自動化経路がバイト単位で一致するライブ計算機を得ます。要求を決定的に保ち、回帰スイートで既知ベクトル一二三四五六七八九が四B三七と等しいことを固定すれば、各マイクロサービスにCRC表を埋め込まずに産業級の再現性が得られます。実装は純粋なparseのtier Aのため、成功した各呼び出しは公開の基準価格$0.002で、モデルトークンも外向きネットワークもありません。正確な二バイトのトレイラが必要なときは応答のwire_hexをシリアル書き込み経路と組み合わせ、ログや単体テスト用に数値残留値だけが必要なときはcrc_hexを使います。
連携の活用例
Modbus RTUフレームの組み立て
アドレス・機能・データバイトを組み立て、返されたwire_hexトレイラを付加して、Modbus RTUが要求するとおりCRC下位バイトを先に送信します。
ファームウェアとCIのゴールデン検査
機器コードとサーバ側ツールの双方が、ASCII 123456789に対してcrc_hex 4B37を、固定要求テンプレートには文書化された残留値を出すことを断言します。
技術的な質問
CRC-16 Modbusチェックサムはどのように計算しますか?
UTF-8のtextをinput_format text(既定)で送るか、Hexバイト列をinput_format hexで送ってください。APIはcrc_hex、crc_int、下位/上位バイト、Modbus RTU順のwire_hexを返します。
Hex文字列が不正な場合はどうなりますか?
区切り除去後の桁数が奇数、または非Hex文字があるとinvalid_inputとmalformed hexのメッセージで失敗します。これらの失敗は課金されません。
wire_hexとcrc_hexの違いは何ですか?
crc_hexは十六ビット残留値を四桁十六進(文字列では上位バイトの高ニブルが先)で表します。wire_hexは下位バイトの次に上位バイト——Modbus RTU線路上に付加される順です。
CRC-16 Modbusチェックサムツールの料金は?
ブラウザツールは無料です。API要求は成功した呼び出しごとに前払いKIT残高から$0.002です。無効な入力は課金されません。