问题:如果读取冗余控制器状态灯的状态?
回答:本文将简单介绍通过编程的方式如何读取冗余控制器的状态灯,并附录相关源代码。
控制器运行过程中,控制器内部的各种不同信息都被保存在CPU的内部存储器中,并根据运行情况由控制器内部的操作系统实时进行更新。在冗余控制器中,这些内部信息也包含了冗余控制器的状态灯信息。
在系统提供的系统功能SFC中,功能SFC51(RDSYSST)专门用于读取系统的状态信息。该功能块提供的SSL-ID功能码输入管脚用于设置需要读取的信息类型,例如,16#0013用于读取控制器内部工作内存分配情况;16#00B1用于读取模块的诊断信息;而16#0074则可以用于读取控制器的状态灯(包括单CPU和冗余CPU)。
注意:功能码16#0019仅仅支持单CPU和冗余CPU单机模式,不能用在普通的冗余CPU中。关于SFC51的详细帮助请参考Step7在向帮助或有个系统提供的系统功能介绍。
参数 | 声明 | 数据类型 | 描述 |
REQ | INPUT | BOOL | REQ = 1:启动处理 |
SSL-ID | INPUT | WORD | 需要读取的系统状态功能码 |
INDEX | INPUT | WORD | 部分功能码中对象的类型或编号 |
RET_VAL | OUTPUT | INT | 如果执行SFC时出错,则RET_VAL将包含出错代码 |
BUSY | OUTPUT | BOOL | TRUE:尚未完成读取 |
SSL_HEADER | OUTPUT | STRUCT | 数据记录信息: |
LENTHDR:单条数据记录长度 | |||
N_DR:DR中记录的数据记录的条数 | |||
DR | OUTPUT | ANY | 读取的数据记录存储区域: |
•如果仅读取了SSL列表的单条信息,则不能评估DR的值,而只能评估SSL_HEADER的值。 | |||
•否则,LENTHDR和N_DR的乘积为已在DR中存储的字节数 |
表1. SFC51接口
SFC51的输入/输出接口如上表所示,其中SSL-ID用于指定需要读取的信息类型(功能码);部分功能码支持单条数据记录的读取,则此时可以通过INDEX管脚输入;SSL_HEADER指示读取的数据记录的长度及数据记录的条数;DR中则为读取的数据记录的存储空间;
> 使用SSL-ID=16#0074读取冗余CPU的状态灯时,SSL_HEADER数据结构中LENTHDR= 16#0004,即每条数据记录占用4个字节,具体结构如下表所示: