接口

提示!

此功能只针对当前的设置有效。

使用“接口”是一种面向对象编程的方式。一个“接口” POU描述了一种 方法 “属性”原型。“原型”意味着只有声明部分,但是没有程序的实现部分。一个接口可以被看做是一个空的 “功能块”。它必须包含 "实现"在功能块的声明部分,以便获得功能块的实例。直到成为功能块定义的一部分,他才可以被特定的编程代码实现。一个功能块可以有一个或者多个接口。

因此同样的方法可能具有相同的参数,但具有不同的编程语言不同的功能块。因此一个接口可以被任何的POU进行使用或者调用,不需要POU知道当前连接的是哪个特殊的功能块。

接口定义以及在功能块中的应用

一个接口IFT插入在应用下。它包含两个方法Method1Method2。无论是接口还是方法都不包含任何的程序代码。仅仅在方法的声明部分包含一些变量的定义:

插图 13: 包含两个方法的接口

现在可以插入一个或者多个功能块,实施上述定义的接口ITF

插图 14: 创建一个功能块实现一个接口

当功能块POU添加到设备树中时,ITF中定义的方法Method1Method2将会自动添加到功能块下方。 在这里可以添加功能块的具体实现代码:

插图 15: 在函数功能块中应用接口

一个接口可以通过“EXTENDS” 被其他接口进行扩展(参阅以下文档: 示例 “接口扩展实例”)在接口定义中,像功能块中的定义是一样的。

接口属性

一个接口也可以定义“接口属性”,包含“访问权限”的方法"Get" 和/或者"Set"。参阅 “属性” “接口属性” 获取更多帮助。接口的一个属性,可能包含的属性仅仅是一个“样板”,这意味着其中根本不包含任何的代码。像方法一样,会被自动添加到功能块中,通过这实现接口,并且可以填充特殊的编程代码。

请注意以下事项:

  • 在接口内是不允许进行变量定义的。一个接口没有实体(实现部分)也没有动作。在一个接口中只定义了方法的集合,并且这些方法只能包含输入、输出和输入输出变量 。
  • 以接口形式定义的变量通常被当做应用进行处理。
  • 通过一个功能块去实现一个接口必须包含已经在接口中定义的方法和属性,他们包含相同的输入,输出和输入输出。

提示!

复制或者 moving从一个POU到接口转换时,方法或属性中包含的内容会自动删除。当将接口通过复制或者移动的方式从接口转换到POU中时,用户会被询问使用何种编程语言去实现内部功能。

插入

一个接口可以通过命令 “添加对象” / 接口添加。如果要添加到应用树中,首先选择树中的应用并且使用右键菜单进行添加,否则默认添加到POUs树中。

在 '添加接口' 对话框中输入新接口的名称(<接口名>)。通常可以使能操作 扩展:如果希望当前接口是另一个接口的 扩展

接口扩展实例

如果 "ITF1" 扩展自 "ITF_base",所有 ITF_base 中描述的扩展将会自动添加到 ITF1。

插图 16: 接口扩展

通过按钮“Open”确认之后,新的接口编辑窗口将会被打开。

声明:

语法:

INTERFACE <interface name>

实例. 用作接口扩展:

INTERFACE <interface name> EXTENDS <base interface name>

示例:

INTERFACE interface1 EXTENDS interface_base

添加方法的描述

要完成接口的定义,必须要添加一个实现方法的集合。为了这个目的,需将接口定义在POUs视图中并且利用命令“添加对象”获得 “添加对象”对话框进行接口部分的定义。与以往描述的一样,这些方法中只允许包含输入,输出和输入输出变量,没有实体部分(实现部分)。

接口引用和在线修改

提示!

在线修改实现接口功能块的实例,在 编译版本 比 3.4.1.0 更早的版本可能会产生错误,因为本地接口地址在以前的版本中可能发生了改变。

通过编译器版本>= 3.4.1.0 接口的应用会被自动导向新的地址,所以正确的接口将会在任何情况下被引用即使是在在线修改模式下。附加的代码或者时间是被允许的,这些问题何能会产生抖动问题。由于这个原因,在在线修改之前,程序将会 准确的在信息窗口中的链接变量要确定是否在线修改将会被执行或者取消。