
製品機能の説明:
X-SSG-A 1101-RS 485十オールインワン環境及び空気品質センサは、高速プロセッサを採用し、集積CO2、ホルムアルデヒド、TVOC、レーザー粉塵PM 2.5、PM 10、PM 1.0粒子状物質、温度、湿度、気圧、照度及び騒音検出を一体にし、RS 485バス通信の形態を通じて環境品質データの検出報告を実現する。回転留め具方式の吸頂取り付けを採用し、操作が簡単。
製品テクニカル指標
| 2.1検出パラメータと分解能 | |||
| センサデータ | 測定解像度 | 測定範囲の範囲 | 測定精度の測定 |
| CO2 eCO2 | 1ppm | 400 ~ 60,000ppm | ±30ppm |
| TVOC | 1ug/m3 | 0 ~ 60,000ug/m³ | ±50ug/m3 |
| ホルムアルデヒドCH2O | 1ug/m3 | 0 ~ 1,000ug/m³ | ±25% |
| PM2.5 | 1ug/m3 | 0 ~ 1,000ug/m³ | ±10% |
| PM10 | 1ug/m3 | 0 ~ 1,000ug/m³ | ±10% |
| PM1.0 | 1ug/m3 | 0 ~ 1,000ug/m³ | ±10% |
| 気温は | 0.01℃ | -40 ~ 85℃ | ±0.2℃ |
| 湿度は | 0.01% | 0 ~ 100% | ±1%RH |
| 気圧は | 1Pa | 30,000 ~ 110,000Pa | ±12Pa |
| 光の明るさ | 1Lux | 0 ~ 60,000Lux | ±5% |
| ノイズの種類 | 1dB | 30 ~ 90dB | ±3dB |
注:モジュール出力のCH2O値はTVOCと同等ですので、ご購入時にご注意ください。
2.2動作電圧:DC5V±0.2V @ 150mA
2.3作業環境:作業温度-10 ~ 60 ° C、作業湿度:5 ~ 95% RH(結露なし)
2.4通信の形態:Modbus-RTU 485インタフェース
2.5ウォームアップ時間:3分未満
半導体VOCセンサは理論的には通電時間が長いほど安定
2.6寿命:3年(空気中)
III.製品仕様
3.1外観サイズ図

