关于MODBUS校验计算的问题 点击:1158 | 回复:20



猎隼

    
  • 精华:1帖
  • 求助:1帖
  • 帖子:151帖 | 1661回
  • 年度积分:0
  • 历史总积分:8983
  • 注册:2005年9月28日
发表于:2008-12-02 14:02:16
楼主
请教一下MODBUS通讯协议的校验是用什么公式计算的?



猎隼

  • 精华:1帖
  • 求助:1帖
  • 帖子:151帖 | 1661回
  • 年度积分:0
  • 历史总积分:8983
  • 注册:2005年9月28日
发表于:2008-12-02 14:04:05
1楼

我想用普通的异或的算法计算,但发现这不是那么简单的公式,如果知道的网友希望告诉我一下.

蚂蚁牙黑

  • 精华:0帖
  • 求助:0帖
  • 帖子:22帖 | 174回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2008年4月01日
发表于:2008-12-04 13:36:29
2楼

有LRC校验,~有公式的,比较简单

CRC校验~没公式,要写程序,还比较长~

 

皓月

  • 精华:9帖
  • 求助:0帖
  • 帖子:483帖 | 5271回
  • 年度积分:0
  • 历史总积分:8863
  • 注册:2003年11月09日
发表于:2008-12-04 22:41:47
3楼

CRC校验可参照如下过程

猎隼

  • 精华:1帖
  • 求助:1帖
  • 帖子:151帖 | 1661回
  • 年度积分:0
  • 历史总积分:8983
  • 注册:2005年9月28日
发表于:2008-12-05 10:53:28
4楼
在校中有一个XOR A001 的步骤,只要右移的过程中,移出的只要是1就与A001进行异或计算,这个很不理解.

皓月

  • 精华:9帖
  • 求助:0帖
  • 帖子:483帖 | 5271回
  • 年度积分:0
  • 历史总积分:8863
  • 注册:2003年11月09日
发表于:2008-12-05 22:33:58
5楼
引用猎隼 的回复内容:在校中有一个XOR A001 的步骤,只要右移的过程中,移出的只要是1就与A001进行异或计算,这个很不理解.



这是CRC校验内部协约,无法改变

猎隼

  • 精华:1帖
  • 求助:1帖
  • 帖子:151帖 | 1661回
  • 年度积分:0
  • 历史总积分:8983
  • 注册:2005年9月28日
发表于:2008-12-06 08:49:19
6楼

再问一下皓月,是不是所有的MODBUS协议都遵守这个CRC校验内部协约吧?

皓月

  • 精华:9帖
  • 求助:0帖
  • 帖子:483帖 | 5271回
  • 年度积分:0
  • 历史总积分:8863
  • 注册:2003年11月09日
发表于:2008-12-06 22:36:11
7楼
modbus一般分为两种,即RTU与ASCII两种模式,而且这两种模式的校验方式也不同

wuxinihui

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 980回
  • 年度积分:0
  • 历史总积分:1523
  • 注册:2008年11月20日
发表于:2008-12-07 10:36:58
8楼
引用皓月 的回复内容:

CRC校验可参照如下过程





呵呵  好的  学习一下

猎隼

  • 精华:1帖
  • 求助:1帖
  • 帖子:151帖 | 1661回
  • 年度积分:0
  • 历史总积分:8983
  • 注册:2005年9月28日
发表于:2008-12-07 13:37:12
9楼

皓月朋友,我的MODBUS使用的是RTU的,如果使用RTU的MODBUS都相同的话,那我想实现的触摸屏与变频器通讯的项目就一定会成功的.

猎隼

  • 精华:1帖
  • 求助:1帖
  • 帖子:151帖 | 1661回
  • 年度积分:0
  • 历史总积分:8983
  • 注册:2005年9月28日
发表于:2008-12-07 13:40:39
10楼

wuxinihui朋友如果在校验中最后一个参数的最后8位右移出的值是1,那还与那个固定的值"A001"进行异或操作吗?

