VASS06中使用GET_DIAG的用法科普

描述

说明

指令“GET_DIAG”用于读取硬件组件的诊断信息。硬件组件将通过 LADDR 参数进行选择。通过 MODE 参数,选择要读取的诊断信息。MODE=0 时,S7-1200 CPU 将忽略参数 LADDR。

参数

下表列出了“GET_DIAG”指令的参数:

参数 声明 数据类型 存储区 说明
MODE Input UINT I、Q、M、D、L 或常量 通过 MODE 参数,选择要输出的诊断数据。
LADDR Input HW_ANY (UINT) I、Q、M、L 或常量 硬件组件的的硬件 ID
RET_VAL Return INT I、Q、M、D、L 指令的状态
CNT_DIAG Output UINT I、Q、M、D、L 预留(始终为“0”)。
DIAG InOut VARIANT I、Q、M、D、L 诊断信息与所选模式一致,请参见下表
DETAIL InOut VARIANT I、Q、M、D、L 参数被隐藏。不要使用此参数!

参数 MODE

根据 MODE 参数中的值,在 DIAG、CNT_DIAG 和 DETAIL 输出参数中输出不同的诊断数据。

MODE 说明 DIAG CNT_DIAG
0 以 DWORD 格式输出硬件组件所有支持的诊断信息,其中位 X=1 表示支持模式 X。 DWORD 数据类型的位:
位 0 = 1:支持 MODE 0。
位 1 = 1:支持 MODE 1。
位 2 = 1:支持 MODE 2。
位 3 到 31:不相关
MODE=0 时,S7-1200 CPU 将忽略参数 LADDR。
0
1 输出所寻址硬件组件的诊断状态。 结构 DIS(请参见下文描述):
MaintenanceState
ComponentStateDetail
OwnState
IOState
OperatingState
0
2 输出所寻址硬件对象中所有从属组件的状态。 结构 DNN(请参见下文描述):
SubordinateState
SubordinateIOState
DNNmode
0

DIS 结构

参数 MODE = 1 时,以 DIS 结构输出诊断信息。此时,在变量声明中输入系统数据类型“DIS”作为数据类型。

说明
确定 OperatingState
确定标准 CPU 的操作状态时,需要选择 LADDR = 52(CPUExecUnit 的硬件标识符)。
确定标准 CPU 的操作状态时,需要选择 LADDR = 65147(Local1~HCPUredCtrl 的硬件标识符)或 LADDR = 65347(Local2~HCPUredCtrl 的硬件标识)。
确定 R/H 系统的系统状态时,需要选择 LADDR = 34(Local1~RHSystem 的硬件标识符)。

下表列出了各参数值的含义:

