变量声明:在哪里?
您可以在以下位置声明变量
-
申报 POU 的一部分
“Declare Variable(声明变量)” 对话框可以帮助您解决这个问题。
提示如果在表格声明编辑器中定义变量,将自动生成正确的语法。
-
GVL 或 NVL 编辑器的声明部分
-
I/O 设备对象的 I/O 映射配置
语法
( <pragma> )* <scope> ( <type qualifier> )? <identifier> (AT <address> )? : <data type> ( := <initial value> )? ; END_VAR
|
声明 |
||
|
<pragma> |
Pragma (无、一个或多个) 请注意:通过添加 pragma,可以影响一个或多个变量的行为和属性。 |
|
|
|
范围
|
|
|
|
类型限定符
|
|
|
|
标识符,变量名 请注意:在分配标识符时,必须无一例外地遵守 "标识符 "一章中列出的规则。此外,您还可以找到关于统一命名的建议。 |
另见 |
|
|
分配输入、输出或标记存储器范围(I、Q 或 M)中的地址
示例
|
|
|
|
数据类型
|
|
|
|
初始值
|
|
|
|
可选 |
|
|
|
可选择的重复 |
示例
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_VAR
METH_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_VAR
iNumberFBCalls := 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_VAR iTest := 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; // initialization value 12
x : INT := 13 + 8; // initalization value defined by an expression of constants
y : INT := x + fun(4); // initialization value defined by an expression,
// that contains a function call; notice the order!
z : POINTER TO INT := ADR(y); // not described in the standard IEC61131-3:
// initialization value defined by an adress function;
// Notice: In this case the pointer will not be initialized
// during an Online Change *)
END_VAR
关于初始化顺序的说明
从编译器版本 3.5.3.40 开始,函数块中的变量按以下顺序初始化:首先按声明顺序初始化所有常量,然后按声明顺序初始化所有其他变量。




注意

从编译器版本 3.3.2.0 开始,全局变量列表中的变量总是先于 POU 的局部变量被初始化。