以太网通讯诊断指令T_DIAG的应用
西门子各机型PLC给用户提供了大量、琳琅满目的以太网通讯模式,其中S7通讯是西门子特有底层逻辑的通讯模式,且只适用于西门子控件之间的通讯,用户调用也非常实用和方便。用户仅仅只需要在客户机侧编译S7通讯之PUT、GET指令,并规划通讯数据交互区。而对于服务器侧,不需要编写通讯指令,仅仅只需要规划好通讯数据交互区。
在实际应用中,通讯故障因为各种原因,会造成通讯完全或间隙中断,停止通讯数据的交换,中断正常的程序的运行、数据丢失等问题,给用户造成一些困惑。
西门子在portal软件库中,提供了一个诊断通讯连接功能的指令。本例以S7-1200之间的S7通讯为测试项目,诊断通讯过程中可能出现的错误,诊断功能调用portal软件库指令T_DIAG,通过指令获取通讯错误信息。
测试机型:
客户机:S7-1214C DC/DC/DC V4.2
服务器:S7-1214C AC/DC/RLY V2.2
交换机:普通TP-LINK
测试软件:Portal V15
通讯中断测试:
1)创建一个测试项目,S7-1214C DC/DC/DC作为测试客户机,S7-1214C AC/DC/RLY作为测试服务器,Portal V15软件及普联交换机一台,用于项目的用户程序编制及通讯连接,图示1:

在项目树中连续创建2个测试项目。
2)S7-1214C DC/DC/DC作为客户机侧编辑简单的S7通讯程序,并调用检查连接T_DIAG通讯检测指令,图示2:

在“开放式用户通讯”---“其它”下拉菜单中调用T_DIAG指令,图示3:

并将S7通讯及检查连接T_DIAG指令的管脚,通过创建的数据块,分别填写到各自的管脚。
3)在调用T_DIAG指令过程中,RESULT管脚的数据类型是结构体,此管脚相对比较特殊,需要在数据块DB2中创建一个数据类型为“TDiag_Status”名称的变量类型,图示4:

具体各变量含义,可以通过F1帮助获取。
4)将创建的测试项目编译、保存后分别下载到各自的CPU中,先进行S7通讯测试,图示5:

将项目分别下载。
5)分别打开通讯数据交互数据块,测试S7通讯情况,图示6:

S7通讯数据交互,可以正常传递。
6)打开T_DIAG指令数据块,看TDiag_Status结构体下的数据,图示7:

State = 16#04,说明诊断连接已经建立。
7),当拔掉服务器的以太网电缆后,再看TDiag_Status结构体下的数据,图示8:


State = 16#01,连接终止,然后跳变State = 16#02,主动连接端点正尝试与远程通信伙伴建立连接,SentBytes及ReceivedBytes通讯收发数据被清零。当服务器端重新插好以太网电缆,各管脚数据重新恢复和计数开始。
8)根据上述检查连接指令的工作原理,添加S7通讯中断报警程序,图示9:

重新插入服务器端以太网电缆,程序刷新 Q0.0 = 0 通讯中断报警停止。
库中的“检查连接”T_DIAG指令很方便的为ConnectionType管脚定义通讯诊断中断提供了检测范围和依据,用户只需要通过对指令RESULT管脚关联的数据块ID适当修改,就可以进行对其它通讯站点的诊断判断。
2025年7月31日星期四整理