结构体是一种用户定义的数据类型,它将任意数据类型的多个变量组合成一个逻辑单元。结构中声明的变量称为成员。
您可以在“DUT” 对象中对结构进行类型声明,该对象是在“Project Add Object DUT” 菜单或应用程序的上下文菜单中创建的。
语法
TYPE <structure name> : STRUCT ( <variable declaration optional with initialization> )+ END_STRUCT END_TYPE
<structure name>
是在整个项目中有效的标识符,因此可以像使用标准数据类型一样使用它。此外,您还可以声明任意数量的变量(至少一个),并有选择地进行初始化。
结构也可以嵌套。这就意味着你要用一个已有的结构类型来声明一个结构成员。那么唯一的限制就是不能为变量(结构成员)分配任何地址。(此处不允许使用 AT 声明)。
示例
类型声明
TYPE S_POLYGONLINE : STRUCT aiStart : ARRAY[1..2] OF INT := [-99, -99]; aiPoint1 : ARRAY[1..2] OF INT; aiPoint2 : ARRAY[1..2] OF INT; aiPoint3 : ARRAY[1..2] OF INT; aiPoint4 : ARRAY[1..2] OF INT; aiEnd : ARRAY[1..2] OF INT := [99, 99]; END_STRUCT END_TYPE
类型声明的扩展
从现有结构中声明附加结构。除自身成员外,扩展结构还具有与基本结构相同的结构成员。
语法
TYPE <structure name> EXTENDS <basis structure> : STRUCT ( <variable declaration optional with initialization> )+ END_STRUCT END_TYPE
示例
类型声明
TYPE S_PENTAGON EXTENDS S_POLYGONLINE : STRUCT aiPoint5 : ARRAY[1..2] OF INT; END_STRUCT END_TYPE
结构变量的声明和初始化
示例
PROGRAM progLine VAR sPolygon : S_POLYGONLINE := (aiStart:=[1,1], aiPoint1:=[5,2], aiPoint2:=[7,3], aiPoint3:=[8,5], aiPoint4:=[5,7], aiEnd:=[1,1]); sPentagon : S_PENTAGON := (aiStart:=[0,0], aiPoint1:=[1,1], aiPoint2:=[2,2], aiPoint3:=[3,3], aiPoint4:=[4,4], aiPoint5:=[5,5], aiEnd:=[0,0]); END_VAR
不允许在变量中使用初始化。有关初始化结构数组的示例,请参见数据类型ARRAY
的帮助页面。
访问结构成员
您可以使用以下语法访问结构成员:
<variable name> . <component name>
示例
PROGRAM prog_Polygon VAR sPolygon : S_POLYGONLINE := (aiStart:=[1,1], aiPoint1:=[5,2], aiPoint2:=[7,3], aiPoint3:=[8,5], aiPoint4:=[5,7], aiEnd:=[1,1]); iPoint: INT; END_VAR // Assigns 5 to aiPoint iPoint := sPolygon.aiPoint1[1];
结果 iPoint = 5
结构变量中的符号位访问
您可以用数据类型为BIT
的变量声明一个结构,将单个比特合并为一个逻辑单元。这样,你就可以用一个名称(而不是位索引)来符号化地寻址各个位。
语法声明
TYPE <structure name> : STRUCT ( <bit name> : BIT; )+ END_STRUCT END_TYPE
位访问语法
<structure name> . <bit name>
示例
类型声明
TYPE S_CONTROL : STRUCT bitOperationEnabled : BIT; bitSwitchOnActive : BIT; bitEnableOperation : BIT; bitError : BIT; bitVoltageEnabled : BIT; bitQuickStop : BIT; bitSwitchOnLocked : BIT; bitWarning : BIT; END_STRUCT END_TYPE
位访问
FUNCTION_BLOCK FB_Controller VAR_INPUT xStart : BOOL; END_VAR VAR_OUTPUT END_VAR VAR ControlDriveA : S_CONTROL; END_VAR IF xStart = TRUE THEN // Symbolic bit access ControlDriveA.bitEnableOperation := TRUE; END_IF PROGRAM PLC_PRG VAR fbController : FB_Controller; END_VAR fbController(); fbController.xStart := TRUE;
BIT
变量的引用和指针是无效的 声明,以及基本类型为BIT
的数组元素。
另见