可以在以下位置声明变量:
语法
(
END_VAR
声明 | |
<编译指令> |
编译指令(无、一个、多个) 注意:添加编译指令可以影响一个或多个变量的行为和属性。 |
范围
|
|
类型限定符
|
|
标识符、变量名称 注意:在分配标识符时,必须毫无例外地遵循“标识符”一章中列出的规则。此外还可以找到有关统一命名的建议。 |
|
AT |
在输入、输出或标志存储范围(I、Q或M)中分配地址 AT % 示例
|
数据类型 |
|
初始值 |
|
( ...)? | 可选的 |
( ...)* | 可选重复 |
示例
.GVL
{attribute 'qualified_only'}
{attribute 'linkalways'}
VAR_GLOBAL CONSTANT
g_ciMAX_A : INT := 100;
g_ciSPECIAL : INT := g_ciMAX_A - 10;
END_VAR
.GVL_CONFIG{attribute 'qualified_only'}
VAR_CONFIG
// Generated instance path of variable at incomplete address
PLC_PRG.fbDoItNow.XLOCINPUT AT %I*: BOOL := TRUE;
END_VAR
.FB_DoIt (FB)METHOD METH_Last : INT
VAR_INPUT
iVar : INT;
END_VAR
VAR_INST
iLast : INT := 0;
END_VARMETH_Last := iLast;
iLast := iVar;FUNCTION_BLOCK FB_DoIt
VAR_INPUT
wInput AT %IW0 : WORD; (* Input variable *)
END_VAR
VAR_OUTPUT
wOutput AT %QW0 : WORD; (* Output variable *)
END_VAR
VAR_IN_OUT
aData_A : ARRAY[0..1] OF DATA_A; // Formal variable
END_VAR
VAR_EXTERNAL
GVL.g_ciMAX_A : INT; // Declared in object GVL
END_VAR
VAR_STAT
iNumberFBCalls : INT;
END_VAR
VAR
iCounter: INT;
xLocInput AT %I* : BOOL := TRUE; // VAR_CONFIG
END_VARiNumberFBCalls := iNumberFBCalls + 1;
.PLC_PRG (PRG)PROGRAM PLC_PRG
VAR
iLoop: INT;
iTest: INT;
fbDoItNow : FB_DoIt;
iTest_200: INT;
aData_Now : ARRAY[0..1] OF DATA_A := [(iA_1 := 1, iA_2 := 10, dwA_3 := 16#00FF),(iA_1 := 2, iA_2 := 20, dwA_3 := 16#FF00)];
END_VARiTest := GVL.g_ciMAX_A;
iTest_200 := 2 * GVL.g_ciMAX_A;
fbDoItNow(aData_A := aData_Now);
FOR iLoop := 0 TO GVL.g_ciSPECIAL DO
;
END_FOR
所有声明的标准初始化值为0。在声明部分,你还可以为每个变量和每个数据类型指定用户定义的初始化值。
用户定义的初始化从赋值操作符:=开始,由编程语言ST(结构化文本)的任何有效表达式组成。因此,可以在常量、其他变量或函数的帮助下定义初始化值。如果使用变量,也必须对其进行初始化。
例如
VAR
var1:INT := 12; // 初始化值12
x : INT := 13 + 8; // 由常量表达式定义的初始化值
y : INT := x + fun(4); // 由表达式定义的初始化值,
// 包含函数调用;注意顺序!
z : POINTER TO INT := ADR(y); // IEC61131-3 标准中未描述:
// 由adress函数定义的初始化值;
// 注意:在这种情况下指针不会被初始化
// 在线修改期间*)
END_VAR