本章节内容参考codesysV3基础用户手册。
变量声明就是指定变量的名称、类型和赋初始值,变量的声明非常重要,未经声明的变量是不能通过编译的,所以也无法在程序中使用。用户可以在程序组织单元(POU)、全局变量列表(GVL)和自动声明对话框中进行变量的声明。在CoDeSys 中变量声明分为两类,普通变量声明和直接变量。
1) 普通变量声明
最常用的变量声明,不需要和硬件外设或通讯进行关联的变量,仅供项目内部逻辑使用。普通声明须符合以下规则:
< 标识符 > : < 数据类型 > {:=< 初值 >}; {}中为可选部分。 如nTest:BOOL;,nTest:BOOL:=TRUE;
2) 直接变量声明
在CoDeSys 应用中,当需要和可编程逻辑控制器的I/O 模块进行变量映射或和外部设备进行网络通讯时,需要采用此声明方法。
使用关键字AT 把变量直接联结到确定地址,直接变量须符合以下规则:
AT<地址>: < 标识符 > AT < 地址 > : < 数据类型 > {:=< 初始化值 >}; {}中为可选部分。
使用“%”开始,岁后是位置前缀符号和大小前缀符号,如果有分级,则用整数表示分级,并用小数点符号“.”表示,如%IX0.0,%QW0。直接变量声明的具体格式如图4.X 所示。
位置前缀的定义:
- I:表示输入单元。
- Q:表示输出单元。
- M:表示存储区单元。 大小前缀的定义如表4-X 所示。
前缀符号 | 定义 | 约定数据类型 |
---|---|---|
X | 位(bit) | BOOL |
B | 字节(BYTE) | BYTE |
W | 字(WORD) | WORD |
D | 双字(DWORD) | DWORD |
L | 长字(LWORD) | LWORD |
* | — | 未特定位置的内部变量,系统自动分配。 |
【例4.X】在程序中定义了变量双字型Var1,如需拿取该变量其中的一部分数据,将其转换成布尔/字节/字类型的变量,其首地址为多少,该如何换算: VAR Var1 AT%ID48:DWORD; END_VAR
%I 说明了该变量属于输入单元,具体的地址为%ID48。该地址对应的内存映射详见表4-x 所示。字地址%IW96 和%IW97 两个字组合后对应%ID48,因为48 2(字节)后的字节首地址为96。同样的道理,字节地址%IB192、%IB 193、%IB 194 和%IB 195 这四个字节变量组合后对应%ID48,因为48 4(字节) 后对应的字节首地址正好为192。表4.x 列出了CoDeSys V3.x 在寻址时,根据数据类型的大小(X:bit,B:byte,W:word,D:dword)。
%IX | 96.0 - 96.7 | 96.8 - 192.15 | 97.0 - 97.7 | 97.8 - 97.15 |
---|---|---|---|---|
%IB | 192 | 193 | 194 | 195 |
%IW | 96 | 96 | 97 | 97 |
%ID | 48 | 48 | 48 | 48 |
映射关系: 1) %MX12.0:是%MB12 的第一位。 2) %IW4:表示输入字单元4(字节单元8 和9)。 3) %Q*:输出在一个为特定的位置。 4) %IX1.3:表述输入第1 字节单元的第三位。
这里介绍的计算方法只适用于CoDeSys V3.x 的,CoDeSys V2.x 的计算方法略有不同。