高级工程师教你如何进行RS485中的crc效验,又能学一招

高级工程师教你如何进行RS485中的crc效验,又能学一招写了这么多了终于写到了校验可能大部分人都觉得校验是整个通讯过程中最复杂的一个环节。图3-1主程序图3-1图3-2子程序接口与本地数据定义图3-2图3-34、程序演示这里我们可以将PLC的计算结果,与专门计算crc的软件算出的数值进行比较。

大家好,欢迎来到IT知识分享网。

写了这么多了终于写到了校验可能大部分人都觉得校验是整个通讯过程中最复杂的一个环节。下面我就系统的给大家来介绍一下校验的整个过程。

1 .什么是校验

要搞懂校验的整个过程我们先来看看到底什么是校验,可能在我之前的文章中大家也发现了我所写过的程序没有一个和校验有关系,站点与站点之间数据的传递都是直接进行收发,而且也没有出现过任何问题,既然不写校验程序也能正常运行,那校验在我们的整个通讯过程中到底起着什么样的作用呢?

其实这里可能大家忽略了一个问题,我之前文章中所写的程序都是在实验环境中运行的,电脑与PLC之间的距离不超过2米,周围也没有会产生电磁干扰的用电设备,在这样理想的环境中,数据在传输过程中肯定不会发生任何变化,所以写不写校验程序都无所谓,但是在我们的工业现场环境就非常复杂甚至恶劣了,数据在传输过程中很可能由于外部复杂的环境发生变化,甚至是丢失,那么接收到的数据就不是对方发出的数据了,报文的内容就发生了变化,如果变化后的报文没有任何指令含义还好说,一旦变化后的报文的含义发生转变,比如本来主站发出的报文是控制A设备的,但是由于现场的干扰报文变成了控制B设备,那么就会在控制过程中出现误操作,这种情况虽然概率极低但是非常危险。因此我们需要对所有传输的数据进行校验以判断接收到的数据是否和对方发送的数据是一致的。

2. crc校验

下面我就向大家介绍一种工业控制中非常常用的一种校验算法crc校验,首先我用文字向大家描述一下crc校验算法的整个流程。

1) 向一个16位寄存器A装载16个1也就是16#FFFF

2) 取被校验串的第一个字节与16位寄存器A的高位字节进行“异或”运算,运算结果存回寄存器A。

3) 把寄存器A内的数据向右移动一位。

4) 若A寄存器中被移出的数是1,则用1010 0000 0000 0001(16#A001)和寄存器A进行”异或运算”,若寄存器中被移出的数是0则返回步骤3)

5) 重复步骤3)和4),直到移出8位数据为止。

6) 取被校验串的下一个字节

7) 重复步骤3)至6)直至被校验串所有字节均与寄存器A进行“异或”运算,并移位8次。

8) 最终A寄存器中的数值就是crc校验结果。

3. 程序编写

此处我先在S7-200PLC中给大家把上面的汉字版校验过程翻译成具体的程序,至于具体在整个通讯的过程中如何使用我们下一篇文章再具体讨论。

图 3-1主程序

高级工程师教你如何进行RS485中的crc效验,又能学一招

图 3-1

图 3-2子程序接口与本地数据定义

高级工程师教你如何进行RS485中的crc效验,又能学一招

图 3-2

高级工程师教你如何进行RS485中的crc效验,又能学一招

图 3-3

4、程序演示

这里我们可以将PLC的计算结果,与专门计算crc的软件算出的数值进行比较。

高级工程师教你如何进行RS485中的crc效验,又能学一招

图 4-1

高级工程师教你如何进行RS485中的crc效验,又能学一招

图 4-2

由图 4-1和图 4-2我们可以看出PLC计算出的结果没有任何错误,当然大家也可以自己去实验更多的数值来对本程序进行验证。

往期优秀文章回顾:

一场星三角降压故障引起的风波!讲述本电工的真实经历…

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/86520.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信