跳到主要内容

数据结构:STRUCT

结构是用户定义的数据类型,它将任意数据类型的多个变量组合成一个逻辑单元。在结构中声明的变量称为成员。

ST语法

TYPE <结构体名称> :
STRUCT
( <variable declaration optional with initialization> )+
END_STRUCT
END_TYPE

<结构体名称>是在整个项目中有效的标识符,使用标准与数据类型一致。声明任意数量的变量(至少一个),这些变量可选地通过初始化来补充。
结构体也可以嵌套,可声明一个具有现有结构类型的结构成员。唯一的限制是不能为变量(结构成员)分配任何地址。 (此处不允许使用 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

访问结构成员

ST语法

<变量名称> . <组件名称>
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
// Assigs 5 to aiPoint
iPoint := sPolygon.aiPoint1[1];

Ergebnis: iPoint = 5

结构变量中的位访问

使用数据类型的变量声明结构 BIT 将各个位组合成一个逻辑单元。可通过名称(而不是通过位索引)对各个位进行符号寻址。

语法声明

TYPE <structure name> :
STRUCT
( <bit name> : BIT; )
END_STRUCT
END_TYPE

位访问的语法

<结构体名称> . <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
fbController : FB_Controller;
END_VAR
fbController();
fbController.xStart := TRUE;