如何读取冗余控制器状态灯
问题:如果读取冗余控制器状态灯的状态? 回答:本文将简单介绍通过编程的方式如何读取冗余控制器的状态灯,并附录相关源代码。
控制器运行过程中,控制器内部的各种不同信息都被保存在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个字节,具体结构如下表所示:
问题:如果读取冗余控制器状态灯的状态? 回答:本文将简单介绍通过编程的方式如何读取冗余控制器的状态灯 ...
表2. DR 数据记录结构 也就是说通过SFC51(功能码16#0074)读取的数据记录存储在DR中,每条数据记录都拥有上述的结构,每条数据记录通过CPU_LED_ID字节1(LED标识符)来标识该记录对应的具体LED,通过评估记录的后两字节,即可判断该LED的当前状态,LED标识符如下所示: W#16#0001:SF(组出错) W#16#000A:USR1(用户自定义)
W#16#0002:INTF(内部出错) W#16#000B:BUS1F(总线出错接口1)
W#16#0003:EXTF(外部出错) W#16#000C:BUS2F(总线出错接口2)
W#16#0004:RUN W#16#000D:REDF(冗余出错)
W#16#0005:STOP W#16#000E:MSTR(主站)
W#16#0006:FRCE(强制) W#16#000F:RACK0(机架号0)
W#16#0007:CRST(冷重启) W#16#0010:RACK1(机架号1)
W#16#0008:BAF(总线上的电池故障/ W#16#0011:RACK2(机架号2)
超载、电池电压短路) W#16#0012:IFM1F(接口出错接口模块1)
W#16#0009:USR(用户自定义) W#16#0013:IFM2F(接口出错接口模块2) > 使用SSL-ID=16#0074读取冗余CPU的状态灯时,SSL_HEADER数据结构中N_DR= 16#001A,即每次读取并存储在DR中的数据记录条数最大为26条。因此,设置接受DR的数据区间长度应该至少大于等于: LENTHDR×N_DR=4×26=104 bytes 采用Step7编程时,手动构建如下DB块结构:
问题:如果读取冗余控制器状态灯的状态? 回答:本文将简单介绍通过编程的方式如何读取冗余控制器的状态灯 ...
表3. 典型数据块结构 在相应的循环OB中调用SFC51,具体调用如下:
问题:如果读取冗余控制器状态灯的状态? 回答:本文将简单介绍通过编程的方式如何读取冗余控制器的状态灯 ...
注意:由于调用SFC51将占用CPU系统资源,建议采用较慢循环周期的OB来调用该SFC51,例如OB32,1秒钟调用一次或更慢。 通过SSL_74.REQ_S来启动读取LED信息,所有信息将存储在SSL_74.DR。根据上述的DR数据记录结构表2来分析每条数据记录,并将其显示在OS上即可。 随本文同时附录的源代码有:
• @SFC51_LED_H:采用SCL编写的读取LED的源代码,支持冗余CPU和单CPU两种类型的控制器,已经在41x-H V4.0 CPU测试通过;
• @*.PDL文件:专门为PCS7开发的上位显示图标和面板,需结合上述源代码一起使用;
在CFC中调用上述源代码编写的功能块及面板,最终上位显示效果如下图所示:
问题:如果读取冗余控制器状态灯的状态? 回答:本文将简单介绍通过编程的方式如何读取冗余控制器的状态灯 ...
图1. 上位显示效果 声明:附录的源代码及上位显示文件为免费程序,可以随意拷贝使用。由此所造成的任何后果西门子公司技术支持部门将不负任何法律责任,并不提供关于该功能块及面板的任何技术支持和功能块更新服务!
|