6ES7522-1BP00-0AA0数字量输出模块西门子PLC模块代理商
DQ 64:数字量输出模块,源型, 晶体管 DQ 64 x 24 VDC/ 0.5A BA,35mm模块,不含前连接器,需要配合Topconnector使用
6ES75221BP000AA0
6ES75221BP000AA0
要搞懂校验的整个过程我们先来看看到底什么是校验,可能在我之前的文章中大家也发现了我所写过的程序没有一个和校验有关系,站点与站点之间数据的传递都是直接进行收发,也没有出现过任何问题,既然不写校验程序也能正常运行,那校验在我们的整个通讯过程中到底起着什么样的作用呢?
其实这里可能大家忽略了一个问题,我之前文章中所写的程序都是在实验环境中运行的,电脑与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 00000001(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计算出的结果没有任何错误,当然大家也可以自己去实验更多的数值来对本程序进行验证。
西门子PLC授权代理商,西门子PLC代理商,西门子PLC分销商,西门子CPU代理商,西门子CPU一级代理商,西门子CPU总代理商,西门子CPU模块代理商,CPU代理商,西门子电缆代理商,西门子电缆一级代理商,西门子电缆总代理商,西门子电缆授权代理商,西门子电缆分销商,西门子电缆代理商,
6ES7522-1BP00-0AA0数字量输出模块西门子PLC模块代理商西门子触摸屏代理商西门子电源模块代理商西门子变频器代理商西门子电源模块代理商西门子编程控制器代理商西门子CPU模块代理商西门子电缆代理商