|
这两天在一个项目上做前期调试的准备工作,这个项目上汇聚了两大品牌的plc共同协调作战。怎么判断他们之间的通讯是有效也成了这个项目的一个重点。以前处理西门子的通讯时,西门子中调用的通讯功能块通讯是否正常有明确的通讯成功与失败的状态位和通讯信息字,处理起来比较简单和直截了当。但处理另一品牌的通讯时也研究了它们通讯功能的附带信息,功能块说明上也有类似西门子的状态位、状态字功能效果,但实际测试下来通信成功与否、质量好坏与给出的信息可以说是一毛钱关系也没有。
如果不知道通讯实质状态那系统就等于盲开了,就算我再怎么马大虎这我心里也迈不过这道坎,要捕捉到真实状态并作出相应动作策略的。以前就这个问题也想过用什么心跳法来判断,但接触过的通讯都有现场状态可直接用就没深入思考。得,这次是绕不过去了。思考了好长时间终于定下一个套路:有读写关系的AB双方各分配一对读写专用心跳字或双字。在A一侧的机器里按一定的频率(要大于读写刷新频率的几倍)对其对应的心跳字进行脉冲自累加1并写入B,B再将收到的心跳数值直接回写写入A。同时在A里进行收到的和写入的进行比较或做减法取绝对值。比较的进行时间滤波判断,做减法取绝对值的进行范围判断,若通讯有效那两个数值应该相等或绝对值在一个很小的值,如果对方PLC停运或网络不通那数值就会不相等或绝对差值变的比较大。同样在B里也同等这样处理一道。试下来也达到了预期设想,各自可以分辨出自己对应的通信是否成功,不知真正实战下来怎么样。有些东西不去细想就不理解为什么要这样去做,随着这两年对通讯的倚重就会慢慢理解有些以前不怎么想明白的事情:如一般数字电路里为什么会要用到晶振,通讯为什么要进行校验。往往回过头看认为是老掉牙的资料也会有新的领悟,呵呵呵呵呵!不知道大家还有什么其他办法,如果万一这套机制不灵光还可以有个备用方案。
|
|