污染物在線自動監控(監測)系統數據傳輸標准 (HJ212-2017)-CRC數據校驗


污染物在線監控(監測)系統數據傳輸標准2017版發布后,2005版失效。

由於公司業務需要,作為公司物聯網監測雲平台,底層數據解析的一部分,研究此標准。(公司使用簡版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++) 
{ 
 check = crc_reg & 0x0001; 
 crc_reg >>= 1; 
 if(check==0x0001) 
{ 
 crc_reg ^= 0xA001; 
 } 
 } 
} 
return crc_reg; 
} 

Java代碼實現:

public static int getCRC(String data212) {
        int CRC = 0xFFFF;
        int num = 0xA001;
        int inum = 0;
        byte[] 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 flag = CRC % 2;
                CRC = CRC >> 1;
            
                if(flag == 1) {
                    CRC = CRC ^ num;
                }
            }
        }
        return 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版協議文檔,原文檔此處有一處錯誤,此處已糾正)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM