您现在所在的是:

三菱Mitsubishi

回帖:7个,阅读:5115 [上一页] [1] [下一页]
451
hello8879
文章数:17
年度积分:50
历史总积分:451
注册时间:2017/6/11
发站内信
发表于:2017/6/16 21:36:37
#0楼
小弟根据网络资料写了一个fx2n 与安川 v7的485通讯控制程序,已测试可以正常运行停止,图片上是运行停止时候的监控数据,但是对这个程序原理还不太懂,不知道这个上下位的CRC校验码是由哪几个数计算出来的,用什么方式计算的,自己用crc计数器算得对不上
1分悬赏
451
hello8879
文章数:17
年度积分:50
历史总积分:451
注册时间:2017/6/11
发站内信
发表于:2017/6/16 21:38:07
#1楼
附件 启动停止.jpg
19263
pqsh 版主
文章数:7424
年度积分:1093
历史总积分:19263
注册时间:2006/8/22
发站内信
2018论坛解答高手
发表于:2017/6/17 6:44:56
#2楼
你这个近似modbus.最后那列是异常.
如果和你用CRC计算的不一样,可以参考modicon.com的modbus协议文本,里面有专门的CRC计算方法.
但是,很多机器CRC会自动计算,不用关心.
如果我忘了我
请帮忙记得我
pqsh@163,326199298@v&q同号
3412
ymxu
文章数:329
年度积分:50
历史总积分:3412
注册时间:2015/4/17
发站内信
发表于:2017/6/17 6:52:48
#3楼
从地址码到最后一个数据码中间的所有数据
此帖发自手机工控论坛
37243
cvlsam 版主
文章数:12401
年度积分:1595
历史总积分:37243
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2017/6/17 6:57:13
#4楼
以下是引用hello88792017/6/16 21:38:07的发言:
附件 启动停止.jpg

以指令内容为例:计算从驱动器地址到发后记录中的字节。

计算方法如下:
CRC 的计算, 开始对一个16 位寄存器预装全1。然后将报文中的连续的8 位子节对其进行后
续的计算。只有字符中的8个数据位参与生成CRC 的运算,起始位,停止位和校验位不参与CRC
计算。
CRC 的生成过程中, 每个 8–位字符与寄存器中的值异或。然后结果向最低有效位(LSB)方向
移动(Shift) 1位,而最高有效位(MSB)位置充零。然后提取并检查LSB:如果LSB 为1, 则寄存
器中的值与一个固定的预置值异或;如果LSB 为 0, 则不进行异或操作。
这个过程将重复直到执行完8 次移位。完成最后一次(第8 次)移位及相关操作后,下一个8
位字节与寄存器的当前值异或,然后又同上面描述过的一样重复8 次。当所有报文中子节都运算之
后得到的寄存器的最终值,就是CRC。
流程如下:


附件 snap1.jpg

手工计算你可以参照下面的图示,估计你要算到昏过去,用ExecL方式来手工计算比你用纸笔的效率高。




附件 snap2.jpg

最后,上面讨论的仅仅是常用的基于ModbusRTU下CRC-16的讨论,鉴于CRC校验方式种类较多,以及ModbusASC方式下的LRC校验方式,如果你有不同的见解,也可以开新帖讨论。

Good Luck~
7662
jiouai84
文章数:655
年度积分:50
历史总积分:7662
注册时间:2013/1/7
发站内信
发表于:2017/6/17 8:50:27
#5楼
三菱的3u开始是不是就有crc指令了,2n的话用子程序写个crc校验程序,然后调用李金城老师的书上有实例。
此帖发自论坛手机版
451
hello8879
文章数:17
年度积分:50
历史总积分:451
注册时间:2017/6/11
发站内信
发表于:2017/6/17 10:43:39
#6楼
这个CRC校验码分上位和下位,都是16位的,也就是说发送的这13个数据中包含2个16位的校验码,想知道每个校验码是由哪几个数计算来的,单个的数据计算crc我知道,可是这里出现了2个高低位,头晕了
附件 000.jpg
37243
cvlsam 版主
文章数:12401
年度积分:1595
历史总积分:37243
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2017/6/17 12:30:30
#7楼
以下是引用hello88792017/6/17 10:43:39的发言:
这个CRC校验码分上位和下位,都是16位的,也就是说发送的这13个数据中包含2个16位的校验码,想知道每个校验码是由哪几个数计算来的,单个的数据计算crc我知道,可是这里出现了2个高低位,头晕了
附件 000.jpg


其实CRC的校验的基本单位是位,是按位异或校验,上面流程图已经明确了,一个字节一个字节,每个字节校验8次,每个位都校验,所以你不需要去纠结如何计算的。

如果你一定要纠结如何计算的,那么去花点时间阅读一下我贴出的图片以及手工校验一下。

不过我觉得你基础还不够扎实,这样也搞不清通讯的计算过程。

Good Luck~

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004