ブラシレスモータドライバModbusCommunicationプロトコルとレジスタの説明

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

ブラシレスモータドライバModbusCommunicationプロトコルとレジスタの説明
ブラシレスモータドライバModbusCommunicationプロトコルとレジスタの説明插图

1.&&タグ:Communicationプロトコル

このドライブは、通信用のMODBUS-RTU(国家規格GB/T1958 2 -2008)Communicationプロトコルを使用して、複数のスレーブ(すなわちドライブ)を制御するマスターステーションをサポートし、最大255スレーブステーションをサポートし、通信放送をサポートします(スレーブステーションアドレスはブロードキャストフレームとみなされます)、マスターステーションはシングルチップ、PLCまたはPCコンピュータなどであることができます。

1.1通信パラメータ

デフォルトCommunicationパラメータ:

  • > ボーレートは9600bpsです。
  • > データは8ビットです。
  • > チェックは“No +1 Stop bit”です。
  • > スレーブアドレスは1に固定されます。&ユーザー定義のCommunicationパラメータ:
  • > ボーレートは9600-115200bpsで設定できます。
  • > データビットは8ビット固定です。
  • > 検証モードは、“偶数+1ストップビット”、“奇数+1ストップビット”、および“なし+2ストップビット”のいずれかに設定できます。
  • > スレーブアドレスは1~255の範囲で設定できます。

データフレーム通信中断が4バイトを超えたパケット時間をフレーム受信タイムアウトと判定する.フレームタイムアウトが発生すると、以前に受信したデータは無効とみなされます。

1.2 MODBUS-RTUフレームフォーマット

このドライバは、MODBUSの0x03リードホールドレジスタ、0x06シングルレジスタへの书き込み、0x10レジスタへの书き込みをサポートします。

1.2.1 0 x 0 3リードホールドレジスタ

メインステーション送信:

バイト数12345678
内容はADR0x03スタートレジスタハイバイトスタートレジスタローバイトレジスタ数ハイバイトレジスタ数低バイトCRCローバイトCRCハイバイト

No.1バイトADR:スレーブ局アドレスコード(=001 〜 254)。

バイト2 x 0 3:読み取りレジスタ値関数コード。

No.3,4バイト:読み出すレジスタの開始アドレス。

5,6バイト目:読み込むレジスタの数。

バイト7、8番目:バイト1から6までのCRC16チェックコード。

駅からの返却:

バイト数1234 56 7M-1MM+1M+2
内容はADR0x03合計バイト数レジスタデータ1レジスタデータ2レジスタデータMCRCローバイトCRCハイバイト

No.1バイトADR:スレーブ局アドレスコード(=001 〜 254)。

2バイト目0 x 0 3:読み取り関数コードを返す。

