如何判断 S7 通信中断
方法一:通过与通信伙伴方创建的心跳信号判断
本测试为:一台 200 SMART(CPU1)和 2 台 200 SMART(CPU2 和 CPU3)做 Get/Put 通信。 在 Get/Put 向导中填写好类型、传送大小和远程 CPU 的 IP 地址,测试程序中本地和远程 CPU 对应的地址为:
图 1. 本地和远程对应地址
向导配置完成后,在 CPU1 程序中用 sm0.5 的一个秒脉冲赋值给 v100.0,做一个心跳信号。
图 2. 心跳信号
在伙伴方 CPU2 和 CPU3 中监控 V0.0,当通信建立后 V0.0 应为 0\1 不停切换,当某一个 CPU 中的 V0.0 一直为1或者一直为 0 时,表明该 CPU 与本地 CPU1 的通信中断。
方式二:通过 Get/Put 向导中的状态字判断
Get/Put 向导创建的每一个操作都会有状态字。点击左侧项目树程序块---向导中 NET_EXE,可以看到每个操作对应的状态字,本测试程序中 CPU2 的 PUT 对应的状态字为 VB340,CPU3 的 PUT 对应的状态字为 VB380。
图 3. 状态字
在状态图表中监控 VB340 和 VB380,格式选择二进制,状态字 VB340 和 VB380 的第 6 位(通信已经激活标志位)正常情况下是 0 1不断变换,当某一个远程通信伙伴方线路断开后,该位会一直保持为 1。
如何获取 S7 通信的错误代码
接着上文中“方式二”的测试,状态字的低 4 位为错误代码,通过判断错误代码来判断通信是否已经中断,这里需要特别注意,当通信伙伴线路断开时,本地 CPU 并没立马收到错误代码,需在 RUN---STOP—RUN 切换后才能收到错误代码。错误代码(错误代码 5)只会存在一个扫描周期,所以需要用上升沿来捕捉错误代码,如下图所示。
图 4. 错误代码的读取