前言
本文提供了一个西门子PLC与远程设备建立通讯后,检测通讯故障的程序思路。
关于通讯程序的编写,请参考文章:
S7-1200PLC通讯问题总结
这里不再赘述。
一、从站程序编写
在从站PLC中编写如下程序:
其中,“PULSE_1HZ"表示1HZ的脉冲信号;
“DB40_ParaSet”.OSR[8]用来存储上一次查询的 RLO 的边沿存储位;
“DB3_S7-Communicate_BOF”.VAP_TRIGGER随着脉冲信号的触发,依次加一,1~9999循环。
通过通讯程序,将"DB3_S7-Communicate_BOF”.VAP_TRIGGER的数据,传递给主站PLC。
二、主站程序编写
在主站PLC中编写如下程序:
其中,"PULSE_05HZ"表示5HZ脉冲信号;
“DB10_SYS_SIG”.BOF_TRIGGER_PRE用来存储上一个扫描周期的“3#汽化心跳”数据。
分析:
1.当通讯正常时,“3#汽化心跳”一秒递增一次,每0.2秒将数据传递给"DB10_SYS_SIG".BOF_TRIGGER_PRE,在0.2秒的扫描周期内,“3#汽化心跳”的数据和"DB10_SYS_SIG".BOF_TRIGGER_PRE的数据是相等的,由于"DB4_IEC_Timer".T80是10秒的接通延迟定时器,在0.2秒内不会接通,所以通讯正常时不会触发“与本体通讯故障”信号,如图1;
2.但在下一个扫描周期,“3#汽化心跳”已经完成了递增,还未传递给"DB10_SYS_SIG".BOF_TRIGGER_PRE,此时它两个存储的数据相差1,如图2;
3.当通讯出现故障时,“3#汽化心跳”内存储的是上一个扫描周期的数据,不会继续递增,此时,“3#汽化心跳”和"DB10_SYS_SIG".BOF_TRIGGER_PRE内存储的数据相等,“DB4_IEC_Timer”.T80开始计时,若通讯故障超过10秒,则"DB4_IEC_Timer".T80接通,触发“与本体通讯故障”信号,如图3。
图1
图2
图3
总结
判断通讯故障的方法有很多,本文旨在提供一个解决思路。