Skip to main content

数据结构: STRUCT

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

你在中声明一个结构的类型 DUT 你在中创建的对象项目添加对象DUT 菜单或应用程序的快捷菜单中。

有关更多信息,请参阅: DUT

语法

TYPE <structure name>

STRUCT

    <member name> : <data type> := <initialization> ;

END_STRUCT

END_TYPE

<structure name>

此标识符在整个项目中有效,因此您可以像使用标准数据类型一样使用它。

<member name> : <data type> ;

成员声明

随后可以发表任意数量的声明,但至少 2 个。

结构也可以嵌套。这意味着您使用现有结构类型声明结构成员。那么唯一的限制是你不能为变量(结构成员)分配任何地址。这个 AT 这里不允许声明。

:= <initialization>

可选

类型声明

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 <base structure>

STRUCT

    <member declaration>

END_STRUCT

END_TYPE

223. 示例

类型声明: S_PENTAGON

TYPE S_PENTAGON EXTENDS S_POLYGONLINE :
STRUCT
    aiPoint5 : ARRAY[1..2] OF INT;
END_STRUCT
END_TYPE


结构变量的声明和初始化

224. 示例
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 OF

访问结构成员

您可以使用以下语法访问结构成员:

<variable name> . <member name>

225. 示例
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];

结果: iPoint = 5



结构变量中的符号位访问

你可以用数据类型的变量声明一个结构 BIT 将各个位组合成一个逻辑单元。然后,您可以通过名称(而不是位索引)象征性地寻址各个位

语法声明

TYPE <structure name> :

STRUCT

    <member name> : BIT;

END_STRUCT

END_TYPE

位访问的语法

<structure name> . <member name>

226. 示例

类型声明

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;


有关更多信息,请参阅: 变量中的位访问

提示

指向的引用和指针 BIT 变量是 无效 声明,以及具有基本类型的数组元素 BIT