跳到主要内容

声明全局变量

什么是全局变量

全局变量是在整个项目范围内都可以访问的变量,所有程序、功能块和函数都可以读取和修改它们的值。全局变量通常用于:

  • 在不同程序之间共享数据
  • 存储需要跨多个POU访问的状态信息
  • 实现模块间的通信

在全局变量表中声明

通过WasomeCodeX_AI的可视化界面在全局变量表中声明全局变量。

操作步骤

  1. 在项目面板中找到 "全局变量表" 单击打开编辑器
  2. 在变量表中添加新的变量,填写以下信息:
    • 名称:变量标识符
    • 地址:变量在内存中的位置
    • 数据类型:数据类型(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

注意事项

注意
  1. 命名冲突:全局变量名称不能与其他全局变量或保留关键字重复
  2. 内存占用:过多的全局变量会增加系统内存占用,应合理使用
  3. 数据一致性:多个POU同时访问同一全局变量时,需注意数据一致性和同步问题
  4. 初始化:全局变量在系统启动时会被初始化为指定值或默认值(数值类型为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中灵活地声明和使用全局变量。