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^;

在这里插入图片描述

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值