例如:
#RetValue_konfiguriert := DeviceStates(LADDR := "Local~PROFINET_IO-System", MODE := 1, STATE := #State_konfiguriert);
#RetValue_stoerung := DeviceStates(LADDR := "Local~PROFINET_IO-System", MODE := 2, STATE := #State_stoerung);
#RetValue_deaktiviert := DeviceStates(LADDR := "Local~PROFINET_IO-System", MODE := 3, STATE := "DB_ARG".State_deaktiviert);
#RetValue_vorhanden := DeviceStates(LADDR := "Local~PROFINET_IO-System", MODE := 4, STATE := #State_vorhanden);
#RetValue_wartung := DeviceStates(LAD:= "Local~PROFINET_IO-System", MODE := 5, STATE := #State_wartung);
指令“DeviceStates”用于查询 IO 系统中所有模块的特定状态信息,即:
PROFINET IO 系统中所有 IO 设备的状态信息
或 DP 主站系统中所有 DP 从站的状态信息
输出的布尔值指示所选状态适用于的模块。例如,读取当前 PROFINET IO 系统中禁用的 IO 设备。
此信息的显示还依赖于要读取的状态信息是否适用于至少一个 IO 设备或 DP 从站。可在循环 OB 以及中断 OB(例如,OB82 - 诊断中断)中调用此指令。
LADDR | Input | HW_IOSYSTEM | PROFINET IO 或 DP 主站系统的硬件标识符 |
MODE | Input | UINT | 选择要读取的状态信息 |
RET_VAL | Return | INT | 指令的状态 |
STATE | InOut | VARIANT | IO 设备或 DP 从站的状态缓冲区 |
参数 LADDR
使用 LADDR 参数通过硬件标识符选择 PROFINET IO 或 DP 主站系统。
硬件标识符位于:
PROFINET IO 或 DP 主站系统属性的网络视图中。
或数据类型为 HW_IOSYSTEM 的所列系统常量的 PLC 变量表中。
参数 MODE
使用 MODE 参数可读取状态信息。可读取整个 PROFINET IO 或 DP 主站系统的下列一条状态信息:
1:IO 设备/DP 从站已组态
2:IO 设备/DP 从站故障
3:IO 设备/DP 从站已禁用
4:IO 设备/DP 从站存在
5:出现问题的 IO 设备/DP 从站。例如:
维护要求或建议
不可访问
不可用
出现错误
参数 STATE
通过 STATE 参数,输出由 MODE 参数选择的 IO 设备/DP 从站的状态。
如果使用 MODE 选择的状态适用于 IO 设备/DP 从站,则在 STATE 参数中将下列位设置为“1”:
位 0 = 1:组显示。至少有一个 IO 设备/DP 从站的第 n 位设置为“1”。
位 n = 1:通过 MODE 选择的状态将应用到 IO 设备/DP 从站。
对于 PROFINET IO 系统,第 n 位对应于相应 IO 设备的设备编号(请参见设备视图和网络视图中的 PROFINET 接口属性)。
对于 PROFINET DP 系统,第 n 位对应于 DP 从站的 PROFIBUS 地址(请参见设备视图和网络视图中的 DP 从站属性)。
使用“BOOL”或“Array of BOOL”作为数据类型:
要仅输出状态信息的组显示位,可在 STATE 参数中使用 BOOL 数据类型。
要输出所有 IO 设备/DP 从站的状态信息,请使用下列长度的 Array of BOOL:
对于 PROFINET IO 系统:1024 位
对于 DP 主站系统:128 位
示例 - 读取 PROFINET IO 主站系统中是否存在 IO 设备
在以下示例中,将在 IO 系统中查询是否存在 IO 设备。该 IO 系统中包含两个 S7-1500 系列的 CPU。“PLC_14”CPU 将包含程序,其中包括“DeviceStates”指令。“PLC_13”CPU 将组态为一个 IO 设备。
在“PLC_14”CPU 中:在全局数据块中创建三个变量和一个“mySTATE”结构(数据类型为 Array of BOOL),用于存储数据。
在“PLC_14”CPU 中:在循环 OB 中调用该指令。互连该指令的参数,如下所示:
在“PLC_13”CPU 中:使用 CPU 属性将此 CPU“PLC_13”设为 IO 设备。IO 设备接收设备编号 1。
IO 系统显示在网络视图中。
在“PLC_14”CPU 中:通过参数 LADDR(“myLADDR”)使“DeviceStates”指令了解 IO 系统的硬件标识符。
根据参数 MODE(“myMODE”)的值“4”,在 IO 系统中搜索 IO 设备。
在参数 STATE(“mySTATE”)中,输出 IO 设备是否存在(基于参数 MODE 的值)。位 0 作为组值,指示 IO 设备存在。位 1 指示存在设备编号为 1 的 IO 设备。
输出参数 RET_VAL(“returnValue”)用于指示处理无错误。
示例 - 读取 PROFINET IO 主站系统中发生故障的站
在一个 PROFINET IO 系统中,包含设备编号为 1、2、3 和 4 的 4 个 IO 设备。其中,编号为 2 的 IO 设备故障。
对于 MODE = 2(故障/无故障)的 PROFINET IO 系统,执行“DeviceStates”指令。
在 STATE 参数中设置了下列位:
位 0 = 1:至少有一个 IO 设备发生了故障。
位 1 = 0:设备编号为 1 的 IO 设备未发生故障。
位 2 = 1:设备编号为 2 的 IO 设备发生了故障。
位 3 = 0:设备编号为 3 的 IO 设备未发生故障。
位 4 = 0:设备编号为 4 的 IO 设备未发生故障。
位 5 = 0:不相关
位 6 = 0:不相关
审核编辑:刘清
-
plc
+关注
关注
5011文章
13286浏览量
463222 -
Profinet
+关注
关注
6文章
1168浏览量
23398
原文标题:VASS06使用的新系统函数:DeviceStates: 读取 IO 系统的模块状态信息
文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论