西门子PLC通讯故障检测程序(非心跳检测)

文章目录


前言

在之前的文章中,我们讨论了基于西门子博途编程平台的多种通讯协议的实现方法,以及通过心跳检测判断通讯是否故障的方法。

见文章:

  1. 《西门子博途基于Modbus通讯的变频器控制示例》
  2. 《十五、SCL核心应用课项目实战_1200PLC与串口设备自由通讯》
  3. 《S7-1200PLC通讯问题总结》
  4. 《西门子博途开放式用户通讯+仿真实现》
  5. 《一个检测主站与从站是否存在通讯故障的小技巧》

本文提出一种新型的通讯故障判断方法,该方法相较于心跳检测,具有更好的可读性和可维护性。


一、编写通讯程序

以某项目为例,该项目服务器PLC控制2号干法除尘系统,客户端PLC控制1号干法除尘系统,需要在服务器PLC中编写PUT和GET程序,以及通讯故障检测程序。

首先,在服务器PLC中创建用于存储发送给客户端PLC数据的DB块"2#干法除尘------>1#干法除尘通讯数据",以及用于存储接收客户端PLC数据的DB块"1#干法除尘------>2#干法除尘通讯数据"。

同理,在客户端PLC中创建用于存储发送给服务器PLC数据的DB块"1#干法除尘------>2#干法除尘通讯数据",以及用于存储接收服务器PLC数据的DB块"2#干法除尘------>1#干法除尘通讯数据"。

注意,客户端发送给服务器的DB块,以及服务器接收客户端的DB块中,应当建立一个INT类型变量,这里我们假设变量为"SpareInt0",该变量的作用之后说明。

最后编写PUT和GET程序,具体步骤可参考之前的文章,这里不再赘述。

二、编写通讯故障检测程序

1. 客户端程序编写

在客户端程序中,仅仅需要将之前建立的INT类型数据强制为0。

代码如下:

c 复制代码
"1#干法除尘------>2#干法除尘通讯数据".SpareInt[0] := 0;

2. 服务器程序编写

图1

程序分析:

该程序中"PULSE_DB".PULSE_1S,表示1S脉冲信号,即每秒钟将SpareInt0数据加1,当加到9999时自动清零,防止溢出;

由于在客户端程序中,始终将SpareInt0数据置0,所以如果通讯正常,该变量传递给服务器PLC时,即使每秒加1,在下一个扫描周期时,仍然变成0,即SpareInt0数据永远小于15,所以通讯故障信号不会触发;

当通讯故障时,SpareInt0数据将不受客户端PLC控制,而每秒加1,15秒后该变量数值会大于15,触发通讯故障信号。这里的15表示通讯故障延时判断,可根据实际自行更改。


总结

通过比较之前的心跳检测程序,可以看出,本文提出的通讯故障检测方法程序更加简洁,可读性更强。