Skip to main content

变量声明

变量声明:在哪里以及如何?

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

  • 申报意向书的一部分

    这个 声明变量 对话框可以帮助你解决这个问题。

  • 变量列表(GVL 编辑器、NVL 编辑器)

  • I/O 设备对象的 I/O 映射配置

    有关更多信息,请参阅: 配置设备和 I/O 映射

有关更多信息,请参阅: 变量声明的快捷方式

语法

<pragma>

<scope> <type qualifier>

    <identifier> AT <address> : <data type> := <initial value> ;

END_VAR

<pragma>

重复可选(从不、一次或多次)

Pragma

编译指示是一种编译器语句(例如,用于实现内存要求或运行时改进等优化)。

<scope>

必填项

范围

  • VAR

  • VAR_CONFIG

    注意:如果在函数块中声明了地址信息不完整的变量(例如, AT %I*),然后是变量声明中的变量 VAR_CONFIG 必须完全申报。只有完成此操作后,您才能在本地实例中访问这些变量。

  • VAR_EXTERNAL

  • VAR_GLOBAL

  • VAR_INPUT

  • VAR_INST

  • VAR_IN_OUT

  • VAR_OUTPUT

  • VAR_STAT

  • VAR_TEMP

<type qualifier>

可选

类型限定符

  • CONSTANT

  • RETAIN

  • PERSISTENT

<identifier>

必填项

标识符,变量名

注意:分配标识符时,必须毫无例外地遵守 “标识符指定” 一章中列出的规则。此外,您还将找到统一命名的建议。

AT %<address>

可选

地址组成如下:

<内存区域> <可选大小前缀> <内存位置>

存储区域细分为输入存储区域、输出存储区域或标志存储区域 (IQ 或者 M)。

示例

  • AT %I* // Incomplete address

  • AT %I7.5

  • AT %IW0

  • AT %QX7.5

  • AT %MD48

<data type>

必填项

数据类型

  • 基本数据类型

  • 自定义数据类型

  • 功能块

<initial value>

可选

初始值;初始化为文字、变量或表达式

12. 示例

全局变量列表 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

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;

IEC 计划 PLC_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