变量的定义可以在POU的
⇘
定义部分实现或者通过
⇘
自动定义对话框,同样的方法适用于
⇘
DUT 或者
⇘
GVL 编辑器中。
变量的 "分类" (在定义对话框中名为 "范围") 必须通过特殊的
⇘
关键字包含其中一个或者多个变量。例如命令变量定义是通过 "VAR" 和 "END_VAR"。更多类型参见:
⇘
VAR_INPUT,
⇘
VAR_OUTPUT,
⇘
VAR_IN_OUT,
⇘
VAR_GLOBAL,
⇘
VAR_TEMP,
⇘
VAR_STAT,
⇘
VAR_EXTERNAL,
⇘
VAR_CONFIG。
变量类型关键字是由
⇘
属性关键字提供。例如: "RETAIN" (VAR_INPUT RETAIN)。
变量的定义必须符合以下规则:
语法:
<标识> {
⇘
AT <地址>}:<数据类型> {:=<初始值>};
位于大括号 {} 中的是操作部分。
标识:变量名的标识。当定义一个标识时以下列出的名目要注意,也请注意以下给予的建议:
⇘
“标示符的命名建议”。
- 不能包含空格或者特殊字符。
- 不区分大小写,例如 "VAR1", "Var1" 以及 "var1" 都表示相同的变量。
- 定义中可以使用下划线 (例如 "A_BCD" 以及 "AB_CD" 被认为是两个不同的定义),但是一行中最多只能有一个下划线。
- 定义部分的长度也就是它的说明部分,没有限制。
- 下文中列出的文本块规则必须要进行注意:
多个变量定义 (命名空间):
- 一个识别符不能在附近复制。
- 识别符不能与关键字相同。
- 全局定义的标识符可以被复用,本地变量名可与全局变量名相同。在一个 POU 内部本地变量将被进行操作。
- 定义在
⇘
“全局变量列表 - GVL
”的变量可以与定义在其他区域的全局变量有相同的名称。这这种情况下注意以下 IEC 61131-3 扩展因素,在之前的CoDeSys V2.3中不可用:
- 全局范围操作:一个以 "." 启动的实例路径打开一个全局范围。所以,如果有本地变量,例如 "ivar",与全局变量有相同的名称, ".ivar" 将会被作为全局变量引用。
- 全局变量列表可以用过一个包含变量的命名空间。所以相同变量可以在其他全局变量类表中定义,并且可以通过列表名称来进行特殊全局变量的指定。
示例:
globlist1.ivar := globlist2.ivar; (* ivar from GVL globlist2 is copied to ivar in GVL globlist1 *)
- 在包含的函数库中定义的全局变量可以通过语法 "<函数库命名空间>.<GVL名称>.<变量名>" 获得。参阅以下函数库命名空间的说明。
示例:
globlist1.ivar := lib1.globlist1.ivar (* ivar from globlist1 in library lib1 is copied to ivar in GVL globlist1 kopiert *)
- 对于一个函数库一个
⇘
命名空间被定义,当其包含在函数库管理中时。所以可以访问一个函数库模块或者通过"<函数库命名空间>.<模块名|变量名>" 获得变量。注意所有函数库中相近的函数库命名空间必须被相继启动。
例如:如果 Lib1 参考于 Lib0,模块 fun 位于 Lib1 的获得方式为 "Lib0.Lib1.fun":
ivar := Lib0.Lib1.fun(4, 5); (* return value of fun is copied to variable ivar in the project *)
同时 "发布工程中所有 IEC 图标,如果这些参考没有被包含在函数库中。" 将会在相关的函数库中的
⇘
属性中被激活,模块 fun 也可以通过路径 "Lib0.fun" 获取。
AT <地址>: 这个变量可以直接被连接到
⇘
明确的地址通过使用关键字 AT。
在功能块中也可以使用不完全地址指定特殊的变量。以便于这个变量可以在本地接口中使用,但是在 '变量配置' 中必须有一个接口。
类型: 有效的
⇘
数据类型, 通过 ":=<
⇘
初始化>"进行扩展。
任意的
⇘
参数说明 可以包含在一个工程中的定义部分,以便于用于变量目的影响代码创建。