菜单

声明变量

变量声明:在哪里?怎么做?​

可以在以下位置声明变量:

  • POU的声明部分
  • 声明变量对话框可帮助你解决此问题。
    提示:如果在表格声明编辑器中定义一个变量,就会自动生成正确的语法。
  • GVL或NVL编辑器的声明部分
  • I/O设备对象的I/O映射配置

 

语法

( )*
( )?
    (AT

)? : ( := )? ;
END_VAR

 

  声明
<编译指令>

编译指令(无、一个、多个)

注意:添加编译指令可以影响一个或多个变量的行为和属性。

范围

  • VAR
  • VAR_CONFIG
    注意:如果功能块中声明了地址信息不完整的变量(例如AT %I*),那么在变量声明VAR_CONFIG中的变量必须完整声明。完成此操作后,才能在本地实例中访问这些变量。
  • VAR_EXTERNAL
  • VAR_GLOBAL
  • VAR_INPUT 
  • VAR_INST 
  • VAR_IN_OUT
  • VAR_OUTPUT 
  • VAR_STAT
  • VAR_TEMP

类型限定符

  • CONST
  • RETAIN
  • PERSISTENT
 

标识符、变量名称

注意:在分配标识符时,必须毫无例外地遵循“标识符”一章中列出的规则。此外还可以找到有关统一命名的建议。

AT

在输入、输出或标志存储范围(I、Q或M)中分配地址

AT % ( )?

示例

  • AT %I* // Incomplete address
  • AT %I7.5
  • AT %IW0
  • AT %QX7.5
  • AT %MD48

 数据类型

初始值

| |

( ...)? 可选的
( ...)* 可选重复

 

示例

.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;                 // 初始化值12

                x : INT := 13 + 8;              // 由常量表达式定义的初始化值
 
                y : INT := x + fun(4);          // 由表达式定义的初始化值, 
                                              // 包含函数调用;注意顺序!
               

                z : POINTER TO INT := ADR(y);   // IEC61131-3 标准中未描述: 
                                                // 由adress函数定义的初始化值;
                                                // 注意:在这种情况下指针不会被初始化
                                                // 在线修改期间*)
                END_VAR
 

 

 

文章
使用声明编辑器 ​
使用“声明变量”对话框
声明数组
声明全局变量
使用任务-本地变量
最近修改: 2025-07-24