I、標準4線式インタフェース II、2線+USB電源ポート
上図のように、本製品は“標準4線式インターフェイス”と“2線式+USB電源”の2種類の物理インターフェイスを提供します。購入時には、実際のニーズに応じて明記してください。
この製品はデフォルトで5 V DC電源を使用していますが、特殊な電圧(6 - 3 6 V)が必要な場合は、お問い合わせください。
3.2配線の定義
1)“標準4線式”インタフェースタイプ:
| シリアル番号。 | 名前は | 備考:コメント |
| RS485_A | イエロー YELLOW | RS485_A |
| RS485_B | 緑の緑 | RS485_B |
| DC+ | レッド·レッド | デフォルト5 V DC電源、特殊電圧はカスタマイズが必要 |
| GND | ブラック·ブラック | 接地線 |
2)“2 Wire + Power over USB”コネクタの種類:
| シリアル番号。 | 名前は | 参照してください。 |
| A | 赤A | RS485_A |
| B | 黒B | RS485_B |
| U | Micro USB | DC 5 V電源 |
注:上記の表の色は通常の指示であり、特定の配線は製品のラベルに従ってください。
RS 485通信プロトコル
4.1通信パラメータ
ModBus-RTU 485 パラメータ: 9600/8/N/1
工場出荷時の住所: 0x01
データを返す時間:100ms未満
4.2通信プロトコル
1) アドレス読み取りコマンド
方向:ユーザーアプリケーション-センサーモジュール;応答が必要:はい
リクエストメッセージ形式:
| バイト番号 | データは | 説明書は |
| 00xFE | 放送アドレス | |
| 1 | 0x11 | レポートスレーブアドレス機能コード |
| 2 | 0x00 | 固定された |
| 3 | 0x00 | 固定された |
| 4 | 0x00 | 固定された |
| 5 | 0x01 | 固定された |
| 67 | CRC_LCRC_H | CRCチェック |
応答メッセージの形式:
| バイト番号 | データは | 説明書は |
| 00x01 | スレーブのアドレス | |
| 1 | 0x11 | レポートスレーブアドレス機能コード |
| 2 | 0x02 | Bytesの数 |
| 3 | version | ファームウェアのバージョン |
| 4 | address | 現在の住所 |
| 56 | CRC_LCRC_H | CRCチェック |
例えば、コマンドを送信する: FE 11 00 00 00 01 28 06
データを返す:0 1 1 1 0 2 12 0 1 7 0 5 C
説明:0 x 12はバージョン番号V 1.2、0 x 01はデバイスアドレス01を表します。
2) 住所変更コマンド。モジュール出荷時のデフォルトアドレスは 0x01アドレス範囲は以下のように変更できます。 1~247
方向:ユーザーアプリケーション-センサーモジュール;応答が必要:はい
リクエストメッセージ形式:
| バイト番号 | データは | 説明書は |
| 0address | 現在の住所 | |
| 1 | 0x06 | 関数コードの特徴 |
| 2 | 0x00 | 固定された |
| 3 | 0x00 | 固定された |
| 4 | 0x00 | 予約済み。 |
| 5 | new address | 新しい住所。 |
| 67 | CRC_L CRC_H | CRCチェック |
応答メッセージの形式:
| バイト番号 | データは | 説明書は |
| 0address | 変更前の住所 | |
| 1 | 0x06 | 関数コードの特徴 |
| 2 | 0x00 | 固定された |
| 3 | 0x00 | 固定された |
| 4 | 0x00 | 予約済み。 |
| 5 | new address | 変更後の住所 |
| 67 | CRC_L CRC_H | CRCチェック |
例:現在のアドレスは0 x 0 1、デフォルトのアドレスは0 x 0 2です。
コマンドを送信する: 01 06 00 00 00 02 08 0B
データを返す:0 1 0 6 0 0 0 0 0 0 2 0 8 0B
現在のアドレスを:0 x 0 2から:0 x 0 1に戻す
コマンドを送信する: 02 06 00 00 00 01 48 39
データを返す:0 2 0 6 0 0 0 0 0 0 4 8 3 9
3) データの読み込みコマンド
方向:ユーザーアプリケーション-センサーモジュール;応答が必要:はい
リクエストメッセージ形式:
| バイト番号 | データは | 説明書は |
| 0address | 現在の住所 | |
| 1 | 0x03 | 関数コードの特徴 |
| 2 3 | 0x00 MM | レジスタ開始アドレス |
| 4 5 | 0x00 NN | 読み取る必要のあるセンサーの数 |
| 6 7 | CRC_L CRC_H | CRCチェック |
応答メッセージの形式:
| バイト番号 | データは | 説明書は |
| 0address | 現在の住所 | |
| 1 | 0x03 | 関数コードの特徴 |
| 2 | NN*2 | データ長さ |
| 3 | xx xx...... | センサデータ(空気圧4バイト、レジスタ2個、その他各センサデータ2バイト、レジスタ1 |
| 3+NN*2 4+NN*2 | CRC_L CRC_H | CRCチェック |
注:リターンセンサデータは、レジスタアドレスとデータ長によって変更できます。
レジスタアドレス(0 x 0 0 MM)と対応するセンサデータを以下に示します。空気圧は4バイト(2レジスタ)、残りの各センサデータは2バイト(1レジスタ)です。
| レジスター·アドレス | センサデータ | 占有レジスタ数 |
| 0x0000 | eCO2 | 1 |
| 0x0001 | TVOC | 1 |
| 0x0002 | CH2O | 1 |
| 0x0003 | PM2.5 | 1 |
| 0x0004 | 湿度は | 1 |
| 0x0005 | 気温は | 1 |
| 0x0006 | PM10 | 1 |
| 0x0007 | PM1.0 | 1 |
| 0x0008 | 照度Lux | 1 |
| 0x0009 | MCUの温度 | 1 |
| 0x000A | ノイズ(dB) | 1 |
| 0x000B | 気圧(Pa) | 2 |
コメント:
①センサ00NN最小は00 01、最大は00 0Bである。MM値が00の場合、NN値は最大0Bとなり、すべてのセンサの値を読み取ることができますが、NNが01の場合はeCO2のデータのみを読み取ることができますが、NNが02の場合はeCO2とTVOCの数を読み取ることができます。
例えば、このように。
レジスタの先頭のアドレスは、データ長を長くすると、背面のセンサのデータを読み取ることができますが、レジスタの後ろのアドレスは、このアドレスの前のセンサのデータを読み取ることはできません。
レジスタは2バイトのデータを格納し、空気圧は4バイト、2つのレジスタを占めているため、空気圧を読み取るときは連続した2つのレジスタを読み取り、他の各センサーデータは2バイト、1つのレジスタを占めています。
詳細は以下のとおり。
| 00MM00NN | 読み取ることができるデータ |
| 00000001 | アドレス0000から CO2データを読み出すことを示す |
| 00000002 | 開始アドレス0000から CO2,TVOCデータを読み出したことを示す |
| ...... | ...... |
| 0000000D | アドレス0000からCO2、TVOC、CH2O、PM2.5、湿を読み取ることを示す 度、温度、PM 10、PM 1.0、照度、MCU 温度、ノイズデータ、気圧 データは |
| 00010001 | アドレス0001からTVOCデータを読み出したことを示す |
| 00010002 | ホームアドレス0001からTVOC、CH2Oデータを読み出したことを示す |
| ...... | ...... |
| 00010007 | 住所0001からTVOC、CH2O、PM 2.5、湿度、温度を取ることを示す PM 10、PM 1.0データ |
| 0001000C | 住所0001からTVOC、CH2O、PM 2.5、湿度、温度を取ることを示す 度、PM10、PM1.0、照度、MCU 温度、ノイズデータ、気圧データ |
| 00020001 | 開始アドレス0002からCH2 Oデータを読み出したことを示す |
| 00020002 | アドレス0002からCH2O、PM2.5データを読み出すことを示す |
| ...... | ...... |
| 000B0001 | ホームアドレス000Bから気圧データを読み出したことを示す(2レジスタ) |
例えば、モジュールのアドレスは0 x 0 1です。
ユーザー送信: 01 03 00 00 00 09 85 CC 9つのセンサーデータを読み取ることができます。
ユーザー送信: 01 03 00 00 00 0B 04 0D 11個のセンサーデータ(MCU温度を含む)を読み取ることができます。
ユーザー送信: 01 03 00 00 00 0D84 0F 12個のセンサーデータ(気圧は2個のレジスタ)を読み取ることができます。
ユーザー送信: 01 03 00 0B 00 02 B5 C9 つまり、空気圧データのみを読み取ります(2つのレジスタを占有)。
4) 1フレームデータの読み取り
5返されるデータの形式は次のとおりです。
| バイト番号 | データは | 説明書は |
| 00x01 | メッセージヘッダー。 | |
| 1 | 0x03 | 関数コードの特徴 |
| 2 | 0x1A | データ長さ |
| 3 4 | CO2_H CO2_L | CO2データ |
| 5 6 | TVOC_H TVOC_L | TVOCデータ |
| 7 8 | CH2O_H CH2O_L | CH2Oデータ |
| 9 10 | PM2.5_H PM2.5 L | PM 2.5データ |
| 11 12 | Humi_H Humi_L | 湿度データ |
| 13 14 | Temp_H Temp_L | 温度データ |
| 15 16 | PM10_H PM10_L | PM 10データ |
| 17 18 | PM01_H PM01_L | PM 1.0データ |
| 19 20 | Lux_H Lux_L | [照度] Luxデータ |
| 21 22 | MCU_TEMP_H MCU_TEMP_L | MCU温度データ |
| 23 24 | dB_H dB_L | ノイズ(dB)データ |
| 25 26 27 28 | Pa_byte[3] Pa_byte[2] Pa_byte[1] Pa_byte[0] | 気圧データ(Pa) |
| 29 30 | CRC16_L CRC16_H | CRC16チェック |
6) システム·パラメータ構成
7)システムパラメータは、次の表のレジスタアドレスの読み書きによって取得または変更できます。
8) 注:この機能は高度な機能ですので、システムパラメータのエラー、センサ機能やデータ精度に影響を与えないように注意してください。
| レジスター·アドレス | 長さ(バイト) | システムパラメータ |
| 0x0100 | 4 | センサー設定ビットマップ |
| 0x0110 | 2 | バイト1(前面):外部温度センサーかどうか バイト2:センサーデータのユーザーキャリブレーションビットマップ、“センサーモジュールのビットマップ”を参照 |
| 0x0111 | 2 | バイト1(前面):専用シリアル画面のカスタムインジケータ項目に対応するセンサ番号 バイト2:照度センサの光透過率(0 ~ 100)、0はマスクがないこと、100は損失がないことを意味します。 |
| 0x0118 | 2 | CO2校正値、int16 |
| 0x0119 | 2 | TVOC校正値、int16 |
| 0x011A | 2 | CH2O校正値、int16 |
| 0x011B | 2 | PM 2.5校正値、int16 |
| 0x011C | 2 | 湿度校正値(100倍)、int16 |
| 0x011D | 2 | 温度校正値(100倍)、int16 |
| 0x011E | 2 | PM 10校正値、int16 |
| 0x011F | 2 | PM 1.0校正値、int16 |
| 0x0120 | 2 | 照度Lux較正値、int16 |
| 0x0121 | 2 | MCU温度較正値、int16 |
| 0x0122 | 2 | ノイズ(dB)較正値、int16 |
| 0x0123 | 2 | 大気圧の校正,int16 |
注意点:
すべてのユーザーキャリブレーション値は符号付き整数で、負の数は負のオフセットを表し、オフセットを減算します。
2.温度/湿度のユーザー校正値は摂氏100倍に拡大されます。例えば、250は2.5 ° Cを加算する必要があり、-110は摂氏1.1 ° Cを減算する必要があります。
例えば、モジュールのアドレスは0 x 0 1です。
ユーザー送信: 01 03 01 10 00 01 84 33 外部温度湿度センサマークとセンサデータユーザーキャリブレーションビットマップを読み取ります。ユーザー送信: 01 06 01 10 00 02 04 0D 温度と湿度ユーザー校正スイッチをオンにします。
ユーザー送信: 01 03 01 1D 00 01 15 F0 温度測定値の読み取り;
ユーザー送信: 01 06 01 1D 00 FA 98 73 温度ユーザー校正値250、両方+2.5度を設定します。ユーザー送信: 01 06 01 1D 80 6E F8 1C 温度ユーザー較正値-110、両方-1.1 度を設定します。
RS 485データを読み取るコンピュータ
“485 toシリアルポート”アダプタを使用すると、センサーモジュールをコンピュータに接続して通信を検出し、データを表示することができます。コンピュータ側では、ModBusテストツール(ShortBus Modbus Scannerなど)を使用して直接データを読み取ることができます。また、“シリアルポートアシスタント”などの標準シリアルツールを使用してクエリメッセージを送信してデータを取得することもできます。
V.各種センサデータ計算方式
. CO2 (ppm) = CO2_H * 256 + CO2_L
. TVOC (ug/m3) = TVOC_H * 256 + TVOC_L
. CH2O (ug/m3) = CH2O_H * 256 + CH2O_L
. PM2.5 (ug/m3) = PM2.5_H * 256 + PM2.5_L
. PM10 (ug/m3) = PM10_H * 256 + PM10_L
. PM1.0 (ug/m3) = PM01_H * 256 + PM01_L
.& nbsp;照度Lux = Lux_H * 256 + Lux_L
.& nbsp;ノイズ()=_H * 256 +_L
.&インターフェイスが返す温度と湿度(実際のデータの100倍):
.& nbsp;正の温度℃ = Temperature_H * 256 + Temperature_L/100、例T = 0 x 09d0/10 = 2512 /100 = 25.12℃
. 負の温度℃
方法 1:符号付きint型に直接変換します。例:T = 0 xfc 83/10 =-89 3/100 =-8.93 ° C
方法 2:0 x 7fffより大きい場合(32 7 6 7)
負のT =(0 xfc 83 - 65536)/10 =(64643 - 65536)/10 =-893 /100 =-8.93℃
.& nbsp;湿度%RH = Humidity_H * 256 + Humidity_L/100
.& nbsp;気圧()=_byte[3]* 224 +_byte[2]* 216 +_byte[1]* 28 +_byte[0]
.&気圧から高度を計算する
気圧の単位はPaであり、理論的には高度が9 m上昇するごとに100 Pa低下する。海面の標準大気圧は101,325 Paであるので、気圧値(Pa)から高度(Altitude)の近似値を次の式で計算することができる。
1、版高度の公式 = 101325/100 * 9
高度に加えて、気圧に影響を与える多くの要因(温度など)があり、以下の式は、特に高い海抜位置では比較的正確です。
2、校正版高度の公式 = 44330 *(1)(Pa/101325)0.1903)
例えば、測定された気圧が99,882 Paの場合、2つの式はそれぞれ高度を計算します。
.&高さ= 101325 99882/100 * 9 = 129.8 m
.&校正版高度 = 44330 * 1 99882/101325 0.1903 = 120.84 m
VI.注意事項
.&最初の電源使用には3分以上のウォームアップが必要です。
.&センサの設置場所は、地面よりも15 〜 20CM高くなければならない、そうでなければ、地面のほこり、浮遊フロックやその他の大きなほこり粒子、さらにはフロック汚染がある可能性があり、適切な前ろ過処理を採用する機器の使用をお勧めします。
.&この製品は精密機器ですので、ケースを開けないでください、通常の操作は機器の内部状況を理解する必要はありません。機器に損傷がある場合は、専門家による点検·修理が必要です。点検·修理前に外部接続電源が切れていることを確認してください。
.&センサーデータは、サードパーティ製の試験機器やデータを比較基準として使用せず、工場内の個人間の一貫性を確保します。ユーザーが最終測定結果と第三者の試験装置の一致を望む場合は、実際の収集結果に基づいてデータフィッティング校正を行うことができます。
.&本センサは、以下の実環境で使用されるユーザー機器などの一般的な屋内環境に適しており、過度の粉塵、油、水の流入によりデータの一貫性が低下する可能性があります。例:年間粉塵濃度が300マイクログラム/立方メートル以上の時間が50%以上、または500マイクログラム/立方メートル以上の時間が20%以上、煙環境、ウォーターミスト環境、屋外など。
VII.ザ·VII センサーモジュールのビットマップ
| ビット·ビット | センサモジュール |
| 0x01 | 光の明るさ |
| 0x02 | 温湿度気圧 |
| 0x04 | ダスト·ダスト |
| 0x08 | 空気の質 |
| 0x10 | ノイズの種類 |
VIII.。CRCチェックの計算方法
CRC コードと例は以下の通りです。 https://github.com/sunbaoshi1975/CRCTool
機能機能:CRCチェック機能、CRC生成
引数の説明:pushMsg:検証が必要な配列のセット
usDataLen:検証するデータの長さ
戻り値:CRCは符号なしint16型で、上位バイトは上位上位、下位バイトは下位
/*CRC verify high position*/
const 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 verify low position*/
const unsigned 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 };
/*CRC check*/
uint16_t CRC16_Check(const uint8_t *pushMsg, uint8_t usDataLen)
{
uint8_t uchCRCHi = 0xff;//high CRC init
uint8_t uchCRCLo = 0xff;//low CRC init
uint8_t uIndex; //CRC index in loop
while(usDataLen--) {
uIndex = uchCRCLo^ *pushMsg++;//cal CRC
uchCRCLo = uchCRCHi^ auchCRCHi[uIndex];
uchCRCHi = auchCRCLo[uIndex];
}
return((uint16_t)uchCRCHi << 8 | uchCRCLo);
}
发表回复