声明数组
什么是数组
数组是一种数据结构,用于存储多个相同类型的数据元素。数组中的每个元素通过索引(下标)来访问。数组在PLC编程中常用于:
- 存储批量数据(如 传感器读数、控制参数等)
- 实现数据缓冲区
- 处理表格数据
- 实现队列、栈等数据结构
数组的基本语法
声明格式
数组名: ARRAY[起始索引..结束索引] OF 数据类型;
语法说明
| 组成部分 | 说明 | 示例 |
|---|---|---|
ARRAY | 关键字,声 明数组类型 | ARRAY[0..5] |
[起始索引..结束索引] | 数组的索引范围 | [0..9] 表示10个元素 |
OF | 关键字,指定数组元素类型 | OF INT |
数据类型 | 数组元素的数据类型 | INT, REAL, BOOL 等 |
索引规则
- 索引可以是整数常量或表达式
- 索引范围可以是递增或递减(通常使用递增)
- 最常用的索引起始值是
0(零基索引),也可以从1开始
声明程序数组变量
在程序(PROGRAM)内部声明数组变量。
基本示例
PROGRAM DEMO_PLC_PRG1
VAR
(* 声明一个包含2个整数元素的数组,索引为0和1 *)
x3_value: ARRAY[0..1] OF INT;
(* 其他变量 *)
x1_value: INT := 12;
x2_value: BOOL;
END_VAR
(* 使用数组 *)
x3_value[0] := 100; (* 给第一个元素赋值 *)
x3_value[1] := 200; (* 给第二个元素赋值 *)
END_PROGRAM
更多示例
PROGRAM ArrayDemo
VAR
(* 整型数组,包含10个元素 (索引0-9) *)
intArray: ARRAY[0..9] OF INT;
(* 实型数组,包含5个元素 (索引0-4) *)
realArray: ARRAY[0..4] OF REAL;
(* 布尔型数组,从索引1开始 *)
boolArray: ARRAY[1..8] OF BOOL;
(* 字符数组 *)
charArray: ARRAY[0..15] OF CHAR;
END_VAR
END_PROGRAM
声明全局数组变量
在CONFIGURATION中声明全局数组变量,可在整个项目中访问。
基本示例
CONFIGURATION config_0
VAR_GLOBAL
(* 全局 布尔变量 *)
g_var_in_program: BOOL := TRUE;
(* 声明一个包含4个实数元素的全局数组 *)
g_realArray: ARRAY[0..3] OF REAL;
(* 全局整型数组,包含100个元素 *)
g_largeArray: ARRAY[0..99] OF INT;
END_VAR
RESOURCE resource_0 ON PLC
TASK task_0(INTERVAL := T#10ms, PRIORITY := 1);
PROGRAM program_0 WITH task_0;
END_RESOURCE
END_CONFIGURATION
注意事项
注意
- 索引越界:访问数组时必须确保索引在声明的范围内,否则会导致运行时错误
- 数组大小:数组在声明时必须指定固定大小,不支持动态数组
- 内存占用:大型数组会占用较多内存,需合理规划
- 初始化:未初始化的数组元素会使用默认值(数值类型为0,BOOL为FALSE)
- 性能考虑:频繁访问大型数组可能影响程序执行效率
提示
- 使用有意义的数组名称,如
sensorValues而非arr1 - 索引通常从0开始,这是IEC 61131-3标准的推荐做法
- 可以使用常量定义数组大小,提高代码可读性和维护性
完整示例
PROGRAM ArrayCompleteExample
VAR
(* 声明并初始化数组 *)
temperatures: ARRAY[0..7] OF REAL := [25.0, 26.5, 24.8, 27.2, 25.9, 26.1, 24.5, 25.3];
statusFlags: ARRAY[0..3] OF BOOL := [TRUE, FALSE, TRUE, FALSE];
(* 临时变量 *)
avgTemp: REAL;
sumTemp: REAL := 0.0;
i: INT;
END_VAR
(* 计算平均温度 *)
FOR i := 0 TO 7 DO
sumTemp := sumTemp + temperatures[i];
END_FOR
avgTemp := sumTemp / 8.0;
(* 使用状态标志 *)
IF statusFlags[0] THEN
// 执行某些操作
END_IF
END_PROGRAM
通过以上内容,您可以在WasomeCodeX_AI中灵活地声明和使用数组变量。