文章目录
- 前言
- 判断主/从CPU
- 总结
前言
在某些场景下,需要在程序中读取CPU的运行状态,尤其是冗余PLC,需要了解具体哪台CPU在运行,本文给出了一种基于SFC51功能块的读取方案。
判断主/从CPU
- 调用SFC51功能块,如图1、图2所示
图1
图2 - 新建DB块DB100,用来存放CPU状态位数组
图3
已知,1个字节占用8个位存储区,为了方便理解,可将图3的15个byte类型变量,转换为120个bool类型变量,如图4所示。SysStatuArray[0]-SysStatuArray[7]表示BYTE[1],SysStatuArray[8]-SysStatuArray[115]表示BYTE[2],SysStatuArray[16]-SysStatuArray[23]表示BYTE[3],等等。
图4 - 鼠标单击SFC51功能块,按F1键,打开SFC51功能块帮助文件,查询帮助文件可知SFC51的参数释义。
部分参数解释如下:
REQ:使能;
SZL_ID:指定需要读取的系统信息,本例为W#16#71,H系统当前状态;
SZL_HEADER:为一个结构数据,包括两个字,第一个字输出系统信息长度,例如W#16#10表示输出16个字节,第二个字输出存储系统信息的数据记录区,例如W#16#1表示数据记录区为1;
DR:为存储系统信息的地址区,数据类型为指针,长度必须大于参数SZL_HEADER第一个字输出的信息长度,本例为P#DB100.DBX0.0。
读取的系统信息存储在DB100.DBB0~DB100.DBB16,这16个字节中。用户可以对16个字节长度的系统信息进行分析和处理,系统信息内容如下:
内容 | 长度 | 含义 |
---|---|---|
Redinf | 2字节 | 冗余信息,W#16#0011: 单 CPU运行,W#16#0012: 一用一备 |
Mwstat1 | 1字节 | 状态字节,Bit0-Bit3:备用,Bit4:机架0中CPU的状态,Bit4:=0,从CPU,Bit4:=1,主CPU |
Bit5:机架1中CPU的状态,Bit5:=0,从CPU,Bit5:=1,主CPU |
表1
由表1可知,本例需要读取数组SysStatuArray中,Byte[3]的,Bit4和Bit5的状态信息。即DB100.DBX2.4和DB100.DBX2.5。
- 新建变量
M21.1:在机架0上运行的是主CPU;
M21.2:在机架1上运行的是主CPU。 - 编写如下程序,用于判断当前运行的是哪台CPU。
图5
总结
本文给出了一种判断冗余CPU运行状态的方法,应注意字节与位存储区的转换关系。