汚染物質オンライン自動監視(監視)システムデータ伝送規格(HJ212-2017)-CRCデータ検証(C/Javaソースコード)

転載元: https: //www.cnblogs.com/LiuSiyuan/p/8110192.html汚染物質オンライン自動監視(監視)システムデータ伝送標準(HJ212-2017)-CRCデータ検証

2017年版の汚染物質オンラインモニタリング(監視)システムのデータ伝送規格が公開された後、2005年版は無効になりました。

同社のビジネス ニーズにより、この標準は、同社の IoT 監視クラウド プラットフォームの基礎となるデータ分析の一部として検討されています。(同社は 212 プロトコルの単純化されたバージョンを使用していますが、これは非常に単純すぎます)

CRC チェック部分:

Cコード

unsigned int CRC16_Checkout ( unsigned char *puchMsg, unsigned int usDataLen ) 
{ 
unsigned int i,j,crc_reg,check; 
crc_reg = 0xFFFF; 
for(i=0;i<usDataLen;i++) 
{ 
crc_reg = (crc_reg>>8) ^ puchMsg[i]; 
 for(j=0;j<8;j++) 
{
 チェック = crc_reg & 0x0001; 
 crc_reg >>= 1; 
 if(check==0x0001) 
{ 
 crc_reg ^= 0xA001; 
 } 
 } 
} 
crc_reg を返します。
}

Java コードの実装:

public static int getCRC(String data212) { 
        int CRC = 0xFFFF; 
        int num = 0xA001; 
        int inum = 0; 
        バイト[] sb = data212.getBytes(); 
        for(int j = 0; j < sb.length; j ++) { 
            inum = sb[j]; 
            CRC = (CRC >> 8) & 0x00FF; 
            CRC ^= inum; 
            for(int k = 0; k < 8; k++) { 
                int フラグ = CRC % 2; 
                CRC = CRC >> 1; 
            
                if(flag == 1) { 
                    CRC = CRC ^ num; 
                } 
            } 
        } 
        CRCを返します。
    }

最後に、必要なのは 16 進数の結果である Integer.toHexString() であることを忘れないでください。

セクションを確認してください:

例:
##0101QN=20160801085857223;ST=32;CN=1062;PW=100000;MN=010000A8900016F000169DC0;Flag=5 ;CP=&&RtdInterval=30 &&1C80\r\n、1C80 は CRC16 チェックコードです。
データセグメント QN=20160801085857223;
ST=32;CN=1062;PW=100000;MN=010000A8900016F000169DC0;Flag=5;CP=&&RtdInterval=30&& CRC16 チェックで得られたチェックコード (プロトコル文書の 2017 バージョン、オリジナルから取得
)ここにドキュメントがあり、ここにエラーがあり、ここに修正されています)

 '=============================================== =====

ps: 元のエラーは次のとおりです。

 実際:1C80

おすすめ

転載: blog.csdn.net/jessezappy/article/details/125092027
おすすめ