.

实现接口

.
.

实现接口基于面向对象编程的概念。使用通用接口,可以以相同方式,使用不同但相似的功能块。

实现接口的功能块必须包括该接口中定义的所有方法和属性(接口方法和接口属性)。这意味着名称或方法或属性的输入和输出必须完全相同。当创建实现接口的新功能块时,CODESYS将接口的所有方法和属性自动添加到新功能块下方的树中。

提示!

如果之后添加更多接口方法,CODESYS则不会自动将这些方法添加到受影响的功能块中。要执行此更新,必须明确的执行实现接口命令。

对于继承的功能块,必须确保通过接口的继承来派生的任何方法或属性也将获得适当的实现。另外,应该使用基础中提供的实现,否则应将其删除。显示相应的编译错误消息或报警,并通过添加的编译指示属性自动提示。有关更多信息,请参阅实现接口命令的帮助页面。

提示!

  • 必须先将功能块的接口分配给接口类型的变量,然后才能通过该变量调用方法。
  • 接口类型的变量总是指定的函数块实例的引用。

接口类型的变量是对功能块实例的引用。这种变量可以引用实现接口的每个功能块。如果没有分配给变量,则在线模式下的变量将包含值0

.

.

I1接口包含GetName方法。

方法GetName:STRING 
 

功能块AB实现接口I1

FUNCTION_BLOCK A IMPLEMENTS I1
FUNCTION_BLOCK B IMPLEMENTS I1
 

因此,两个功能块都必须包含一个名为GetName的方法和返回类型STRING。否则,编译器将报告错误。

函数包含接口I1类型变量的声明。

FUNCTION DeliverName : STRING
VAR_INPUT
    l_i : I1;
END_VAR
 
 

可以将实现I1接口的功能块分配给这些输入变量。

函数调用举例:

DeliverName(l_i := A_instance); // 使用类型A的实例调用
DeliverName(l_i := B_instance); // 使用类型B的实例调用
 

调用接口方法:

在这种情况下,应用程序调用A.GetName还是B.GetName取决于l_i的实际类型。

DeliverName := l_i.GetName();  
 
.
 在新功能块中实现接口
.
 在新功能块中实现接口