“ModuleStates”指令可用来读取 PROFINET IO 设备或 PROFIBUS DP 从站的模块状态信息。
输出的布尔值指示所选状态适用于的模块。例如,可以读取 PROFINET IO 设备中当前禁用的模块。
此信息的显示还依赖于要读取的状态信息是否适用于至少一个模块。
可在循环 OB 以及中断 OB(例如,OB82 - 诊断中断)中调用此指令。
LADDR | Input | HW_DEVICE | 站的硬件标识符 |
MODE | Input | UINT | 选择要读取的模块状态信息 |
RET_VAL | Return | INT | 指令的状态 |
STATE | InOut | VARIANT | 模块状态缓冲区 |
参数 LADDR
使用 LADDR 参数通过站硬件标识符选择 IO 设备或 DP 从站。
硬件标识符位于:
IO 设备站或 DP 从站属性的网络视图中。
或数据类型为 HW_DEVICE(对于 IO 设备)或 HW_DPSLAVE(对于 DP 从站)的所列系统常量的 PLC 变量表中。
参数 MODE
使用 MODE 参数可读取状态信息。可读取模块的下列一条状态信息:
1:模块已组态
2:模块故障
3:模块禁用
4:模块存在
5:模块中存在故障。例如:
维护要求或建议
不可访问
不可用
出现错误
参数 STATE
STATE 参数输出使用 MODE 参数选择的模块状态。
如果使用 MODE 选择的状态适用于某个模块,那么下列位将设置为“1”:
位 0 = 1:组显示。至少一个模块的第 n 位设置为“1”。
位 n = 1:使用 MODE 选择的状态将应用到插槽 n-1(例如:位 3 对应插槽 2)中的模块。
使用“BOOL”或“Array of BOOL”作为数据类型:
如果要只输出状态信息的组显示位,则可在 STATE 参数中使用 BOOL 数据类型。
要输出所有模块的状态信息,请使用长度为 128 位的 Array of BOOL。
示例:
在以下示例中,查询 PROFINET IO 设备的模块是否存在。该 IO 系统中包含两个 S7-1500 系列的 CPU。“PLC_14”CPU 将包含程序,其中包括“ModuleStates”指令。“PLC_13”CPU 将组态为一个 IO 设备。
在“PLC_14”CPU 中:在全局数据块中创建三个变量和一个“mySTATE”结构(数据类型为 Array of BOOL),用于存储数据。
在“PLC_14”CPU 中:在循环 OB 中调用该指令。互连该指令的参数,如下所示:
在“PLC_13”CPU 中:使用 CPU 属性将此 CPU“PLC_13”设为 IO 设备。
IO 系统显示在网络视图中。
在“PLC_14”CPU 中:模块位于 IO 设备的插槽 1 中。
在“PLC_14”CPU 中:通过参数 LADDR(“myLADDR”)使“ModuleStates”指令了解 IO 设备的硬件标识符。根据参数 MODE(“myMODE”)的值“4”,在 IO 设备中搜索模块。
在参数 STATE(“mySTATE”)中,输出模块备是否存在(基于参数 MODE )的值。位 0 作为组值,指示模块存在。位 2 指示插槽 1 中存在模块。
输出参数 RET_VAL(“returnValue”)用于指示处理无错误。
示例
在一个 IO 设备中包含 4 个模块,分别位于插槽 1 到 4 中。其中,插槽 2 中的模块故障。
对于 MODE = 2(故障/无故障)的 IO 设备,执行“ModuleStates”指令。
在 STATE 参数中设置了下列位:
位 0 = 1:至少有一个模块发生了故障。
位 1 = 0:插槽编号 0(由 IO 设备使用)
位 2 = 0:插槽编号 1 中的模块未发生故障。
位 3 = 1:插槽编号 2 中的模块发生了故障。
位 4 = 0:插槽编号 3 中的模块未发生故障。
位 5 = 0:插槽编号 4 中的模块未发生故障。
位 6 = 0:不相关
位 7 = 0:不相关
全部0条评论
快来发表一下你的评论吧 !