皓月

  • 精华:9帖
  • 求助:0帖
  • 帖子:483帖 | 5271回
  • 年度积分:0
  • 历史总积分:8863
  • 注册:2003年11月09日
发表于:2008-12-07 21:32:26
11楼
引用猎隼 的回复内容:

wuxinihui朋友如果在校验中最后一个参数的最后8位右移出的值是1,那还与那个固定的值"0A01"进行异或操作吗?




符合校验的都需要

蚂蚁牙黑

  • 精华:0帖
  • 求助:0帖
  • 帖子:22帖 | 174回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2008年4月01日
发表于:2008-12-08 15:31:28
12楼

楼主,你不用研究Crc具体是怎么算的~~~好多PLC都有内置~~~自动计算CRC程序的模块的

猎隼

  • 精华:1帖
  • 求助:1帖
  • 帖子:151帖 | 1661回
  • 年度积分:0
  • 历史总积分:8983
  • 注册:2005年9月28日
发表于:2008-12-09 08:29:31
13楼
是呀,我也不想研究它,可是我目前要模拟它向上位机返回参数值,因为我的下位机(变频器)还没有接电,我想试验一下,上位机是否会识别下位机发来的信息.

二十四桥明月夜

  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2008-12-09 08:41:56
14楼

我上次贴过多次:很简单的,但很难理解.

 

猎隼

  • 精华:1帖
  • 求助:1帖
  • 帖子:151帖 | 1661回
  • 年度积分:0
  • 历史总积分:8983
  • 注册:2005年9月28日
发表于:2008-12-09 14:31:39
15楼
确实是呀,我也摸不着头脑.

皓月

  • 精华:9帖
  • 求助:0帖
  • 帖子:483帖 | 5271回
  • 年度积分:0
  • 历史总积分:8863
  • 注册:2003年11月09日
发表于:2008-12-09 22:25:30
16楼

应该不难理解,只是一个r冗余循环校验而已

猎隼

  • 精华:1帖
  • 求助:1帖
  • 帖子:151帖 | 1661回
  • 年度积分:0
  • 历史总积分:8983
  • 注册:2005年9月28日
发表于:2008-12-10 08:55:10
17楼
谁有用于这个冗余校验值计算的程序提供一下呗.

tomyi

  • 精华:0帖
  • 求助:1帖
  • 帖子:21帖 | 233回
  • 年度积分:0
  • 历史总积分:598
  • 注册:2002年10月30日
发表于:2008-12-16 15:00:31
18楼

照着协议看看吧,没有那么复杂。

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//名称: CRC16------循环容余校验
//----------------------------------------------------
//参数: unsigned car *pucChar-------------接收到的字符
//----------------------------------------------------
//功能: 循环容余校验
//----------------------------------------------------
//返回值:
// 校验码
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
unsigned short CRC16(const unsigned car* pucChar, unsigned int unLen)
{
unsigned short usItem=0xA001;
unsigned short usCRCReg=0xFFFF;
unsigned car ucChar;
for(unsigned int i=0;i<unLen;i++)
{
ucChar=*(pucChar+i);
usCRCReg^=ucChar;
for(int j=0;j<8;j++)
{
bool bLSB=((usCRCReg & 0x0001)== 0x0001);
usCRCReg=usCRCReg>>1;
if(bLSB)
{
usCRCReg^=usItem;
}
}
}
return usCRCReg;

}

猎隼

  • 精华:1帖
  • 求助:1帖
  • 帖子:151帖 | 1661回
  • 年度积分:0
  • 历史总积分:8983
  • 注册:2005年9月28日
发表于:2008-12-16 18:54:40
19楼

得好好研究研究楼上的程序代码.

笨笨猫

  • 精华:1帖
  • 求助:3帖
  • 帖子:70帖 | 1517回
  • 年度积分:0
  • 历史总积分:2257
  • 注册:2008年6月15日
发表于:2009-01-07 22:53:52
20楼

讲的都不错,收藏了,今天学习了不少东西,呵呵,高手就是多啊!


热门招聘
相关主题

官方公众号

智造工程师