声明全局变量
什么是全局变量
全局变量是在整个项目范围内都可以访问的变量,所有程序、功能块和函数都可以读取和修改它们的值。全局变量通常用于:
- 在不同程序之间共享数据
- 存储需要跨多个POU访问的状态信息
- 实现模块间的通信
在全局变量表中声明
通过WasomeCodeX_AI的可视化界面在全局变量表中声明全局变量。
操作步骤
- 在项目面板中找到 "全局变量表" 单击打开编辑器
- 在变量表中添加新的变量,填写以下信息:
- 名称:变量标识符
- 地址:变量在内存中的位置
- 数据类型:数据类型(BOOL、INT、REAL等)
- 初始值:可选的初始赋值
- 常量:是否为常量,即在程序运行时不能被修改
- 保持:是否在程序运行时保持变量值,即在程序结束时是否保留当前值
- 注释:变量说明
界面示例
在ST文件中声明
在ST程序文件中使用 VAR_GLOBAL 关键字声明全局变量。
语法格式
CONFIGURATION config_0
(* 全局变量定义区域 *)
VAR_GLOBAL
(* 变量声明格式:变量名: 类型 := 初始值; *)
g_var_in_program: BOOL := TRUE; (* 布尔型全局变量,初始值为TRUE *)
g_counter: INT := 0; (* 整型全局变量,初始值为0 *)
g_speed: REAL := 100.0; (* 实型全局变量,初始值为100.0 *)
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
代码说明
| 关键字 | 说明 |
|---|---|
CONFIGURATION | 配置块的开始标记 |
VAR_GLOBAL | 全局变量声明区域的开始 |
END_VAR | 变量声明区域的结束 |
END_CONFIGURATION | 配置块的结束标记 |
全局变量的访问
在项目中的任何POU(程序、功能块、函数)中都可以直接访问全局变量:
PROGRAM Main
VAR
local_var: INT;
END_VAR
(* 读取全局变量 *)
local_var := g_counter;
(* 修改全局变量 *)
g_counter := g_counter + 1;
g_speed := 150.0;
全局变量命名规范
为了便于识别和维护,建议遵循以下命名规范:
| 规则 | 说明 | 示例 |
|---|---|---|
| 前缀标识 | 使用 g_ 作为全局变量的前缀 | g_counter, g_speed |
| 驼峰命名 | 变量名采用驼峰式命名法 | g_motorSpeed, g_isRunning |
| 语义清晰 | 变量名应清晰表达其用途 | g_temperature, g_errorCode |
注意事项
注意
- 命名冲突:全局变量名称不能与其他全局变量或保留关键字重复
- 内存占用:过多的全局变量会增加系统内存占用,应合理使用
- 数据一致性:多个POU同时访问同一全局变量时,需注意数据一致性和同步问题
- 初始化:全局变量在系统启动时会被初始化为指定值或默认值(数值类型为0,BOOL为FALSE)
提示
建议将全局变量的声明集中管理,便于维护和查找
完整示例
以下是一个完整的CONFIGURATION配置示例:
CONFIGURATION config_main
VAR_GLOBAL
(* 系统状态变量 *)
g_systemReady: BOOL := FALSE;
g_errorFlag: BOOL := FALSE;
g_errorCode: INT := 0;
(* 过程变量 *)
g_setpoint: REAL := 50.0;
g_processValue: REAL := 0.0;
(* 计数器和定时器 *)
g_cycleCounter: UINT := 0;
g_operationTime: TIME := T#0s;
END_VAR
RESOURCE PLC_1 ON PLC
TASK cycleTask(INTERVAL := T#10ms, PRIORITY := 1);
PROGRAM MainProgram WITH cycleTask;
PROGRAM MonitorProgram WITH cycleTask;
END_RESOURCE
END_CONFIGURATION
通过以上两种方法,您可以在WasomeCodeX_AI中灵活地声明和使用全局变量。