可能的连接信息可使用两种不同的结构读取 RESULT 参数中的连接信息。 •“TDiag_Status”结构只包含有关连接端点的Zui重要信息,例如,使用的协议、连接状态和 发送或接收的数据字节数。 •在“TDiag_StatusExt”结构(仅 S7-1500 CPU)中,除各种重要信息之外,还提供有连接的尝试次数以及连接中止的原因等信息。 以下将对两种结构的结构和参数进行说明(请参见“TDIAG_Status 和TDIAG_StatusExt 结构” 表)。 参数 下表列出了“T_DIAG”指令的参数: 参数 声明 数据类型 存储区 说明REQ Input BOOL I、Q、M、D、L 或 常量 在上升沿启动该指令检查 ID 参数中指定的 连接。 ID InputCONN_OUC (WORD) I、Q、M、D、L 或 常量 指向已分配连接的引用。 值范围:W#16#0001 到W#16#0FFF RESULT InOut VARIANT D 指向存储连接信息的结构。RESULT 参数 中可使用结构TDiag_Status 或 TDiag_StatusExt(仅 S7-1500 CPU)(相关说明,请参见表格“TDIAG_Status 和 TDIAG_StatusExt 结构”)。 DONE Output BOOLI、Q、M、D、L 状态参数: • 0:指令未启动,或者仍在执行过程 中。 • 1:指令已执行,且无任何错误。 BUSY OutputBOOL I、Q、M、D、L 状态参数: • 0:指令尚未启动或已完成。 • 1:指令尚未完成。无法启动新作业。 ERROROutput BOOL I、Q、M、D、L 状态参数: • 0:无错误。 • 1:出错。 STATUS Output WORDI、Q、M、D、L 指令的状态 有关有效数据类型的更多信息,请参见“有效数据类型概述。
BUSY、DONE和 ERROR 参数 可使用 BUSY、DONE、ERROR 和 STATUS 参数检查“T_DIAG”指令的状态。参数 BUSY表示作 业正在执行。使用 DONE 参数,可检查指令是否已经成功执行。如果在“T_DIAG”的执行过程 中出错,则置位参数ERROR。 下表列出了参数 BUSY、DONE 和 ERROR 之间的关系: BUSY DONE ERRO R 说明 1 - -指令正在处理中。 0 1 0 指令已成功执行。只有这时通过 RESULT 引用的结构中的数据才有效。 0 0 1指令已完成,但返回一个错误。错误原因通过参数 STATUS 输出。 0 0 0 未分配新指令。 参数 STATUS 下表列出了STATUS 参数值的含义: STATU S* (W#16 #...) 说明 0000 指令“T_DIAG”已成功执行。可评估RESULT 参数所引用结构中的数据。 7000 未激活任何指令处理。 7001 已启动指令处理。 7002 正在读取连接信息(与REQ 参数无关)。 8086 ID 参数值超出了有效范围。 8089 RESULT 参数指向一个无效的数据类型(仅对结构TDIAG_Status 和 TDIAG_StatusExt)。 80A3 ID参数引用的连接短点不存在。对于程序编写的连接,该错误也会在调用“TDISCON”指令后产生。 80B1 在 T_DIAG执行完成前,参数 RESULT 已更改。T_DIAG 的执行过程中,不允许更改 RESULT。 80C4内部错误。暂时不可访问连接端点。 *在程序编辑器中,错误代码可显示为整数或十六进制值。有关切换显示格式的信息,请参见“另请参见”。结构 TDIAG_Status 和TDIAG_StatusExt 说明 TDIAG_StatusExt 结构 TDIAG_StatusExt 结构仅适用于S7-1500 CPU。 下表详细介绍了 TDIAG_Status 和 TDIAG_StatusExt 结构的形式: • 从InterfaceID 到 ReceivedBytes参数,“TDIAG_StatusExt”和“TDIAG_Status”结构是相同 的。 • TDIAG_StatusExt结构还包含参数 ConnTrials 至 LastDisconnTimeStamp。 说明 TDIAG_StatusExt 和TDIAG_StatusExt_V2 结构的使用 强烈建议将 TDIAG_StatusExt_V2 用作新项目中详细信息的结构。如果使用 TDIAG_StatusExt,则在访问“LastConnErrTimeStamp”结构元素时将导致 CPU 转入“故障”操作状态。 只有指令无错执行完毕,各元素的值才有效。如果产生错误,参数的内容将不会改变。 名称 数据类型 说明TDIAG_Status 和 TDIAG_StatusExt 两种结构都具有以下参数: InterfaceID HW_ANY CPU或 CM/CP 的接口 ID (LADDR)。 ID CONN_O UC 所诊断连接的ID。成功调用后,该元素值会与“T_DIAG”指令的参数 ID 相同。名称 数据类型 说明 ConnectionType BYTE用于连接的协议类型: • 0x01:未使用。 • ... • 0x0B:TCP 协议 (IP_v4) •0x0C:ISO-on-TCP 协议 (RFC1006) • 0x0D:TCP 协议 (DNS) • 0x0E:拨号协议 •0x0F:WDC 协议 • 0x10:SMTP 协议 • 0x11:TCP 协议 • 0x12:TCP 和 ISO-on-TCP 协议(RFC1006) • 0x13:UDP 协议 • 0x14:预留 • 0x15:PROFIBUS 总线访问协议 (FDL) •0x16:ISO 8073 传输协议(本地 ISO) • ... • 0x20:SMTP 或 SMTPS 协议 - 基于 IPv4 •0x21 SMTP 或 SMTPS 协议 - 基于 IPv6 • 0x22:SMTP 或 SMTPS 协议,基于 FQDN(Fully Qualified Domain Name) • ... • 0x70:S7 连接 • 其它:预留ActiveEstablishe d BOOL • FALSE:本地,被动连接端点 • TRUE:本地,主动连接端点 StateBYTE 连接端点的当前状态 • 0x00:未使用。 •0x01:连接已终止。临时状态,例如,调用“T_RESET”指令后。系统随后将 自动尝试重新建立连接。 •0x02:主动连接端点正尝试与远程通信伙伴建立连接。 • 0x03:被动连接端点正等待与远程通信伙伴建立连接。 •0x04:连接已建立。 • 0x05:正在终止连接。这可能是因为调用了 "T_RESET" 或 "T_DISCON" 指令。其它可能的原因是协议错误和断线。 • 0x06 到 0xFF:未使用。名称 数据类型 说明 Kind BYTE 连接端点的模式: •0x00:未使用。 • 0x01:组态并加载到 CPU 的已组态静态连接。 • 0x02:组态并加载到 CPU的已组态动态连接(当前不支持)。 • 0x03:使用指令 "TCON" 在用户程序中生成的程序编写的连接。调用指令“TDISCON”或转换至 CPU STOP 状态破坏了连接端点。 • 0x04:由工程师站 (ES) 或操作员站 (OS)建立建立的动态连接(该连接因 ID 缺失,当前无法诊断)。 • 0x05 到 0xFF:未使用。 SentBytes UDINT发送的数据字节数。 ReceivedBytes UDINT 接收的数据字节数。 以下参数只在 TDiag_StatusExt结构中出现: ConnTrials UDINT 连接尝试的次数。连接成功建立后,ConnTrials 的值为 0。如果该元素不为 0,则表示存在连接错误。 注:对于被动连接端点,此值从不大于 1。 ConnTrialsSucce ss UDINT连接尝试成功的次数。在连接端点的生命周期中从不复位该元素,达到 0xFFFF FFFF 后才会返回 0。注:如果此连接中从未出现过问题,则该参数为 1。 LastConnErrRea son UDINT 上一次连接尝出错中输出的错误ID(错误消息与 LastDisconnReason 参数中的 相同)。 •0x4F01:无法访问远程连接端点(该错误通常在建立连接时产生)。 • 0x4F02:本地终止连接。 •0x4F03:连接由远程通信伙伴终止。 • 0x4F04:连接由协议错误终止。 • 0x4F05:连接由本地检测到的网络错误终止。 •0x4F06:连接由远程检测到的网络错误终止。 • 0x4F07:连接因协议超时终止。 •0x4F08:错误的参数分配:将与本地伙伴自己的地址建立连接。 • 0x4F09:通过调用“T_RESET”指令暂时复位了连接。 •0x4F0A:可用的连接资源不足(已超出数量) • 0x4F0B:内部错误:错误的寻址参数 • 0x4F0C:内部 CPU 通信错误• 0x4F0D:CPU 和 CM/CP 间的内部 AS 通信错误 • 0x4F0E:指定的本地 TCP/UDP 端口(或RFC1006-T 选型器)已被占用。