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,'