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),用于存储数据。
互连该指令的参数,如下所示:
通过参数 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


使用规模扩大 传感器行业迎来发展的黄金时代
GPS的平板天线与螺旋天线的区别
机器将替代人类的一切工作吗
超分辨率技术大热,能不能解决物联网刚需?
锻压设备红外安全保护电路的设计与制作
VASS06中使用GET_DIAG的用法科普
用于伤口和疤痕治疗的微针贴片研究进展
变频器定期检查项目及注意事项
如何读懂TCXO的参数及如何选择
有关于ipv6的那些事你都知道吗
政府补贴下调,新能源汽车如何迎接挑战
高通滤波器和低通滤波器详解:高通滤波器和低通滤波器的区别,高通滤波器和低通滤波器的经典设计和电路
AI不仅能帮你估分、填志愿,还能刷脸给你”验明正身”
解析扫地机器人:还是要扫地!
北美、亚太版iPhone 5S内部器件的射频前端对比
区块链:泡沫凶猛但并不坚硬,路在何方?
智慧化管理系统结构
区块链技术可以使保险业重回“点对点”重归信任互助的本质
投影宝电子白板日常使用注意事项/常见故障及判断
二极管的概念、类型及型号