No.3バイト:4からMまでのバイトの総数(4と

4 ~ Mバイト目:レジスタデータ。

M+1、M+2バイト目:バイト1からMまでのCRC16チェック符号。

スレーブがエラーを受信すると、スレーブは次のようにループバックします。

バイト数12345
内容はADR0x83異常コード。CRCローバイトCRCハイバイト

No.1バイトNo.2バイトNo.3バイト

ADR:スレーブアドレスコード(=001~254)。

0 x 83:読み取りレジスタ値エラー。

異常コード:表を参照 1.1

No.4,5バイトバイト1から3までのCRC16チェック符号。

1.2.2 0 x 0 6,単一レジスタへの書き込み

メインステーション送信:

バイト数12345678
内容はADR0x06レジスタハイバイトアドレスレジスタローバイトアドレスデータのハイバイトデータ低バイトCRCコード低バイトCRCコードハイバイト

スレーブが正しく受信すると、スレーブは次のようにループバックします。

バイト数12345678
内容はADR0x06レジスタハイバイトアドレスレジスタローバイトアドレスデータのハイバイトデータ低バイトCRCコード低バイトCRCコードハイバイト

スレーブがエラーを受信すると、スレーブは次のようにループバックします。

バイト数12345
内容はADR0x86異常コード。CRCローバイトCRCハイバイト

No.1バイトNo.2バイトNo.3バイト

ADR:スレーブアドレスコード(=001~254)。

0 x 86:レジスタ値の書き込みエラー。

異常コード:表を参照 1.1

No.4,5バイトバイト1から3までのCRC16チェック符号。

1.2.3 0 x 10複数のレジスタ値を書き込む

メインステーション送信:

バイト数1234567
内容はADR0x10スタートレジスタハイバイトアドレス開始レジスタ低バイトアドレスレジスタ数高バイトレジスタ数低バイトデータ·セクションの合計
バイト数8,910,11N,N+1N+2N+3
内容はレジスタデータ1レジスタデータ2レジスタデータMCRCコード低バイトCRCコードハイバイト

スレーブが正しく受信すると、スレーブは次のようにループバックします。

バイト数12345678
内容はADR0x10レジスタハイバイトアドレスレジスタローバイトアドレスレジスタ数高バイトレジスタ数低バイトCRCコード低バイトCRCコードハイバイト

スレーブがエラーを受信すると、スレーブは次のようにループバックします。

バイト数12345
内容はADR0x90異常コード。CRCローバイトCRCハイバイト

No.1バイトNo.2バイトNo.3バイト

ADR:0 x 90:例外コード:

スレーブ局アドレスコード(=001~ 25 4)。

书き込みレジスタ値エラー。

テーブルを参照。 1.1

No.4,5バイトバイト1から3までのCRC16チェック符号。

1.2異常コード

MODBUS例外コード 表のように 1.1 場所は表示する。

テーブル1.& 1 MODBUS異常なコード

異常コード。意味の意味
0x01違法な機能コード
0x02違法なデータアドレス
0x03不正なデータ値
0x04スレーブ機器の障害
0x05リクエストは確認されましたが、処理に時間がかかります
0x06設備から忙しい。
0x08ストレージ·パリティ·エラー
0x0A未利用のゲートウェイ
0x0Bゲートウェイ·ターゲット·デバイスの応答に失敗しました

2.と。nbsp;標準レジスタ定義

2.1デバイス記述情報レジスタ

デバイスレジスタを表のように 2.1 場所は見せてください

テーブル2.& nbsp;1デバイス記述情報レジスタ

レジスター·アドレス説明する。値の範囲機能コードのサポート備考:コメント
0x0000 (0)デバイス識別番号 0x03各モデルには対応するデバイス識別番号があります。
0x0001 (1)デバイスのバージョン 0x03上位バイトはプライマリ·バージョン番号、下位バイトはセカンダリ·バージョン番号
0x0002 (2)最大電流は 0x03値に0.01を乗じた値、単位はA
 0x0003~0x0007(3)~(7) 予約済み予約  0x03  

2.2リアルタイム状態レジスタ

リアルタイムステータスレジスタは表のとおりです。 2.2 場所は見せてください

表 2.2リアルタイム状態レジスタ

レジスター·アドレス説明する。値の範囲機能コードのサポート備考:コメント
0x0008 (8)リアルタイム電流0~655350x03値に0.01を乗じた値、単位はA
0x0009 (9)リアルタイムでの高速化。 -110000~110000 0x03 リアルタイム回転速度、RPM
0x000A (10)リアルタイム速度の半分。
        0x000B (11)        エラー状態         0~13         0x030エラーなし1:ブロッキングStop2:位相順序学習なし3:位相異常4:位相ライン過電流5:バス過電流6:高電圧7:低電圧8:位相学習異常9:過負荷異常10:485 通信中断11:CAN通信中断12:バスバー電圧高すぎ13:温度高すぎ14:非誘導起動失敗15:相電流異常
0x000C (12)内部ポテンショメータ電圧0~33000x03単位はmV。
0x000D (13)外部信号電圧0~100000x03単位はmV。
0x000E (14)予約済み予約   
0x000F (15)予約済み予約   
 0x0010 (16) Enable Levelシングル 0,1 0x030:低レベル1:高レベル
 0x0011 (17) ブレーキのレベル 0,1 0x030:低レベル1:高レベル
 0x0012 (18) 方向のレベル 0,1 0x030:低レベル1:高レベル
                        0x0013 (19)   制御モード                 0x07,0x09,0x19,0x01,0x11,0x0a,0x1a,0x02,0x12,0x0b,0x1b,0x03,0x13,0x0c,0x1c,0x04,0x14,0x0d,0x1d,0x05,0x15,0x08,0x18,0x00,0x10,0x030-4ビットのローからハイへの定義:1ビット目はセンス0またはセンス1を示し、2ビット目はオープンループ0またはクローズループ1を示し、3ビット目はモードを示します。シーケンシャル学習。(11 1)Communicationの制御(000)内部ポテンショメーター(001)シミュレーション[0 1 0] PWM 011(100)、ロッカー。0 x 0 7:位相学習、0 x 0 9:非誘導/クローズドループ/内部ポテンショメータ制御、0 x 19:誘導/クローズドループ/内部ポテンショメータ制御、0 x 0 1:非誘導/オープンループ/内部ポテンショメータ制御、0 x 11:誘導/オープンループ/内部ポテンショメータ制御、0 x 0 a:誘導なし/クローズドループ/アナログ制御、0 x 1 a:誘導なし/クローズドループ/アナログ制御、0 x 0 2:誘導なし/オープンループ/アナログ制御、0 x 12:誘導なし/オープンループ/アナログ制御、0 x 0 b:誘導なし/クローズドループ/PWM制御、0 x 1 b:誘導/クローズドループ/PWM制御、0 x 0 3:誘導/オープンループ/PWM制御、0 x 13:誘導/オープンループ/PWM制御、0 x 0 c:誘導/クローズドループ/航空PWM制御、0 x 1 c:誘導/クローズドループ/航空PWM制御、0 x 0 4:誘導/オープンループ/航空PWM制御、0 x 14:誘導/オープンループ/航空PWM制御、0 x 0 d:誘導/クローズドループ/ロッカー制御、0 x 1 d:誘導/クローズドループ/ロッカー制御、0 x 0 5:誘導/オープンループ/ロッカー制御、0 x 15:誘導/オープンループ/ロッカー制御、0 x 0 8:誘導/クローズドループ/通信制御、0 x 18:誘導/クローズドループ/通信制御、0 x 0 0:非誘導/オープンループ/通信制御、0 x 10:誘導/オープンループ/通信制御、                  
0x0014(20)負荷率は0~10000x03PWMパーセントに0.1%を掛け、単位は‰です。
0x0015(21)入力PWMデューティサイクル0~10000x03入力PWMデューティサイクルに0.1%を掛け、単位は‰です。
0x0016(22)電圧は0~1000x03電源電圧、単位はV
0x0017(23)気温は-200~2000x03基板温度(℃)
0x0018(24)予約済み予約   

2.3モータ制御レジスタ

モータ制御レジスタ表のように 2.3 場所は見せてください

表 2.3モータ制御レジスタ

レジスター·アドレス説明する。値の範囲機能コードのサポート備考:コメント
 0x0020 (32) Stopする。 0, 1, 2 0x03 0x060:通常停止1:緊急ブレーキ2:フリーStop
0x0021 (33)目標パラメータの高さを設定するクローズドループ:-最大回転数~最大回転数オープンループ:-1000 ~ 1000  0x03 0x06 0x10速度制御がクローズドループで速度を表す場合、単位はRPMです。速度制御がオープンループでPWMを表す場合、値に0.1%を掛けたPWMパーセントを表します。正の数は正の転転、负の数は反転、0は正常停止
0x0022 (34)目標パラメータの下位半分を設定する
 0x0023 (35) テストコントロールのテスト 0, 1 0x03 0x060:テストのキャンセル、1:逐次学習
 0x0024 (36) 出力制御の結果 0, 1 0x03 0x060:出力ロー 1:出力ハイ
0x0025~0x27(37)~ (39) 予約済み予約   

2.4モータパラメータ配置レジスタ

モータパラメータ配置レジスタは表のとおり 2.4 場所は見せてください

表 2.4モータパラメータ配置レジスタ

レジスター·アドレス説明する。値の範囲機能コードのサポート備考:コメント
0x0028 (40)モーター定格電流0~15000x03 0x06 0x10値に0.01を乗じた値、単位はA
0x0029 (41)モーターの最大速度の半分。 0~110000 0x03 0x06 0x10 単位はRPM。
0x002A (42)モーターの最大速度の低さ
0x002B (43)モーターの最低速度の半分。 0~110000 0x03 0x06 0x10単位はRPMで、一般的には200RPM以下に設定されます。
0x002C (44)モーターの最低速度の半分。
 0x002D (45)モーター極対数 0~65535 0x03 0x06 0x10固定子の南北磁極の対数で、磁極の半分である
 0x002E (46) モータ1、2 相相顺データハイバイトは0~6ローバイトは0~6 0x03 0x06 0x10ローバイトは1 相ハイバイトは2 相
 0x002F (47) モータ3、4 相相データハイバイトは0~6ローバイトは0~6 0x03 0x06 0x10ローバイトは3 相ハイバイトは4 相
 0x0030 (48) モータ4、6 相相データハイバイトは0~6ローバイトは0~6 0x03 0x06 0x10ローバイトは4 相ハイバイトは6 相
 0x0031 (49) 逐次学習の状態 0,1 0x03 0x06 0x100:学習しない1:学習した
   0x0032 (50)   不感ブートサイズ   0~4   0x03 0x06 0x100:軽荷重1:中荷重2:重荷重3:小慣性荷重4:大慣性荷重
0x0033 (51)閉ループ速度加速加速度100~最大速度0x03 0x06 0x10単位はRPM/S
0x0034 (52)閉ループ速度減速加速度100~最大速度0x03 0x06 0x10単位はRPM/S
0x0035 (53)オープンループ速度加速加速度4~5000x03 0x06 0x10単位は%/S
0x0036 (54)开ループ速度加速度4~5000x03 0x06 0x10単位は%/S
 0x0037 (55) Stopモード。 0, 1, 2 0x03 0x06 0x100:通常停止1:緊急ブレーキ2:フリーStop
 0x0038 (56) 自動変換モード 0, 1, 2 0x03 0x06 0x100:通常の変換1:非常に緊急の変換
 0x0039 (57) Stopロック電流 0~1500 0x03 0x06 0x100:ノンストップ位相ロックその他の値:値に0.0 1を掛けた電流値、単位はA。
0x003A~0x 3F(58)~ (63) 予約済み予約   

2.5システムパラメータ設定レジスタ

システムパラメータ設定レジスタ表のように 2.5 場所は見せてください

表 2.5システムパラメータ設定レジスタ

レジスター·アドレス説明する。値の範囲機能コードのサポート備考:コメント
0x0040 (64)停止時間のStop0~666350x03 0x06 0x10略称はMS。
0x0041 (65)保護オフ電流0~42000x03 0x06 0x10値に0.01を乗じた値、単位はA
0x0042 (66)内部ポテンショメータ制御しきい値の最大値0~33000x03 0x06 0x10単位はmV。
0x0043 (67)内部ポテンショメータ制御しきい値の最小値0~33000x03 0x06 0x10単位はmV。
0x0044 (68)外部入力制御しきい値の最大値0~100000x03 0x06 0x10単位はmV。
0x0045(69)外部入力制御しきい値の最小値0~100000x03 0x06 0x10単位はmV。
0x0046 (70)保護電圧しきい値の最大値(過電圧保護電圧)8~560x03 0x06 0x10 保護電圧範囲(V)
0x0047 (71)保護電圧しきい値の最小値(低電圧保護電圧)8~560x03 0x06 0x10
 0x0048 (72)電圧保護の設定 0,1 0x03 0x06 0x100:保護なし1:電圧保護
   0x0049(73)   出力タイプ   0,1,2,3,4,5   0x03 0x06 0x100:出力しない(出力低レベル)1:長い出力2:アラーム信号出力3:FGフィードバック信号出力4:シャットダウン信号出力5:通信制御

2.6 PIDパラメータ設定レジスタ

閉ループ制御PIDパラメータ設定レジスタは表のように 2.6 場所は見せてください

表 2.6クローズドループ制御PIDパラメータ設定レジスタ

レジスター·アドレス説明する。値の範囲機能コードのサポート備考:コメント
0x004A (74)速度閉ループP係数高半分ワード 推奨事項1 - 32 7 6 8 0 0x03 0x10 数値を32768で割った実际の値
0x004B (75)速度閉ループP係数低半分ワード
0x004C (76)速度闭ループI高い半ワード 推奨事項1 - 32 6 7 8 0 0x03 0x10 数値を32768で割った実际の値
0x004D (77)速度閉ループI係数低半分ワード
0x004E (78)速度閉ループD係数高半分ワード 推奨事項1 - 32 6 7 8 0 0x03 0x10 数値を32768で割った実际の値
0x004F (79)速度閉ループD係数低半分ワード

2.7通信パラメータ設定レジスタ

コミュニケーション·コミュニケーションパラメータ設定レジスタは表のように 2.6 場所は見せてください

表 2.7通信パラメータ配置レジスタ

レジスター·アドレス説明する。値の範囲機能コードのサポート備考:コメント
0x0050 (80)485通信中断ブレーキ時間0~666350x03 0x060x10単位はS。
0x0051 (81)485通信機器のアドレス0~2550x03 0x060x10Modbusスレーブアドレス
    0x0052 (82)    485通信ポート    0~4   0x03 0x060x100:9600 1:192002:38 400 3:57 6 00 4:115200 bps単位
  0x0053 (83)  485通信シリアル検査方法  0~3  0x03 0x060x100:なし+ストップビット1:偶+1ストップビット2:奇+1ストップビット3:なし+2ストップビット
0x0054(84)~0 x0059 (89)予約済み予約   

CRC 16の計算

C言語のCRC 生成関数手順手順 3.1示されたものすべての可能なCRC値は2つの配列にプリロードされており、メッセージの内容を計算する際に単純なインデックスを使用できます。1つのグループは 16 ビット·ビット CRC エリアのすべて。 256可能な上位バイトは1個あり、下位バイトの値は別の配列に含まれます。CRCへのインデックスアクセスのこの方法は、メッセージバッファ内の新しい文字ごとに新しいCRCを計算するよりも高速な方法を提供します。

注:この関数は内部的にハイ/ロー CRCバイトの交換を行います。この関数は、交換されたCRC値を返します。つまり、この関数から返されたCRC値は、送信用のメッセージに直接配置することができます。

関数は2つのパラメータを使用します。

unsigned char *puchMsg; CRCを生成するために使用されるバイナリデータパケットバッファを含むポインタ。

unsigned short usDataLen;メッセージバッファのバイト数。

注:以下のCRC16 生成関数プログラムは、MODBUS over Serial Line Specification and Implementation Guideからの抜粋です。

V1.02> 。

手順手順 3.1   CRC16関数プログラムリストの生成

/* 上位バイトのCRC値 */

static unsigned char auchCRCHi[] = {

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,

0x40

} ;

/* 下位バイトのCRC値 */

static char auchCRCLo[] = {

0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4,

0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD,

0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,

0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7,

0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,

0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2,

0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,   0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB,  0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,

0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91,

0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,

0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88,  0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,

0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80,

0x40

};

unsigned short CRC16 puchmsg usDataLen/* 関数はunsigned short型でCRCを返す */

unsigned char *puchMsg/* CRCの計算に使用されるメッセージ */

unsigned short usDataLen/* メッセージの数*/
{ 
unsigned charuchCRCHi = 0xFF;/* CRCのハイバイト初期化*/

unsigned charuchCRCLo = 0 x FF;/* CRCのローバイト初期化*/

unsigned uInde x;/* CRCクエリテーブルインデックス */

while (usDataLen--)

{

/* メッセージバッファ全体を完了する */

uIndex = uchCRCLo ^ *puchMsg++; /* CRCを計算*/

uchCRCLo = uchCRCHi ^ auchCRCHi[uIndex];

uchCRCHi = auchCRCLo[uIndex];

}

return (uchCRCHi << 8 | uchCRCLo);

}

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.