参数 数据类型 说明 参数构成规则
MaintenanceState DWORD 枚举   MaintenanceState 取决于 ComponentStateDetail。
0 良好 ComponentStateDetail 的位 15 始终为 1。
ComponentStateDetail 的位 11 到 14 的值可以是 0 或 1。
ComponentStateDetail 的位 3 可以是 1。
ComponentStateDetail 的所有其它位均为 0。
1 硬件组件已禁用。 如果 ComponentStateDetail 的位 16 为 1
如果 ComponentStateDetail 的位 17 为 1
2 - -
3 - -
4 - -
5 需要维护 如果 ComponentStateDetail 的位 4 为 1
6 要求维护 如果 ComponentStateDetail 的位 5 为 1
7 错误 如果 ComponentStateDetail 的位 6 为 1
8 上一级硬件组件的状态为“未知/错误” 如果 ComponentStateDetail 的位 11 到 14 的值为 3
如果 ComponentStateDetail 的位 7 到 10 的值为 3 或 4
9 - -
10 输入/输出不可用。 如果 ComponentStateDetail 的位 11 到 14 的值为 2
如果 ComponentStateDetail 的位 7 到 10 的值为 1 或 2
如果 ComponentStateDetail 的位 18 为 1
如果 ComponentStateDetail 的位 19 为 1
ComponentStateDetail DWORD 位数组 状态:
位 0 到 15:硬件组件的状态
位 16 到 31:CPU 的状态
-
0 到 2(枚举) 其它信息:
0:无其它信息
1:不允许传送
-
3 位 3 = 1:至少一个合格诊断可用 -
4 位 4 = 1:至少一个通道或组件需要维护 -
5 位 5 = 1:至少一个通道或组件需要维护 -
6 位 6 = 1:至少一个通道或组件错误 -
7 到 10(枚举) 0:Own - 硬件组件可用
1:Application Ready Pending - 无 I/O 访问
2:Locked by Superordinated - 硬件组件不可访问
3:Locked by IOController - 硬件组件不可访问
4:Locked by IOSupervisor - 硬件组件不可访问
-
11 到 14(枚举) 0(位 11 = 0,位 12 = 0,位 13 = 0,位 14 = 0):OK - 元素正确。
1(位 11 = 1,位 12 = 0,位 13 = 0,位 14 = 0):Substitute - 该元素将替代为一个兼容元素。
2(位 11 = 0,位 12 = 1,位 13 = 0,位 14 = 0):Wrong - 该元素将替代为一个非兼容元素(该元素可访问,但尚未就绪无法操作)。
3(位 11 = 1,位 12 = 1,位 13 = 0,位 14 = 0):No Submodule - 该元素不存在。
-
15 预留(始终为“1”)。 -
16 到 31 CPU 生成的模块状态信息:
第 16 位 = 1:子模块或模块已禁用
第 17 位 = 1:激活 CiR 操作
位 18 = 1:输入不可用
第 19 位 = 1:输出不可用
位 20 = 1:诊断缓冲区溢出
位 21 = 1:诊断不可用
位 22 = 1:Partial device failure(带有 PNIO,可用于共享设备)
位 23 到 31:预留(始终为 0)
-
OwnState UINT 枚举 维护状态 OwnState 取决于 MaintenanceState。
0 良好 如果 MaintenanceState 的值为 0。
1 禁用 如果 MaintenanceState 的值为 1。
2 需要维护 如果 MaintenanceState 的值为 5。
3 要求维护 如果 MaintenanceState 的值为 6。
4 错误 如果 MaintenanceState 的值为 7。
5 不可访问 如果 MaintenanceState 的值为 8。
6 诊断状态未知 未返回诊断事件的组件的默认值。
7 IO not available - 输入/输出不可用。 如果 MaintenanceState 的值为 10。
IOState WORD 位数组 硬件组件的 I/O 状态 可设置一个或多个位。
IOState 取决于 ComponentStateDetail。
位 0 = 1 良好 ComponentStateDetail 的位 15 始终为 1。
ComponentStateDetail 的位 11 到 14 的值可以是 0 或 1。
ComponentStateDetail 的位 3 可以是 1。
ComponentStateDetail 的所有其它位均为 0。
如果位 0 = 1,则位 1 到 5 和位 7 = 0。
位 1 = 1 禁用 如果 ComponentStateDetail 的位 16 为 1
如果 ComponentStateDetail 的位 17 为 1
如果位 1 = 1,则所有其它位均为 0。
位 2 = 1 需要维护 如果 ComponentStateDetail 的位 4 为 1
位 3 = 1 要求维护 如果 ComponentStateDetail 的位 5 为 1
位 4 = 1 错误 如果 ComponentStateDetail 的位 6 为 1
位 5 = 1 Hardware component not reachable - 硬件组件无法访问。 如果 ComponentStateDetail 的位 11 到 14 的值为 3
如果 ComponentStateDetail 的位 7 到 10 的值为 3 或 4
如果位 5 = 1,则所有其它位均为 0。
位 6 = 1: Qualified:位 6 = 1:至少一个合格诊断可用 如果 ComponentStateDetail 的位 3 为 1。
在这种情况下,将位 0、2 或 3 置位。
第 7 位 = 1: I/O data not available - I/O 数据不可用 如果 ComponentStateDetail 的位 11 到 14 的值为 2
如果 ComponentStateDetail 的位 7 到 10 的值为 1 或 2
如果 ComponentStateDetail 的位 18 为 1
如果 ComponentStateDetail 的位 19 为 1
8 到 14 预留(始终为“0”) -
位 15 网络/硬件故障
S7-1200:预留(始终为“0”)
S7-1500:如果位 4 = 1 或位 5 = 1:
位 15 = 0:网络错误
位 15 = 1:硬件错误
-
OperatingState UINT 枚举   -
0 Not Supported - 对于 I/O 模块,OperatingState 的值始终为“0”。 -
1 STOP / 固件更新 -
2 STOP / 存储器复位 -
3 STOP / 自启动 -
4 STOP -
5 存储器复位 -
6 启动 -
7 - -
8 RUN -
9 RUN-Redundant -
10 HOLD -
11 - -
12 - -
13 DEFECT(注:仅在诊断缓冲区条目中可见) -
14 - -
15 断电(注:仅在诊断缓冲区条目中可见) -
16 CiR -
17 STOP,且无 ODIS -
18 RUN ODIS -
19 PgmTest -
20 RunPgmTest(备用 CPU 处于测试模式时主 CPU 的状态) -
21 Run-Syncup(只有主 CPU 处于 SYNCUP 系统状态) -
22 SYNCUP(仅备用 CPU 处于 SYNCUP 系统状态) -
31 伙伴 CPU 的状态未知(如,伙伴 CPU 不可用) -
32 - -
33 STOP 系统状态 -
34 预留 -
35 STARTUP 系统状态 -
36 预留 -
37 RUN-Solo 系统状态 -
38 SYNCUP 系统状态 -
39 预留 -
40 RUN-Redundant 系统状态 -

