每类本地变量或参数,都有用各自关键字对标识的自己的声明子域。每个子域包含允许的详细的声明子域,子域可按任何顺序定位。
下表显示能够在各种逻辑块中声明的变量或参数类型。
变量作为:
静态变量VAR
...
END_VAR
临时变量VAR_TEMP
...
END_VAR
块参数作为:
输入参数VAR_INPUT
...
END_VAR
输出参数VAR_OUTPUT
...
END_VAR
输入/输出参数VAR_IN_OUT
...
END_VAR
静态变量
静态变量是本地变量,块运行时其值被保留。用来保存功能块的值,并包含在相应实例数据块中。
句法(Syntax)
静态变量在VAR / END_VAR声明区内声明。该声明子域是FB声明部分的一部分。编译之后,该子域和块参数子域决定了指定的实例数据块的结构。
在该子域能够:
建立变量,指定变量的数据类型和初始化变量。
如果要在当前FB中作为本地实例调(其他的)FB,则将一个被调用的FB声明为静态变量。
例子(Example)
VAR
RUN :INT;
MEASARR :ARRAY [1..10] OF REAL;
SWITCH :BOOL;
MOTOR_1,MOTOR_2 :FB100; // 实例声明
END_VAR
存取(Access)
从如下代码部分存取变量:
块内存取(Access within the block):在功能块的代码部分能够存取在声明部分声明的变量。详细的解释在标题为“赋值语句(Value Assignment)”节。
用实例DB进行外部存取(External access using the instance DB): 用索引存取能够从其他块存取变量,如DBx.变量。
临时变量
Temporary Variables
临时变量在本地属于逻辑块,不产生静态内存区域,他们位于CPU的堆栈里。本块正在运行时,其值才被保留。临时变量不能从声明它的块外存取。一个OB、FB或FC执行前,临时变量的值是不确定的。也不能被初始化。
如果只要求在OB、FB或者FC执行时记录中间结果,可以声明临时数据。
句法(Syntax)
临时变量在VAR_TEMP / END_VAR声明部分里声明。该声明部分是FB、FC或OB的一部分。通过变量声明以声明变量名和数据类型。
例子(Example)
VAR_TEMP
BUFFER 1 : ARRAY [1..10] OF INT ;
AUX1, AUX2 : REAL ;
END_VAR
存取(Access)
变量总是从逻辑块的代码部分存取,变量是在声明部分声明的(内部存取)。参见题为“赋值语句(Value Assignment)”节。
块参数
Block Parameters
参数是占位符,块被实际地调用时才指定一个值。在块里声明的占位符认为是指派了作为实际参数的值的形式变量。且参数提供了一个块间交换信息的机制。
块参数的类型(Types of Block Parameters)
被实际参数指定的形式输入参数(数据流入块)。
形式输出参数用来传递输出参数(数据 从块流出)。
有输入和输出参数功能的形式输入/输出参数。
句法(Syntax)
在功能块或函数的声明部分制作形式参数的声明,根据在三种声明子域内的参数类型组合参数。在变量声明中,指定参数名和数据类型。初始化只可能对一个FB的输入和输出参数。
声明形式参数时,不仅只能用基本的、复杂的和用户定义数据类型,也可用参数数据类型。
例子(Example)
VAR_INPUT // 输入参数
MY_DB : BLOCK_DB ;
ConTROLLER : DWORD ;
TIMEOFDAY : TIME_OF_DAY ;
END_VAR
VAR_OUTPUT // 输出参数
SETPOINTS: ARRAY [1..10] of INT ;
END_VAR
VAR_IN_OUT // 输入/输出参数
SETTING : INT ;
END_VAR
存取(Access)
块参数可从逻辑块的代码部分进行存取如下:
内部存取: 从在其声明部分已经声明该参数的逻辑块的代码部分存取。在题为“赋值语句(Value Assignment)”和“表达式、操作和地址(expressions, Operations and Addresses)”节有解释。
用实例数据块外部存取: 用特定的DB能够存取功能块的块参数。