crc16源碼
發布時間: 2024-06-21 19:06:08
① 工程上用到了MODBUS tcp 通訊,原來用過MODBUS RTU的協議,不知道他們的主要區別,或者誰有相應的源代碼
Modbus rtu和Modbus tcp兩個協議的本質都是MODBUS協議,都是靠MODBUS寄存器地址來交換數據;
但所用的硬體介面不一樣,Modbus
RTU一般採用串口RS232C或RS485/422,而Modbus TCP一般採用乙太網口。
現在市場上有很多協議轉換器,可以輕松的將這些不同的協議相互轉換 如:Intesisbox可以把modbus rtu轉換成Modbus
tcp實際上Modbus協議包括ASCII、RTU、TCP。
標準的Modicon控制器使用RS232C實現串列的Modbus。Modbus的ASCII、RTU協議規定了消息、數據的結構、命令和就答的方式,數據通訊採用Maser/Slave方式。
Modbus協議需要對數據進行校驗,串列協議中除有奇偶校驗外,ASCII模式採用LRC校驗,RTU模式採用16位CRC校驗.
ModbusTCP模式沒有額外規定校驗,因為TCP協議是一個面向連接的可靠協議。
TCP和RTU協議非常類似,只要把RTU協議的兩個位元組的校驗碼去掉,然後在RTU協議的開始加上5個0和一個6並通過TCP/IP網路協議發送出去即可。
② 求一個CRC校驗C++源代碼。題目:發送數據為1101011011,生成的多項式為P(X)=X4+X+1(X4為X的4次方),
下面的代碼輸入為原數據和多項式對就的二進制碼,輸出為產生的校驗碼。
如原數據是1101011011,多項式是X^4+X+1(即10011)。產生的校驗碼為1110。
輸入110101101110011
輸出1110
#include<iostream>
#include<cstring>
#include<iomanip>
usingnamespacestd;
#defineWORDSIZE255
intgetNum(chara[],intn);
voidshowNum(intr,intn);
intmain(intargc,char*argv[])
{
cout<<"pleaseinputXandP:"<<endl;
intx,p,lenA,lenP;
chara[WORDSIZE];
memset(a,'