第1,2,3空的区域被看做元数据类型。数组既可以被定义POU的一部分声明,也可以是全局的可变列表。请注意可以使用隐性 ⇘ 边界检查。
句法:
<Array_Name>:ARRAY [<ll1>..<ul1>,<ll2>..<ul2>] OF <elem. Type>
ll1, ll2, ll3定义区域的下限,ul1, ul2 ul3定义上限。数值必须为整数。
初始化数组:
提示! 与 CoDeSys V2.3 相比,方括号中需放置初始化部分! |
数组的完整初始化例子:
arr1 : ARRAY [1..5] OF INT := [1,2,3,4,5];
arr2 : ARRAY [1..2,3..4] OF INT := [1,3(7)]; (* short for 1,7,7,7 *)
arr3 : ARRAY [1..2,2..3,3..4] OF INT := [2(0),4(4),2,3];
(* short for 0,0,4,4,4,4,2,3 *)
数组结构的初始化例子:
结构定义:
TYPE STRUCT1
STRUCT
p1:int;
p2:int;
p3:dword;
END_STRUCT
END_TYPE
数组初始化:
ARRAY[1..3] OF STRUCT1:= [(p1:=1,p2:=10,p3:=4723),(p1:=2,p2:=0,p3:=299),(p1:=14,p2:=5,p3:=112)];
元素没有值被预先分配,默认初始值被初始化为基本类型。在上面的例子中,元素anArray的[6] anArray的[10],初始化为0。
访问数组组件:
在数组的两个区域中,访问数组组件被定义为:
<Array-Name>[Index1,Index2]
为了在运行时中访问数组元素,函数 CheckBounds 必须在应用中可用。因此添加对象 ⇘ 隐性检查的POU 到应用中,这是通过使用 ⇘ 添加对象 对话框,标记与CheckBounds类型相关的复选框实现的。选择一种执行语言,然后使用 “打开”按键确定你的设置, 在编辑界面检查边界函数将被打开。这种选择独立声明部分是预先设定的,不能被修改,除了增加本地变量。在ST编辑器中,会建议默认的可执行函数可能被修改。
此检查函数有适当的方法检车是否对边界侵犯(例如,通过检测到的错误标志设置或更改索引)。一个可变的数组类型被分配这个函数被称作隐藏的函数。
小心! 为了保持检查的函数性,不被改变声明的部分为一个隐藏的函数。 |
函数 CheckBounds的使用实例:
检查函数默认执行如下:
声明部分:
// Implicitly generated code : DO NOT EDIT
FUNCTION CheckBounds : DINT
VAR_INPUT
index, lower, upper: DINT;
END_VAR
执行部分:
// Implicitly generated code : Only an Implementation suggestion
IF index < lower THEN
CheckBounds := lower;
ELSIF index > upper THEN
CheckBounds := upper;
ELSE
CheckBounds := index;
END_IF
当调用该函数参照以下输入参数:
只要索引的范围内,则返回值是索引本身。否则将被返回对应违反上限或下限范围内的字段。
只要索引的范围内,则返回值是索引本身。否则将被返回对应违反上限或下限范围内的字段。 在这种情况下的隐式调用检查边界函数程序,将影响的分配前的影响,被改变的索引值从'10到上限'7'。因此值 TRUE 将会分配给数组元素a[7] 。 这是尝试读取外部的字段范围通过检查边界函数来修正。