方法

提示!

这个功能只有在在当前支持特征设置的情况下才能够使用。

支持 面向对象的编程中方法可以用于描述一个指令序列。与函数不同的是,方法不是一个POU程序,但是必须分配给 “功能块”。他可以被看做是一个包含当前功能块接口的一个函数。像函数一样,它有一个返回值并且可以定义自己的临时变量和参数,可以有自己的声明部分。

另外作为面向对象的一种手段, 接口可用于组织工程中可用的方法。接口是方法的“原型”,这意味着方法是只包含接口的定义部分,但是没有实现部分;更多的,在定义部分不允许使用本地和静态变量,只能使用输入,输出,和输入输出变量。方法的实现过程必须在功能块中进行,功能块定义了接口和方法使用的 实施

提示!

当从一个POU中移动 复制 或者 移动到一个接口中时,所包含的实现过程将自动被删除。当从一个接口中复制或移动到POU中时,用户会被要求选择指定语言。

添加

通过指定POUs视图或者设备树中的一个功能块,并通过右键菜单中的 “添加对象” 方法 来进行一个方法的添加。在“添加方法”对话框输入名称,返回类型,编程语言和访问类型(参照以下文档)。对于选择返回类型,可以使用按键获得 “输入助手...” 对话框。

“访问类型”:由于兼容性的问题,访问类型是可选的。特别的“PUBLIC”相当于没有特别的说明,或者从选择列表中选择其他的方式:

  • “PRIVATE”:功能块中的访问类型是受限访问。
  • “PROTECTED”::功能块和气派生功能块中的访问受限。
  • “INTERNAL”: 方法的访问被限制在当前的命名空间(当前函数库)。
  • “FINAL”:没有重复定义的接口方式是可以的。使能代码优化。

访问类型的有效版本是V 3.4.4.0 ,在旧版本不能使用此定义。

确认设置之后通过“打开”方法编辑器将会打开。

声明

语法:

METHOD <access specifier> <method name> : <return data type>
VAR_INPUT
     ...
END_VAR
 

关于怎样进行接口方法的定义,请参阅 “接口”

方法调用

方法调用 也叫做“虚拟函数调用”。请参阅 “方法调用”

提示!

所有方法的数据都是暂时的只有在有效的方法执行过程中才存在(堆栈变量)。

在一个方法的内部可以调用一个功能块实例的变量。

如果必要的话使用 “THIS 指针”也指向当前的实例。

功能块 VAR_IN_OUT 或者 VAR_TEMP 变量不允许在方法中使用!

定义在 “接口”中的方法只能有输入,输出和输入输出变量,没有实体(实现部分)。

方法和函数一样可以有附加输出。必须在 “方法调用”进行分配。

功能块的特殊方法

初始化方法:一个命名为FB_init的方法通常被隐藏定义,但是也可以进行显示定义。他包含功能块定义部分的功能块初始化代码。参照 FB_init 方法

重新初始化:如果一个方法定义"FB_reinit" 方法作为一个功能块的实例,将会在功能块进行复制之后被调用,像 “在线修改”在线修改一样,并重新初始化实例模块。参阅 “FB_init,FB_reinit方法”

退出方法:如果一个退出方法命名为 "FB_exit" ,他必须作为实函数定义,内部没有隐式说明。退出方法将在功能块的每个实例进行一个新的下载之前调用,或者在实例进行移动和删除,复位,在线修改之前。参阅: FB_exit 方法

属性接口属性 每一个都包含一个设置或者获得 "累加器" 方法。参阅: “属性” resp. “接口属性”.

当应用停止时进行方法调用

在设备描述文件中可以定义一个特殊的方法,该方法可以始终被一个周期调用的特定功能块的接口进行调用(或者一个库模式)。如果这个模式有以下的输入参数,即使当前的应用程序没有运行也会进行处理。

示例

VAR_INPUT
pTaskInfo : POINTER TO DWORD;
pApplicationInfo: POINTER TO _IMPLICIT_APPLICATION_INFO;
END_VAR
 

编程人员可以通过变量pApplicationInfo检查程序的运行状态,并且可以定义处理方式。

IF pApplicationInfo^.state = RUNNING THEN <instructions> END_IF