CRC檢測
使用RTU模式,訊息包括了一基於CRC方法的錯誤檢測域。CRC域檢測了整個訊息的內容。
CRC域是兩個位元組,包含一16位的二進位制值。它由傳輸裝置計算後加入到訊息中。接收裝置重新計算收到
訊息的CRC,並與接收到的CRC域中的值比較,如果兩值不同,則有誤。
CRC是先調入一值是全“1”的16位暫存器,然後呼叫一過程將訊息中連續的8位位元組各當前暫存器中的值
進行處理。僅每個字元中的8Bit資料對CRC有效,起始位和停止位以及奇偶校驗位均無效。
CRC產生過程中,每個8位字元都單獨和暫存器內容相或(OR),結果向最低有效位方向移動,最高有效位
以0填充。LSB被提取出來檢測,如果LSB為1,暫存器單獨和預置的值或一下,如果LSB為0,則不進行。整個
過程要重複8次。在最後一位(第8位)完成後,下一個8位位元組又單獨和暫存器的當前值相或。最終暫存器中
的值,是訊息中所有的位元組都執行之後的CRC值。
CRC新增到訊息中時,低位元組先加入,然後高位元組。CRC簡單函式如下:
unsignedshortCRC16(puchMsg,usDataLen)
unsignedchar*puchMsg;/*要進行CRC校驗的訊息*/
unsignedshortusDataLen;/*訊息中位元組數*/
{
unsignedcharuchCRCHi=0xFF;/*高CRC位元組初始化*/
unsignedcharuchCRCLo=0xFF;/*低CRC位元組初始化*/
unsigneduIndex;/*CRC迴圈中的索引*/
while(usDataLen--)/*傳輸訊息緩衝區*/
uIndex=uchCRCHi^*puchMsgg++;/*計算CRC*/
uchCRCHi=uchCRCLo^auchCRCHi[uIndex};
uchCRCLo=auchCRCLo[uIndex];
}
return(uchCRCHi<<8|uchCRCLo);
CRC檢測
使用RTU模式,訊息包括了一基於CRC方法的錯誤檢測域。CRC域檢測了整個訊息的內容。
CRC域是兩個位元組,包含一16位的二進位制值。它由傳輸裝置計算後加入到訊息中。接收裝置重新計算收到
訊息的CRC,並與接收到的CRC域中的值比較,如果兩值不同,則有誤。
CRC是先調入一值是全“1”的16位暫存器,然後呼叫一過程將訊息中連續的8位位元組各當前暫存器中的值
進行處理。僅每個字元中的8Bit資料對CRC有效,起始位和停止位以及奇偶校驗位均無效。
CRC產生過程中,每個8位字元都單獨和暫存器內容相或(OR),結果向最低有效位方向移動,最高有效位
以0填充。LSB被提取出來檢測,如果LSB為1,暫存器單獨和預置的值或一下,如果LSB為0,則不進行。整個
過程要重複8次。在最後一位(第8位)完成後,下一個8位位元組又單獨和暫存器的當前值相或。最終暫存器中
的值,是訊息中所有的位元組都執行之後的CRC值。
CRC新增到訊息中時,低位元組先加入,然後高位元組。CRC簡單函式如下:
unsignedshortCRC16(puchMsg,usDataLen)
unsignedchar*puchMsg;/*要進行CRC校驗的訊息*/
unsignedshortusDataLen;/*訊息中位元組數*/
{
unsignedcharuchCRCHi=0xFF;/*高CRC位元組初始化*/
unsignedcharuchCRCLo=0xFF;/*低CRC位元組初始化*/
unsigneduIndex;/*CRC迴圈中的索引*/
while(usDataLen--)/*傳輸訊息緩衝區*/
{
uIndex=uchCRCHi^*puchMsgg++;/*計算CRC*/
uchCRCHi=uchCRCLo^auchCRCHi[uIndex};
uchCRCLo=auchCRCLo[uIndex];
}
return(uchCRCHi<<8|uchCRCLo);
}