LRC和CRC这两种校验码要怎样算 点击:10709 | 回复:18



thatis19

    
  • 精华:3帖
  • 求助:1帖
  • 帖子:78帖 | 213回
  • 年度积分:0
  • 历史总积分:1758
  • 注册:2008年11月02日
发表于:2009-08-18 11:54:41
楼主

各位高手MODBUS协议中计算LRC校验码是从:地址到LRC低字节结束?还是从地址到数据位结束?

CRC校验码的计算是从:地址到CRC低字节结束?还是从地址到数据位结束? 下图是MODBUS的通讯协议





保留字符

  • 精华:0帖
  • 求助:0帖
  • 帖子:14帖 | 166回
  • 年度积分:0
  • 历史总积分:163
  • 注册:2008年8月02日
发表于:2009-08-18 17:46:14
1楼

我有程序例子,用PLC实现,需要的留下邮箱!

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2009-08-18 19:25:33
2楼

"CRC校验码的计算是从:地址到CRC低字节结束?".错误!这样理解就大错特错了,一般不论是那种校验,它发送数据帧最后一个字节或位

是校验结果,它本身不参与校验,就是前面数据的校验结果,CRC 应该是校验字!

LRC 就是被校验数据的累加和!是Modbus ASCII 协议的校验方式;上面的结束符就是 "\r\n" (回车+换行ASCII码)

Modbus RTU 协议采用 CRC校验!但注意校验字的高低字节次序!

仔细看看说明资料吧!

yjig

  • 精华:2帖
  • 求助:5帖
  • 帖子:97帖 | 5237回
  • 年度积分:0
  • 历史总积分:12514
  • 注册:2004年6月04日
发表于:2009-08-18 20:01:16
3楼
英文缩写: CRC (Cyclic Redundancy Check)
冗余循环码(CRC)包含2个字节,即16位二进制。CRC码由发送设备计算,放置于发送信息的尾部。接收信息的设备再重新计算接收到信息的 CRC码,比较计算得到的CRC码是否与接收到的相符,如果两者不相符,则表明出错。
CRC码的计算方法是,先预置16位寄存器全为1。再逐步把每8位数据信息进行处理。在进行CRC码计算时只用8位数据位,起始位及停止位,如有奇偶校验位的话也包括奇偶校验位,都不参与CRC码计算。
在计算CRC码时,8位数据与寄存器的数据相异或,得到的结果向低位移一字节,用0填补最高位。再检查最低位,如果最低位为1,把寄存器的内容与预置数相异或,如果最低位为0,不进行异或运算。
这个过程一直重复8次。第8次移位后,下一个8位再与现在寄存器的内容相相异或,这个过程与以上一样重复8次。当所有的数据信息处理完后,最后寄存器的内容即为CRC码值。CRC码中的数据发送、接收时低字节在前。
计算CRC码的步骤为:
1、预置16位寄存器为十六进制FFFF(即全为1)。称此寄存器为CRC寄存器;
2、把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器;
3、把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位;
4、如果最低位为0:重复第3步(再次移位); 如果最低位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;
5、重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;
重复步骤2到步骤5,进行下一个8位数据的处理;
最后得到的CRC寄存器即为CRC码。

yjig

  • 精华:2帖
  • 求助:5帖
  • 帖子:97帖 | 5237回
  • 年度积分:0
  • 历史总积分:12514
  • 注册:2004年6月04日
发表于:2009-08-18 20:21:47
4楼

LRC(longitudinal redundancy check) 纵向冗余(码)校验

以下引自台达说明书:

huangjia

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 110回
  • 年度积分:0
  • 历史总积分:37
  • 注册:2008年6月16日
发表于:2009-08-19 07:52:30
5楼

由于计算过程比较复杂。建议用带CRC功能PLC.不是的话最小要300几步。

thatis19

  • 精华:3帖
  • 求助:1帖
  • 帖子:78帖 | 213回
  • 年度积分:0
  • 历史总积分:1758
  • 注册:2008年11月02日
发表于:2009-08-19 10:14:56
6楼
谢谢各位的指点。thatis19@163.com

vholdohr

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:11
  • 注册:2009年9月04日
发表于:2011-01-18 21:24:35
7楼

你好!

       我需要程序例子,用PLC实现,我的邮箱vholdohr@126.com

谢谢!

duwenbo7788

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 57回
  • 年度积分:0
  • 历史总积分:185
  • 注册:2010年9月14日
发表于:2011-01-19 11:14:38
8楼

很麻烦 、    还是用设备自带的比较好

老菜鸟

  • 精华:22帖
  • 求助:0帖
  • 帖子:301帖 | 8609回
  • 年度积分:0
  • 历史总积分:24924
  • 注册:2003年6月15日
发表于:2011-01-19 11:36:32
9楼
我专门发得有一个帖子,将各种校验码的,有兴趣的话你可以看看。

eagertoma

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 122回
  • 年度积分:0
  • 历史总积分:146
  • 注册:2008年10月19日
发表于:2011-01-30 10:21:32
10楼

我有例程,需要的话留个邮箱

liutao990542662

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:33
  • 注册:2011年1月11日
发表于:2011-05-11 09:48:12
11楼
我的邮箱,1070138325@qq.COM。谢谢啦,以后多联系。

wangchaobq

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 71回
  • 年度积分:0
  • 历史总积分:625
  • 注册:2011年1月22日
发表于:2011-05-11 10:08:42
12楼
俺有CRC校验C的程序,没有梯形图的程序……

xiake720

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:33
  • 注册:2011年7月11日
发表于:2011-07-11 11:13:32
13楼

我也想要程序,,

我的邮箱:xiake720@sina.com

谢谢了。

ihearyouok

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 105回
  • 年度积分:0
  • 历史总积分:320
  • 注册:2002年7月22日
发表于:2011-07-11 16:14:43
14楼
我用过的子程序发上来大家参考一下

dongfengname

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 48回
  • 年度积分:0
  • 历史总积分:435
  • 注册:2010年12月13日
发表于:2011-08-04 21:57:50
15楼

DDDDDdddddddddd

 

zhanziling

  • 精华:0帖
  • 求助:13帖
  • 帖子:37帖 | 1242回
  • 年度积分:0
  • 历史总积分:6032
  • 注册:2009年4月06日
发表于:2011-08-16 09:21:27
16楼

学习一下!

 

ecustliuhai

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:11
  • 注册:2011年11月24日
发表于:2011-11-24 09:40:29
17楼
我的邮箱ecustliuhai@126.com,各位大侠请行行好~

chizedan

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 26回
  • 年度积分:0
  • 历史总积分:103
  • 注册:2017年4月11日
发表于:2017-05-05 15:57:53
18楼

回复内容:

对:保留字符 我有程序例子,用PLC实现,需要的留下邮箱!     内容的回复:

你好师傅,我需要发给我好吗?


热门招聘
相关主题

官方公众号

智造工程师