DNN 结构

参数 MODE = 2 时,以 DNN 结构输出诊断的详细信息。此时,在变量声明中输入系统数据类型“DNN”作为数据类型。

下表列出了各参数值的含义:

参数 数据类型 说明
SubordinateState UINT Enum 从属组件的状态(请参见 DIS 结构的参数 OwnState)
SubordinateIOState WORD Bitarray 从属组件的输入和输出状态(请参见 DIS 结构的参数 IO State)
DNNmode WORD Bitarray 第 0 位 = 0:诊断已启用
位 0 = 1:诊断已禁用
位 1 至 15:预留

参数 RET_VAL

错误代码*
(W#16#...)
说明
0 无错误
n DETAIL 参数中的数据区域太小。未输出诊断数据的所有详细信息。
8080 不支持 MODE 参数中的值。
8081 所选模式(参数 MODE)不支持 DIAG 参数中的类型。
8082 所选模式(参数 MODE)不支持 DETAIL 参数中的类型。
8090 LADDR 不存在
80C1 并行执行的资源不足。
* 在程序编辑器中,错误代码将显示为整数或十六进制值。有关切换显示格式的信息,请参见“另请参见”。

示例

在以下示例中,读取 CPU 的诊断信息。

在全局数据块中创建四个变量和一个“myDIAG”结构(数据类型为 DIS),用于存储数据。

cpu

互连该指令的参数,如下所示:

cpu

通过参数 LADDR(“myLADDR”)使“GET_DIAG”指令了解 CPU 的硬件标识符。根据参数 MODE(“diagMODE”)的值“1”,以下几点适用:

指令将读取(CPU 的)所寻址硬件对象的状态。

在参数 DIAG(“myDIAG”)中,诊断信息将在结构(DIS 数据类型)中输出。

要了解诊断信息,必须将十六进制值转换为二进制代码。通过参数 DIAG(“myDIAG”),指示以下信息:

MaintenanceState:根据值“0”,CPU 无需维护。

ComponentStateDetail:根据十六进制值“0000_8000”,位 15 已激活。

OwnState:根据值“0”,无故障发生。

IOState:根据十六进制值“0001”,无需维护。

OperatingState:输出“0”。

输出参数 RET_VAL(“returnValue”)用于指示处理无错误。通过输出参数 CNT_DIAG(“CountDiagDetails”),指示参数 DETAIL 的“0”诊断详情已输出。

cpu

注:例如,可以从 ComponentStateDetail 变量单独读取位 3(通道诊断“是/否”)。

寻址该位,如下所示:ComponentStateDetail.%X3







审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分