为什么APL库大量使用结构体编程
APL中的功能块广泛使用了结构变量来定义块引脚。结构变量(Struct)是一种复杂数据类型(Complex Data Type),一个结构变量由多个元素(Element)构成,元素可以是任何一种数据类型。
与简单数据类型相比,结构变量将多个元素进行了“打包”,因此可以在单个引脚中包含更多的信息,例如,同时包含过程值和其信号状态(质量代码),或者同时包含一个量程的上限和下限。图中显示了FB块引脚中的一个结构变量的定义。其中,PV是一个结构变量,其中包含两个元素Value和ST。Value为Real类型,ST为Byte类型。
其中,ST的值与OS上的变量状态显示对应
图标 |
优先级 |
十六进制值 |
值状态 |
|
0 |
16#60 |
仿真 |
|
1 |
16#00 |
较差,与设备有关 |
|
2 |
16#28 |
较差,与过程有关 |
|
3 |
16#68 |
不安全,与设备有关 |
|
4 |
16#78 |
不安全,与过程有关 |
|
5 |
16#A4 |
维护请求 |
|
6 |
16#80 |
良好 |
结构变量简化了CFC中功能块的用户界面,通过结构变量之间的一个连线就可以传递多个相关的数值;结构变量把一组相关的数值组合成单个引脚,增强了程序的可读性;APL利用结构变量的特点实现了一些特殊的功能,使过程控制更加方便灵活。
在PCS 7标准库中,模拟量量程上下限一般通过两个引脚分别设置(例如,CH_AI块的引脚VHRANGE和VLRANGE)。在APL中,上下限通过一个结构变量设置。除此之外,APL中通道驱动块还可以将输入的量程传递到输出端,这样就可将量程传递给其他功能块。
如图所示,在通道块Pcs7AnIn中,通过结构变量Scale设置量程,该量程经过ScaleOut传递给模拟量监视块MonAnL的PV_OpScale用做OS面板中的棒图上下限。
在CFC中,连接两个结构变量的前提条件是它们具有相同的结构。相同的结构是指,两个结构变量定义的元素的名称、数据类型、顺序都必须完全一致。如图中PV_Out和PV之间的连接。
一般情况下,结构变量和非结构变量之间不能直接连接。只有在两种特殊情况下,才允许直接连接。
1)ANY型的变量可以和结构变量直接连接。例如,AV块用于为MOTL扩展一个模拟量监控点。其AV_Tech引脚是一个结构变量,而MotL块的AV引脚是一个ANY型的变量。
2)带有信号状态的结构变量可以和相应类型的非结构变量直接连接。即:结构变量必须只包含两个元素,第一个元素为Value,数据类型为REAL或者BOOL,第二个元素为ST,其数据类型为BYTE。这种结构变量可以直接连接到与其Value类型一致(REAL或者BOOL)的非结构变量(PCS 7 V7.1 SP1以上版本支持)。如图所示。图中OpenAut、FbkOpenOut和FbkCloseOut都是结构变量,分别直接连接到了AND和OR块的BOOL型引脚上。
这种直接连接有一些限制,下列几种情况下无法使用这种直接连接:
· 跨AS的程序互联
· 连接到全局变量(例如全局运算符,全局DB块)
· 连接到运行组的使能信号
· 连接到一个CFC Chart的接口
在无法直接将结构变量和非结构变量互连的情况下,可以使用APL提供的转换块实现连接。APL提供的转换块见图。
下图显示了转换块的使用。
StruDiOu块将一个BOOL型变量转换为结构变量连接到Pcs7AnIn的SimOn引脚。StruScIn将结构变量ScaleOut转换为两个REAL型的输出。
为了减少这种转换,建议尽量避免APL库和PCS 7标准库混合使用。
关于结构变量更多详细内容可参考:
https://support.industry.siemens.com/cs/cn/zh/view/78683573