对象:方法
象征:
关键词: METHOD
方法是 IEC 61131-3 标准的扩展,是面向对象编程的工具,用于数据封装。方法包含声明和实现。但是,与函数不同的是,方法不是独立的 POU,它从属于功能块或程序。方法可以访问上级 POU 的所有有效变量。
您可以在程序或功能块下方添加方法。点击 添加方法 对话框打开。
.然后您可以使用接口来组织方法。
有关详细信息,请参阅: 实现一个接口
重要
当您将方法复制到 POU 下并将其添加到接口下,或将方法移到那里时,包含的实现将自动删除。
宣言
句法:
METHOD <access specifier> <method name> : <type of return value>
<access specifier> | 选修的 访问说明符 根据声明的访问说明符,方法只能在其自己的命名空间内调用( |
<method name> | 方法标识符 |
<type of retur value> | 选修的 方法的返回类型 注意:对于没有显式返回类型的方法,第一个声明的输出用作返回值。仅当既未声明返回类型也未声明输出时,方法才不会返回值。但是,在任何一种情况下都不会生成编译器错误。 |
<scope list> | 适用范围:
|
<variable declaration list> | 变量声明 <variable name> : <data type> := <initial value> ; 根据用途分配给范围的以分号分隔的变量(参数)列表。
|
宣言
METHOD PUBLIC DoIt : BOOL VAR_INPUT iInput_1 : DWORD; iInput_2 : DWORD; sInput_3 : STRING(12); END_VAR
执行
选修的
允许访问功能块实例或程序变量以实现该方法。
这 这 指针允许访问它自己的功能块实例。因此,仅在分配给功能块的方法中才允许使用指针。
一个方法无法访问 VAR_TEMP 值 功能块的变量。
方法可以递归调用自身。
接口方法没有实现
接口方法 可以声明输入、输出和
VAR_IN_OUT
变量,但不包含实现。
调用方法
调用语法:
<return value variable> := <POU name> . <method name> ( <argument passing> );
<return value variable> | 返回值的变量 该类型必须与方法的返回类型相匹配。 注意:对于没有显式返回类型的方法,第一个声明的输出用作返回值。仅当既未声明返回类型也未声明输出时,方法才不会返回值。但是,在任何一种情况下都不会生成编译器错误。 |
<POU name> | 安排方法的功能块实例的标识符 |
<method name> | 方法标识符 |
<argument passing> | 带实际参数的逗号分隔列表 一个参数被传递给方法的每个参数(变量): <parameter name> := <actual argument>
|
宣言
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 IF iInput_1 = iInput_2 THEN DoIt := TRUE; // explicit return value END_IF
根据声明中的顺序传递参数进行调用
bFinishedMethod := fbInstance.DoIt( 16, 16#0010,'Hello World ');
递归方法调用
在实现中,方法可以调用自身,或者直接通过 这
指针,或通过分配功能块的局部变量。
<return value variable> := <POU name> . <method name> ( <argument passing> );
直接调用相关功能块实例
THIS
指针<return value variable> := <POU name> . <method name> ( <argument passing> );
通过临时实例化相关功能块的方法的局部变量调用
在递归的情况下发出编译器警告 称呼.如果该方法随 pragma 一起提供 {attribute 'estimated-stack-usage' := '<estimated stack size in bytes>'}
, 然后编译器警告被抑制。
有关实现示例,请参阅“属性: '估计堆栈使用'“ 章节。
要递归调用方法,仅指定方法名称是不够的。如果仅指定了方法名称,则会发出编译器错误: 期望程序名称、功能或功能块实例而不是
功能块的特殊方法
对话: 添加方法
功能: 定义对话框关闭时所选 POU 下面的方法。
称呼: ;上下文菜单
要求:一个程序(PRG
) 或功能块 (FUNCTION_BLOCK
) 被选择在 POU 查看或 设备 看法。
注意
在派生功能块下方插入同名方法时,复制在基本功能块下方插入的方法的接口。
姓名 | 例子: 标准方法 |
返回类型 | 返回值的默认数据类型或结构化数据类型 例子: |
实现语言 | 例子: 结构化文本 (ST) |
访问说明符 | 控制对数据的访问。
|
抽象的 |
|
添加 | 在选定对象下方添加一个新方法。 |
生成继承 POU 时的输入支持
当你进行面向对象的编程并使用继承时 (EXTENDS
关键字)的 POU,您可以通过以下方式获得支持:
当您在派生自基本 POU 的 POU 下插入操作、属性、方法或转换时, 添加 … 对话框打开。然后名称的输入字段扩展到一个列表框。列表框包含从基本 POU 中可用的动作、属性、方法或转换中进行的有效选择。例如,现在您可以轻松地接受基本 POU 的方法,然后将其调整为 POU 的派生函数。
带有访问修饰符的方法和属性 PRIVATE
此处未列出,因为它们也不是继承的。带有访问修饰符的方法和属性 PUBLIC
接受派生的 POU 时自动获得一个空白的访问修饰符字段,这在功能上意味着相同的事情。
