在CODESYS中,变量声明方式及存储属性用于定义变量的作用域、生命周期和存储位置。以下是CODESYS支持的主要变量声明方式及其存储属性:
CODESYS变量声明方式与存储属性
声明方式 | 关键字/语法 | 存储位置 | 掉电保持性 | 作用域/生命周期 | 说明 |
---|---|---|---|---|---|
全局变量 | VAR_GLOBAL END_VAR | 全局内存区 | 可配置(需加RETAIN ) | 整个程序可访问,上电初始化 | 用于系统级共享数据,如系统参数、全局状态标志。 |
程序变量 | VAR END_VAR | 程序实例内存 | 不保持 | 程序实例内有效,程序启动时初始化 | 用于单个程序内部的临时数据存储,如中间计算结果。 |
函数块变量 | VAR_INPUT VAR_OUTPUT VAR_IN_OUT VAR END_VAR | 函数块实例内存 | 可配置(需加RETAIN ) | 函数块实例内有效,实例化时初始化 | 输入/输出变量用于与外部交互,内部变量用于存储中间状态。 |
函数变量 | VAR END_VAR | 局部栈内存 | 不保持 | 函数调用时创建,返回时销毁 | 用于函数内部的临时数据,不可跨调用保存状态。 |
保持型变量 | VAR RETAIN END_VAR | 非易失性存储器(如EEPROM) | 保持 | 与声明位置相同(如全局/程序/FB) | 掉电后数据保留,需硬件支持(如电池备份)。 |
持久型变量 | VAR PERSISTENT END_VAR | 非易失性存储器 | 保持且持久化 | 与声明位置相同 | 定期自动保存到存储介质(如闪存),比RETAIN 更可靠,适合关键数据。 |
常量 | VAR CONSTANT END_VAR | 只读存储器 | 永久保持 | 全局可见,值不可修改 | 用于定义固定值,如PI=3.14159。 |
配置变量 | VAR_CONFIG END_VAR | 配置文件 | 保持 | 项目配置阶段定义,运行时只读 | 用于存储系统配置参数,需重新下载配置生效。 |
临时变量 | VAR_TEMP END_VAR | 局部栈内存 | 不保持 | 仅在当前周期有效,下一周期重置 | 用于临时计算,如循环计数器,节省内存但需谨慎使用。 |
外部变量 | VAR_EXTERNAL END_VAR | 外部设备/内存 | 取决于外部源 | 映射到外部地址(如I/O、通信变量) | 用于访问PLC外部数据,如传感器值、驱动器参数。 |
静态变量 | VAR_STAT END_VAR | 静态内存区 | 可配置(需加RETAIN ) | 函数/FB调用间保持值 | 类似全局变量,但作用域限于声明的函数/FB,避免命名冲突。 |
特殊修饰符
修饰符 | 作用 |
---|---|
RETAIN | 使变量具备掉电保持能力(需硬件支持)。 |
PERSISTENT | 使变量数据定期写入非易失性存储器,增强数据安全性(如异常断电保护)。 |
WEAK | 声明弱引用变量,允许多处定义,链接时选择一个实现。 |
NON_RETAIN | 显式声明变量不保持(默认普通变量为NON_RETAIN )。 |
使用建议
- 全局变量:谨慎使用,避免命名冲突和程序耦合。
- 保持型变量:用于累计值(如计数器)、设备状态记忆。
- 持久型变量:用于关键参数(如配方、校准值),但注意写入次数限制。
- 临时变量:适合循环计数等短期使用场景,减少内存占用。
- 外部变量:确保外部设备地址正确,避免访问冲突。
通过合理选择变量声明方式和存储属性,可以优化PLC程序的性能、可靠性和可维护性。不同PLC品牌(如西门子、三菱、禾川)对IEC 61131-3标准的实现可能略有差异,建议参考具体设备的编程手册。