Skip to main content

变量:PERSISTENT

持久变量在声明部分声明 VAR_GLOBAL RETAIN PERSISTENT 在持久全局变量列表中。对于标有 PERSISTENT 持久性编辑器之外的关键字,实例路径被添加到那里。

提示

作为 CODESYS V3.3.0.1,一个变量声明 PERSISTENT RETAIN 具有相同的效果 RETAIN PERSISTENT 或者 PERSISTENT.

全局持久变量列表中声明的语法 PersistentVars

VAR_GLOBAL PERSISTENT RETAIN
    <identifier> : <data type> (:= <initialization>)?;
 <instance path to POU variable>
END_VAR

POU 中声明的语法

<scope> PERSISTENT RETAIN
    <identifier> : <data type> ( := <initialization> )?; // ( ... )? : Optional
END_VAR
<scope> : VAR | VAR_INPUT | VAR_OUTPUT | VAR_IN_OUT | VAR_STAT | VAR_GLOBAL

输入、输出或内存地址的分配 AT 不允许使用关键字。

提示

永远不要使用 POINTER TO 持久变量列表中的数据类型。如果再次下载应用程序,它们的地址可能会改变。相应的编译器警告显示在消息窗口中。

提示

如果您经常更改剩余变量的名称或数据类型,那么最好将它们声明为保留变量 RETAIN 仅关键字。

重要

避免插入实例路径,因为在这种情况下会使用两倍的内存并且可能会出现更长的循环时间。相反,在持久变量列表中声明变量。

96. 例子

中的声明 PersistentVars 持久变量列表

{attribute 'qualified_only'}
VAR_GLOBAL PERSISTENT RETAIN
        g_iCounter : INT;
        // Generated instance path of persistent variable
        PLC_PRG.fb_A.iPersistentCounter_A: INT;
END_VAR

中的声明 FB_A 功能块

FUNCTION_BLOCK FB_A
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR PERSISTENT
        iPersistentCounter_A : INT;
END_VAR

中的声明 PLC_PRG 程序

VAR
        fb_A1 : FB_A;
END_VAR


可能的申报地点

描述

直接在持久化全局变量列表中

该变量是持久的并且位于受保护的内存区域中。

在持久变量列表中具有实例路径的程序中本地

在持久变量列表中具有实例路径的功能块中本地

该变量是持久的并且位于受保护的内存区域和内存中(双重分配)。

仅在本地程序中

仅在功能块中本地

该变量不是持久的。消息窗口中会显示一条警告。

提示

点击 声明 → 添加所有实例路径 将变量导入持久变量列表。

在函数中本地

这种声明没有任何作用。该变量不是持久的。

提示

在持久性编辑器中,单击 声明 → 添加所有实例路径 如果局部变量被标记为 PERSISTENT.

提示

尽可能避免将变量标记为 PERSISTENT 它们在功能块中声明。这是因为功能块实例完全存储在剩余内存中,而不仅仅是标记的变量。