如何判断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.错误代码的读取