说明
指令“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),用于存储数据。
互连该指令的参数,如下所示:
通过参数 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”诊断详情已输出。
注:例如,可以从 ComponentStateDetail 变量单独读取位 3(通道诊断“是/否”)。
寻址该位,如下所示:ComponentStateDetail.%X3
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !