关于MODBUS协议的CRC校验

我的传感器是MODBUS协议,串口通信,我想自己编写一个上位机软件与之通信,请问大家我编写的软件只要按照MODBUS协议的命令格式发送数据就可以了是吧,接受的时候还用编CRC校验吗?不用CRC会有什么后果呢?是接收不到数据,还是有可能接收到是错误的呢?还是一般情况下没有什么影响呢?

1、上位机须按照MODBUS协议的命令格式发送数据(包括计算的CRC值),传感器才能正确辨识数据。若无CRC值,传感器将返回含有错误号的应答包,不会得到正确结果。

2、按照1的所做后,上位机能接收到传感器的数据。你可以不对接收的数据进行CRC校验,但这样不能辨识接收数据的准确性。
标准的做法,发送前计算CRC值并一起发送,接收后也计算CRC值并与接收的校验码对比是否相等,以辨别数据是否准确。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2020-01-24
按照标准协议编即可,但需要了解传感器相应的参数设置,波特率等参数。
接收的时候必须要CRC校验,否则你不知道你接收的数据是不是正确的数据,就要靠CRC校验来判断。
不用 的后果就是,你没办法处理数据了,不知道哪些是正确的数据~
综上,必须CRC校验~~追问

谢谢大家!!

第2个回答  2013-04-07
CRC校验 能保证接收数据的准确

发送前计算,一起发送
接收后也要计算,再与发送过来的 校验码 比对,前后不一致显然接收的数据有误

百度百科里有介绍的追问

谢谢大家!!

关于MODBUS协议的CRC校验
1、上位机须按照MODBUS协议的命令格式发送数据(包括计算的CRC值),传感器才能正确辨识数据。若无CRC值,传感器将返回含有错误号的应答包,不会得到正确结果。2、按照1的所做后,上位机能接收到传感器的数据。你可以不对接收的数据进行CRC校验,但这样不能辨识接收数据的准确性。标准的做法,发送前计算CRC...

求助关于modbus协议crc效验的问题。。。
你这个不是MODBUS协议的问题,而是对CRC校验的概念不明确,CRC是循环的,全称是循环冗余校验码。针对你的问题,我们举这样一个例子,我们约定校验方式为“累加和为零”,这个简单好理解。假设现在要发送N个字节的数据,累加和为0xAB,按字节累加,抛弃进位,校验字是这样得到的 0x00-0xAB=0x55,发送方...

modbus协议的CRC循环冗余校验位,校验的究竟是什么,是数据位吗
CRC叫做循环冗余校验,是检验发送数据是否正确的一种方法。比如你发过来的是0x010300000003这个数据,要是发送过程中出现了干扰,变成了其他数据比如0x010300000103,这样送到设备上会出问题的。所以MODBUS利用了一种方法,就是把每一个BYTE的数据和一个固定值(16位数值)进行一次运算(循环的,比如上面的数...

Modbus CRC校验算法
1. 计算法:\/\/ modbus计算16位crc uint16 calcrc16(uint8 *p, uint8 len)...2. 查表法:\/\/ 高CRC字节初始化...uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex];uchCRCLo = auchCRCLo[uIndex];3. 简单查表法2:const uint16 wCRCTalbeAbs[]...uint16 CRC16_2(uint8* pchMsg, ui...

modbus中如何计算CRC效验(人工计算)
在CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。CRC计算方法是:1、 加载一值为0XFFFF的16位寄存器,此寄存器为CRC寄存器。2、 把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC寄存器的相异或,异或的结果仍存放于该CRC寄存器中。3、...

modbus协议CRC校验计算方式?该怎么计算?
CRC在应用中有很多差异花的标准,数据传输有的高位在前,有的低位在前,所以算法有些差异,有左移位的有右移位的。适应不同的硬件处理器,除数有2位、8、12、16、32位,对应CRC8、CRC16、CRC32等。为了计算首尾的bit,所以协议规定了计算初始补0000或FFFF,通过大量计算,协议规定了优选的除数,就是...

非常急!请高人解答! 在MODBUS功能码测试中CRC校验是低字节在前还是高...
高字节在前,这个没有为什么的,只是一种规定,大家都这样认定在校验时就不会错,如果发送端是高字节在前,而收信端在校验时当做是低字节在前的话肯定得到校验错误的结果。

通讯协议里crc效验
您说的这是MODBUS通信的crc校验,校验码是前面的值经过对应的算法得出的数据。生成 CRC 的过程为:1. 将一个 16 位寄存器(称作 CRC 寄存器)初始赋值为十六进制 FFFF (全 1);2. 将报文的第一个字节( 8位)与 16 位 CRC 寄存器的低字节异或,结果置于 CRC 寄存器;3. 将 CRC ...

modbus. crc校验问题,请帮我具体计算下00和01分别的crc校验码是多少...
Modbus一般采用CRC16校验,特征多项式取0xA001。你可以用标准的CRC16算法代码,不过要更改特征多项式。所以一般大家都是用查表法处理Modbus的CRC校验部分的,反正也就512个字节。具体的代码你上网搜索“Modbus CRC16”,一抓一大把,我在这里就不贴了。十六进制数0x00的校验码为0x40BF,0x11的校验码为...

使用了modbus协议的程序,如何进行CRC校验
MODBUS采用CRC16校验,校验源程序网上很容易搜到。不管是MODBUS指令还是返回数据,最后两个字节都是CRC16校验码,将校验码前面的所有字节进行CRC16换算即可。

相似回答