跳到主要内容

声明数组

什么是数组

数组是一种数据结构,用于存储多个相同类型的数据元素。数组中的每个元素通过索引(下标)来访问。数组在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

注意事项

注意
  1. 索引越界:访问数组时必须确保索引在声明的范围内,否则会导致运行时错误
  2. 数组大小:数组在声明时必须指定固定大小,不支持动态数组
  3. 内存占用:大型数组会占用较多内存,需合理规划
  4. 初始化:未初始化的数组元素会使用默认值(数值类型为0,BOOL为FALSE)
  5. 性能考虑:频繁访问大型数组可能影响程序执行效率
提示
  • 使用有意义的数组名称,如 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中灵活地声明和使用数组变量。