ST语言-5.数据结构+数组+结构体+枚举+引用+联合+指针

1.数组

在这里插入图片描述

1.1声明数组

(1)声明一维数组:( CoDeSys 最大支持三维数组

数组名:ARRAY[开始下标…结束下标] OF 数据类型;

(2)声明二维数组:

数组名:ARRAY[开始下标1…结束下标1,开始下标2…结束下标2] OF 数据类型;

二维数组可以看作是一个特殊的一维数组,它自身的元素可以理解为又是一个新的一维数组。例如,可以把 a 看作是一个一维数组,它有三个元素, a[0] , a[1] 及 a[2], 而其中的每个元素又包含 4 个元素的一维数组。

在这里插入图片描述

VAR
Card_game:ARRAY[1..2,1..4] OF INT;
END_VAR

在这里插入图片描述

通过如上的结果可以看出, 第一维的成员有两个,第二维的成员有 4 个,故在数学上, 相当于绘制了一个 2× 4 的 2 维矩阵表格。

(3)声明三维数组:

数组名:ARRAY[开始下标1…结束下标1,开始下标2…结束下标2,开始下标3…结束下标3] OF 数据类型;

three_dimen:ARRAY[1..2,2..3,3..4] OF INT;

1.2数组初始化

可以初始化数组中的所有成员,或者全部都不进行初始化;

(1)在定义数组时对数组元素赋予初值

NumVar:ARRAY[1..5] OF INT:=[1,2,3,4,5];

它表示了一个元素为 INT 类型的数组,数组名为 NumVar,此数组共有 5 个元素( 1~5) ,成员分别为 NumVar[1]=1, NumVar[2]=2, NumVar[3]=3, NumVar[4]=4, NumVar[5]=5 。

在这里插入图片描述

注:数组下标在定义时建议从0开始,因为数组下标可以使用变量,变量的初始值一般为0,有可能导致数组溢出从而造成不可预期的错误,比如数据错乱。

(2)只给一部分元素赋值

NumVar:ARRAY[1..5] OF INT:=[1,2];

只有前两个元素被赋初值, 没有预置的数组元素,则使用其基本类型的默认初始值进行初始化。成员分别为 NumVar[1]=1, NumVar[2]=2, NumVar[3]=0, NumVar[4]=0, NumVar[5]=0。

(3)对于重复的初值,可以批量定义,只需在括号前加上数量

NumVar:ARRAY[1..5] OF INT:=[1,2(3)];

“ 2(3)” 表示 2 个 3,经过上述初始化命令后,数组的初值情况为,NumVar[1]=1, NumVar[2]=3, NumVar[3]=3, NumVar[4]=0, NumVar[5]=0。

(4)针对二维/三维数组,可以将所有数据写在中括号内,按数组排列的顺序对个元素赋初值

NumVar:ARRAY[1..2,3..4] OF INT:=[1,3(7)];

定义一个二维数组, 第一个元素的初值为 1, 后三个的初值为 7, 最终输出的结果为,NumVar[1,3]=1, NumVar[1,4]=7, NumVar[2,3]=7, NumVar[2,4]=7。

arr3 : ARRAY [1..2,2..3,3..4] OF INT := [2(0),4(4),2,3];

最终输出的结果为,

arr3[1,2,3]=0 , arr3[1,2,4]=0 , arr3[1,3,3]=4 , arr3[1,3,4]=4 , arr3[2,2,3]=4 , arr3[2,2,4]=4 ,

arr3[2,3,3]=2, arr3[2,3,4]=3。

1.3访问

三维数组在内存中的排列顺序: 第一维的下标变化最慢,最右边的下标变化最快。 例如, 假定

有三维数组 a[0…1,0…2,0…3],其内部的元素的内存排列顺序为:

a[0,0,0]—> a[0,0,1] —> a[0,0,2] —> a[0,0,3] —> a[0,1,0] —> a[0,1,1] —> a[0,1,2] —> a[0,1,3] —>

a[0,2,0] —> a[0,2,1] —> a[0,2,2] —> a[0,2,3] —> a[1,0,0] —> a[1,0,1] —> a[1,0,2] —> a[1,0,3] —>

a[1,1,0] —> a[1,1,1] —> a[1,1,2] —> a[1,1,3] —> a[1,2,0] —> a[1,2,1] —> a[1,2,2] —> a[1,2,3]。 不同

维度的数组举例详如图所示。

在这里插入图片描述

二维数组中元素的排列顺序是按行存放的,即在内存中先顺序存放第一行的元素,在存放第二行的元素,如图表示了二维数组 a [0…2, 0…3]数组存放的顺序。

在这里插入图片描述

数组必须先定义,然后再使用, CoDeSys 规定只能逐个引用数组元素,而不能一次引用整个数组。

数组的引用形式为:

[Index1,Index2,Index3]

下标可以是整型常量也可以是变量表达式,例如:

a[i+1,2,2]:= a[0,1,1]+ a[0,0,0]+ a[i,2,2];

2.结构体

在这里插入图片描述

在这里插入图片描述

Application–添加对象–DUT

在这里插入图片描述

选择结构体

在这里插入图片描述

结构体创建完成:

2

示例:

在这里插入图片描述

在这里插入图片描述

3.枚举

待补充

4.引用(别名)

引用是一个对象的别名。这个别名可以通过变量名读写。与指针不同的是,引用所指向的数据将被直接改变,因此引用的赋值和所指向的数据是相同的。

在这里插入图片描述

//示例
TYPE yzs:UnionTest;//用新名字yzs代替联合体UnionTest
END_TYPE

5.联合

在这里插入图片描述

示例:

在这里插入图片描述

6.指针

在这里插入图片描述

在这里插入图片描述

指针变量示例:

PROGRPLCPLC_PRG
VAR
  pointVar:POINTER TO INT;
  var1:INT:=5;
  var2:INT;
END_VAR

pointVar:=ADR(var1);
var2:=pointVar^;

在这里插入图片描述

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/95860f3f07.html