文章目录
- 前言
- 一、编写通讯程序
- 二、编写通讯故障检测程序
-
- [1. 客户端程序编写](#1. 客户端程序编写)
- [2. 服务器程序编写](#2. 服务器程序编写)
- 总结
前言
在之前的文章中,我们讨论了基于西门子博途编程平台的多种通讯协议的实现方法,以及通过心跳检测判断通讯是否故障的方法。
见文章:
- 《西门子博途基于Modbus通讯的变频器控制示例》;
- 《十五、SCL核心应用课项目实战_1200PLC与串口设备自由通讯》;
- 《S7-1200PLC通讯问题总结》;
- 《西门子博途开放式用户通讯+仿真实现》;
- 《一个检测主站与从站是否存在通讯故障的小技巧》。
本文提出一种新型的通讯故障判断方法,该方法相较于心跳检测,具有更好的可读性和可维护性。
一、编写通讯程序
以某项目为例,该项目服务器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表示通讯故障延时判断,可根据实际自行更改。
总结
通过比较之前的心跳检测程序,可以看出,本文提出的通讯故障检测方法程序更加简洁,可读性更强。