符号:
关键字:方法
方法是IEC 61131-3标准的扩展,是用于数据封装的面向对象编程的工具。一个方法包含一个声明和一个实现。但是,与函数不同,方法不是独立的POU,而是从属于功能块或程序的。一个方法可以访问上级POU的所有有效变量。
您可以使用接口来组织方法。
您可以在程序或功能块下面添加方法。单击打开添加方法对话框。
方法的变量包含仅在方法执行期间有效的临时数据(堆栈变量)。每次调用该方法时,都会重新初始化在方法中声明和实现的所有变量。
像函数一样,方法可以具有额外输出。您必须在方法调用中分配这些额外的输出。
根据所声明的访问说明符,只能在自己的命名空间(INTERNAL)中,只能在其自己的POU及其派生类(PROTECTED)中或在自己的POU(PRIVATE)中调用方法。对于PUBLIC,可以从任何地方调用该方法。
接口方法可以声明输入,输出和VAR_IN_OUT变量,但不包含实现。
| 提示!
当您将方法复制到POU下并在接口下添加该方法,或将该方法移动到那里时,所包含的实现将自动删除。 |
调用方法
.调用语法:
<返回值变量> := <POU名称> .<方法名称> ( <方法输入名称> := <变量名称> (, <其他方法输入名称> := <变量名称> )* );
对于方法调用,可以将传递参数分配给方法的输入变量。这样做时要遵守声明。指定输入变量的名称而无需注意声明中的顺序就足够了。
.例
.声明
METHOD PUBLIC DoIt : BOOL
VAR_INPUT
iInput_1 : DWORD;
iInput_2 : DWORD;
sInput_3 : STRING(12);
END_VAR
.调用
bFinishedMethod := fbInstance.DoIt(sInput_3 := 'Hello World ', iInput_2 := 16#FFFF, iInput_1 := 16);
调用该方法时,该方法的返回值将分配给,例如本地声明的变量。省略输入变量的名称时,必须注意声明顺序。
.例
.声明
METHOD PUBLIC DoIt : BOOL
VAR_INPUT
iInput_1 : DWORD;
iInput_2 : DWORD;
sInput_3 : STRING(12);
END_VAR
.调用
bFinishedMethod := fbInstance.DoIt( 16, 16#FFFF,'Hello World ');
递归方法调用
在实现中,方法可以直接通过THIS指针或通过分配的功能块的局部变量来调用自身。
发出针对递归调用的编译器警告。如果该方法提供了pragma {attribute 'estimated-stack-usage' := '<sstimated_stack_size_in_bytes>'},那么将禁止编译器警告。有关实现示例,请参见"属性'estimated-stack-usage'"章节。
要递归地调用方法,仅指定方法名称是不够的。如果仅指定方法名称,则会发出编译器错误:应使用程序名称,功能或功能块实例代替
功能块的特殊方法
FB_Init | 声明自动隐式声明,但也可以声明 包含功能块的初始化代码,如功能块的声明部分中所定义 |
FB_Reinit | 必须显式声明。 复制功能块实例后调用(如在线更改期间)。它重新初始化新的实例模块。 |
FB_Exit | 必须显式声明。 在重新下载或复位之前,或在在线更改所有移位或删除的实例期间,调用功能块的每个实例。 |
属性 | 提供Set和/或Get访问器方法。 |
对话框'添加方法'
功能:关闭对话框时,在所选POU下方定义一种方法。
调用:菜单栏:;上下文菜单
要求:在POUs视图或设备视图中选择了程序(PRG)或功能块(FUNCTION_BLOCK)。
当将同名方法插入派生功能块下方时,将复制插入基本功能块下方的方法的接口。
名称 | 例:meth_DoIt。 如果尚未在POU中插入标准方法FB_Init和FB_Exit,则会在列表框中提供这些方法。如果它是派生功能块,则列表框还将提供基本功能块的所有方法。 |
返回类型 | 返回值的默认数据类型或结构化数据类型 例:BOOL |
实现语言 | 例:结构化文本(ST) |
访问说明符 | 控制对数据的访问。 PUBLIC或未指定:访问不受限制。 PRIVATE:只能访问程序,功能块或GVL。 该对象在POU或设备视图中标记为(private)。声明包含关键字PRIVATE。 PROTECTED:访问仅限于程序,功能块或GVL及其派生版本。声明包含关键字PROTECTED。 该对象在POU或设备视图中标记为(protected)。 INTERNAL:对方法的访问仅限于名称空间(库)。 该对象在POU或设备视图中标记为(internal)。声明包含关键字INTERNAL。
|
Abstract | :标识该方法没有实现,并且实现由派生的FB提供 |
添加 | 在所选对象下添加一个新方法。 |
创建继承功能块时的输入帮助
当您进行面向对象的编程并希望对功能块使用继承时,您将获得以下支持:在继承的功能块下插入方法,动作等时,添加对象对话框将包含一个组合框,其中包含在基功能块中使用的方法,动作等的列表。这样,您可以轻松地得到基的方法定义,并将其相应地适应于功能块的继承方法。具有PRIVATE访问修饰符的方法和属性在此选择中不可用,因为它们不应被继承。当被接受到继承的功能块中时,具有PUBLIC访问修饰符的方法和属性将自动具有空白的访问修饰符字段。(从功能上讲,这是同一件事。)