
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リードホールドレジスタ
メインステーション送信:
| バイト数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 内容は | ADR | 0x03 | スタートレジスタハイバイト | スタートレジスタローバイト | レジスタ数ハイバイト | レジスタ数低バイト | CRCローバイト | CRCハイバイト |
No.1バイトADR:スレーブ局アドレスコード(=001 〜 254)。
バイト2 x 0 3:読み取りレジスタ値関数コード。
No.3,4バイト:読み出すレジスタの開始アドレス。
5,6バイト目:読み込むレジスタの数。
バイト7、8番目:バイト1から6までのCRC16チェックコード。
駅からの返却:
| バイト数 | 1 | 2 | 3 | 4 、5 | 6 、7 | … | M-1、M | M+1 | M+2 |
| 内容は | ADR | 0x03 | 合計バイト数 | レジスタデータ1 | レジスタデータ2 | … | レジスタデータM | CRCローバイト | 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チェック符号。
スレーブがエラーを受信すると、スレーブは次のようにループバックします。
| バイト数 | 1 | 2 | 3 | 4 | 5 |
| 内容は | ADR | 0x83 | 異常コード。 | CRCローバイト | CRCハイバイト |
No.1バイトNo.2バイトNo.3バイト
ADR:スレーブアドレスコード(=001~254)。
0 x 83:読み取りレジスタ値エラー。
No.4,5バイトバイト1から3までのCRC16チェック符号。
1.2.2 0 x 0 6,単一レジスタへの書き込み
メインステーション送信:
| バイト数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 内容は | ADR | 0x06 | レジスタハイバイトアドレス | レジスタローバイトアドレス | データのハイバイト | データ低バイト | CRCコード低バイト | CRCコードハイバイト |
スレーブが正しく受信すると、スレーブは次のようにループバックします。
| バイト数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 内容は | ADR | 0x06 | レジスタハイバイトアドレス | レジスタローバイトアドレス | データのハイバイト | データ低バイト | CRCコード低バイト | CRCコードハイバイト |
スレーブがエラーを受信すると、スレーブは次のようにループバックします。
| バイト数 | 1 | 2 | 3 | 4 | 5 |
| 内容は | ADR | 0x86 | 異常コード。 | CRCローバイト | CRCハイバイト |
No.1バイトNo.2バイトNo.3バイト
ADR:スレーブアドレスコード(=001~254)。
0 x 86:レジスタ値の書き込みエラー。
No.4,5バイトバイト1から3までのCRC16チェック符号。
1.2.3 0 x 10複数のレジスタ値を書き込む
メインステーション送信:
| バイト数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 内容は | ADR | 0x10 | スタートレジスタハイバイトアドレス | 開始レジスタ低バイトアドレス | レジスタ数高バイト | レジスタ数低バイト | データ·セクションの合計 |
| バイト数 | 8,9 | 10,11 | N,N+1 | N+2 | N+3 |
| 内容は | レジスタデータ1 | レジスタデータ2 | レジスタデータM | CRCコード低バイト | CRCコードハイバイト |
スレーブが正しく受信すると、スレーブは次のようにループバックします。
| バイト数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 内容は | ADR | 0x10 | レジスタハイバイトアドレス | レジスタローバイトアドレス | レジスタ数高バイト | レジスタ数低バイト | CRCコード低バイト | CRCコードハイバイト |
スレーブがエラーを受信すると、スレーブは次のようにループバックします。
| バイト数 | 1 | 2 | 3 | 4 | 5 |
| 内容は | ADR | 0x90 | 異常コード。 | CRCローバイト | CRCハイバイト |
No.1バイトNo.2バイトNo.3バイト
ADR:0 x 90:例外コード:
スレーブ局アドレスコード(=001~ 25 4)。
书き込みレジスタ値エラー。
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リアルタイム状態レジスタ
| レジスター·アドレス | 説明する。 | 値の範囲 | 機能コードのサポート | 備考:コメント |
| 0x0008 (8) | リアルタイム電流 | 0~65535 | 0x03 | 値に0.01を乗じた値、単位はA |
| 0x0009 (9) | リアルタイムでの高速化。 | -110000~110000 | 0x03 | リアルタイム回転速度、RPM |
| 0x000A (10) | リアルタイム速度の半分。 | |||
| 0x000B (11) | エラー状態 | 0~13 | 0x03 | 0エラーなし1:ブロッキングStop2:位相順序学習なし3:位相異常4:位相ライン過電流5:バス過電流6:高電圧7:低電圧8:位相学習異常9:過負荷異常10:485 通信中断11:CAN通信中断12:バスバー電圧高すぎ13:温度高すぎ14:非誘導起動失敗15:相電流異常 |
| 0x000C (12) | 内部ポテンショメータ電圧 | 0~3300 | 0x03 | 単位はmV。 |
| 0x000D (13) | 外部信号電圧 | 0~10000 | 0x03 | 単位はmV。 |
| 0x000E (14) | 予約済み予約 | |||
| 0x000F (15) | 予約済み予約 | |||
| 0x0010 (16) | Enable Levelシングル | 0,1 | 0x03 | 0:低レベル1:高レベル |
| 0x0011 (17) | ブレーキのレベル | 0,1 | 0x03 | 0:低レベル1:高レベル |
| 0x0012 (18) | 方向のレベル | 0,1 | 0x03 | 0:低レベル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, | 0x03 | 0-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~1000 | 0x03 | PWMパーセントに0.1%を掛け、単位は‰です。 |
| 0x0015(21) | 入力PWMデューティサイクル | 0~1000 | 0x03 | 入力PWMデューティサイクルに0.1%を掛け、単位は‰です。 |
| 0x0016(22) | 電圧は | 0~100 | 0x03 | 電源電圧、単位はV |
| 0x0017(23) | 気温は | -200~200 | 0x03 | 基板温度(℃) |
| 0x0018(24) | 予約済み予約 |
2.3モータ制御レジスタ
モータ制御レジスタ表のように 2.3 場所は見せてください
表 2.3モータ制御レジスタ
| レジスター·アドレス | 説明する。 | 値の範囲 | 機能コードのサポート | 備考:コメント |
| 0x0020 (32) | Stopする。 | 0, 1, 2 | 0x03 0x06 | 0:通常停止1:緊急ブレーキ2:フリーStop |
| 0x0021 (33) | 目標パラメータの高さを設定する | クローズドループ:-最大回転数~最大回転数オープンループ:-1000 ~ 1000 | 0x03 0x06 0x10 | 速度制御がクローズドループで速度を表す場合、単位はRPMです。速度制御がオープンループでPWMを表す場合、値に0.1%を掛けたPWMパーセントを表します。正の数は正の転転、负の数は反転、0は正常停止 |
| 0x0022 (34) | 目標パラメータの下位半分を設定する | |||
| 0x0023 (35) | テストコントロールのテスト | 0, 1 | 0x03 0x06 | 0:テストのキャンセル、1:逐次学習 |
| 0x0024 (36) | 出力制御の結果 | 0, 1 | 0x03 0x06 | 0:出力ロー 1:出力ハイ |
| 0x0025~0x27(37)~ (39) | 予約済み予約 |
2.4モータパラメータ配置レジスタ
モータパラメータ配置レジスタは表のとおり 2.4 場所は見せてください
表 2.4モータパラメータ配置レジスタ
| レジスター·アドレス | 説明する。 | 値の範囲 | 機能コードのサポート | 備考:コメント |
| 0x0028 (40) | モーター定格電流 | 0~1500 | 0x03 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 0x10 | 0:学習しない1:学習した |
| 0x0032 (50) | 不感ブートサイズ | 0~4 | 0x03 0x06 0x10 | 0:軽荷重1:中荷重2:重荷重3:小慣性荷重4:大慣性荷重 |
| 0x0033 (51) | 閉ループ速度加速加速度 | 100~最大速度 | 0x03 0x06 0x10 | 単位はRPM/S |
| 0x0034 (52) | 閉ループ速度減速加速度 | 100~最大速度 | 0x03 0x06 0x10 | 単位はRPM/S |
| 0x0035 (53) | オープンループ速度加速加速度 | 4~500 | 0x03 0x06 0x10 | 単位は%/S |
| 0x0036 (54) | 开ループ速度加速度 | 4~500 | 0x03 0x06 0x10 | 単位は%/S |
| 0x0037 (55) | Stopモード。 | 0, 1, 2 | 0x03 0x06 0x10 | 0:通常停止1:緊急ブレーキ2:フリーStop |
| 0x0038 (56) | 自動変換モード | 0, 1, 2 | 0x03 0x06 0x10 | 0:通常の変換1:非常に緊急の変換 |
| 0x0039 (57) | Stopロック電流 | 0~1500 | 0x03 0x06 0x10 | 0:ノンストップ位相ロックその他の値:値に0.0 1を掛けた電流値、単位はA。 |
| 0x003A~0x 3F(58)~ (63) | 予約済み予約 |
2.5システムパラメータ設定レジスタ
システムパラメータ設定レジスタ表のように 2.5 場所は見せてください
表 2.5システムパラメータ設定レジスタ
| レジスター·アドレス | 説明する。 | 値の範囲 | 機能コードのサポート | 備考:コメント |
| 0x0040 (64) | 停止時間のStop | 0~66635 | 0x03 0x06 0x10 | 略称はMS。 |
| 0x0041 (65) | 保護オフ電流 | 0~4200 | 0x03 0x06 0x10 | 値に0.01を乗じた値、単位はA |
| 0x0042 (66) | 内部ポテンショメータ制御しきい値の最大値 | 0~3300 | 0x03 0x06 0x10 | 単位はmV。 |
| 0x0043 (67) | 内部ポテンショメータ制御しきい値の最小値 | 0~3300 | 0x03 0x06 0x10 | 単位はmV。 |
| 0x0044 (68) | 外部入力制御しきい値の最大値 | 0~10000 | 0x03 0x06 0x10 | 単位はmV。 |
| 0x0045(69) | 外部入力制御しきい値の最小値 | 0~10000 | 0x03 0x06 0x10 | 単位はmV。 |
| 0x0046 (70) | 保護電圧しきい値の最大値(過電圧保護電圧) | 8~56 | 0x03 0x06 0x10 | 保護電圧範囲(V) |
| 0x0047 (71) | 保護電圧しきい値の最小値(低電圧保護電圧) | 8~56 | 0x03 0x06 0x10 | |
| 0x0048 (72) | 電圧保護の設定 | 0,1 | 0x03 0x06 0x10 | 0:保護なし1:電圧保護 |
| 0x0049(73) | 出力タイプ | 0,1,2,3,4,5 | 0x03 0x06 0x10 | 0:出力しない(出力低レベル)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.6 場所は見せてください
表 2.7通信パラメータ配置レジスタ
| レジスター·アドレス | 説明する。 | 値の範囲 | 機能コードのサポート | 備考:コメント |
| 0x0050 (80) | 485通信中断ブレーキ時間 | 0~66635 | 0x03 0x060x10 | 単位はS。 |
| 0x0051 (81) | 485通信機器のアドレス | 0~255 | 0x03 0x060x10 | Modbusスレーブアドレス |
| 0x0052 (82) | 485通信ポート | 0~4 | 0x03 0x060x10 | 0:9600 1:192002:38 400 3:57 6 00 4:115200 bps単位 |
| 0x0053 (83) | 485通信シリアル検査方法 | 0~3 | 0x03 0x060x10 | 0:なし+ストップビット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> 。
/* 上位バイトの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);
}
Leave a Reply