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主程序
图 3-1
图 3-2子程序接口与本地数据定义
图 3-2
图 3-3
4、程序演示
这里我们可以将PLC的打算结果,与专门打算crc的软件算出的数值进行比较。
图 4-1
图 4-2
由图 4-1和图 4-2我们可以看出PLC打算出的结果没有任何缺点,当然大家也可以自己去实验更多的数值来对本程序进行验证。
往期精良文章回顾:
一场星三角降压故障引起的风波!
讲述本电工的真实经历...