为什么APL库大量使用结构体编程

1:什么是结构变量?

APL中的功能块广泛使用了结构变量来定义块引脚。结构变量(Struct)是一种复杂数据类型(Complex Data Type),一个结构变量由多个元素(Element)构成,元素可以是任何一种数据类型。

与简单数据类型相比,结构变量将多个元素进行了“打包”,因此可以在单个引脚中包含更多的信息,例如,同时包含过程值和其信号状态(质量代码),或者同时包含一个量程的上限和下限。图中显示了FB块引脚中的一个结构变量的定义。其中,PV是一个结构变量,其中包含两个元素ValueSTValueReal类型,STByte类型。

Description: C:\Users\PCS7\Desktop\TO OS\TO OS\PCS7_TOP_V1\PCS7_Engineering\PCS7_AS_Engineering\APL\APL_Structure\image\image001.png

Description: C:\Users\PCS7\Desktop\TO OS\TO OS\PCS7_TOP_V1\PCS7_Engineering\PCS7_AS_Engineering\APL\APL_Structure\image\image002.png

其中,ST的值与OS上的变量状态显示对应

图标

优先级

十六进制值

值状态

 

结构变量简化了CFC中功能块的用户界面,通过结构变量之间的一个连线就可以传递多个相关的数值;结构变量把一组相关的数值组合成单个引脚,增强了程序的可读性;APL利用结构变量的特点实现了一些特殊的功能,使过程控制更加方便灵活。

2:结构变量量程设置

PCS 7标准库中,模拟量量程上下限一般通过两个引脚分别设置(例如,CH_AI块的引脚VHRANGEVLRANGE)。在APL中,上下限通过一个结构变量设置。除此之外,APL中通道驱动块还可以将输入的量程传递到输出端,这样就可将量程传递给其他功能块。

如图所示,在通道块Pcs7AnIn中,通过结构变量Scale设置量程,该量程经过ScaleOut传递给模拟量监视块MonAnLPV_OpScale用做OS面板中的棒图上下限。

Description: C:\Users\PCS7\Desktop\TO OS\TO OS\PCS7_TOP_V1\PCS7_Engineering\PCS7_AS_Engineering\APL\APL_Structure\image\image010.png

Description: C:\Users\PCS7\Desktop\TO OS\TO OS\PCS7_TOP_V1\PCS7_Engineering\PCS7_AS_Engineering\APL\APL_Structure\image\image011.png

3:结构变量之间的连接

CFC中,连接两个结构变量的前提条件是它们具有相同的结构。相同的结构是指,两个结构变量定义的元素的名称、数据类型、顺序都必须完全一致。如图中PV_OutPV之间的连接。

Description: C:\Users\PCS7\Desktop\TO OS\TO OS\PCS7_TOP_V1\PCS7_Engineering\PCS7_AS_Engineering\APL\APL_Structure\image\image012.png

4:结构变量和非结构变量之间的连接

一般情况下,结构变量和非结构变量之间不能直接连接。只有在两种特殊情况下,才允许直接连接。

1ANY型的变量可以和结构变量直接连接。例如,AV块用于为MOTL扩展一个模拟量监控点。其AV_Tech引脚是一个结构变量,而MotL块的AV引脚是一个ANY型的变量。

2)带有信号状态的结构变量可以和相应类型的非结构变量直接连接。即:结构变量必须只包含两个元素,第一个元素为Value,数据类型为REAL或者BOOL,第二个元素为ST,其数据类型为BYTE。这种结构变量可以直接连接到与其Value类型一致(REAL或者BOOL)的非结构变量(PCS 7 V7.1 SP1以上版本支持)。如图所示。图中OpenAutFbkOpenOutFbkCloseOut都是结构变量,分别直接连接到了ANDOR块的BOOL型引脚上。

Description: C:\Users\PCS7\Desktop\TO OS\TO OS\PCS7_TOP_V1\PCS7_Engineering\PCS7_AS_Engineering\APL\APL_Structure\image\image013.png

这种直接连接有一些限制,下列几种情况下无法使用这种直接连接:

·         AS的程序互联

·         连接到全局变量(例如全局运算符,全局DB块)

·         连接到运行组的使能信号

·         连接到一个CFC Chart的接口

在无法直接将结构变量和非结构变量互连的情况下,可以使用APL提供的转换块实现连接。APL提供的转换块见图。

Description: C:\Users\PCS7\Desktop\TO OS\TO OS\PCS7_TOP_V1\PCS7_Engineering\PCS7_AS_Engineering\APL\APL_Structure\image\image014.png

 

 

下图显示了转换块的使用。

Description: C:\Users\PCS7\Desktop\TO OS\TO OS\PCS7_TOP_V1\PCS7_Engineering\PCS7_AS_Engineering\APL\APL_Structure\image\image015.png

StruDiOu块将一个BOOL型变量转换为结构变量连接到Pcs7AnInSimOn引脚。StruScIn将结构变量ScaleOut转换为两个REAL型的输出。

为了减少这种转换,建议尽量避免APL库和PCS 7标准库混合使用。

关于结构变量更多详细内容可参考:

https://support.industry.siemens.com/cs/cn/zh/view/78683573