实现一个接口
实现一个接口
接口的实现基于面向对象编程的概念。您还可以通过通用接口以相同的方式使用不同但相似的功能块。
实现接口的功能块必须包含该接口中定义的所有方法和属性(接口方法和接口属性)。这意味着:相应方法或属性的名称、输入和输出必须完全相同。
当您创建一个实现接口的新功能模块时,添加 CODESYS 自动在树中新功能模块下方输入该接口的所有方法和属性。
重要
之后,如果您向接口添加更多方法,则添加 CODESYS 这些方法不会自动添加到相关的功能模块中。对于更新,您必须明确使用命令 实现接口 选择。
在派生功能块的情况下,您必须确保从接口“继承”采用的方法或属性接收所需的实现,或者如果要使用基础中的实现,则将其删除。您将收到相应的翻译错误消息或警告,由自动插入的 pragma 属性引发。请查看命令的帮助页面 实现接口.
重要
您必须先将功能块的接口分配给接口类型的变量,然后才能通过该变量调用方法。
接口类型的变量始终是分配的功能块实例的引用。
接口类型变量是对功能块实例的引用。这样的变量可以引用任何实现该接口的功能块。如果没有对变量进行赋值,则变量包含在线模式下的值 0
.
界面 I1
包含方法 GetName
.
METHOD GetName : STRING
功能块 A
和 B
每个都实现接口 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); // call with instance of type A DeliverName(l_i := B_instance); // call with instance of type B
调用接口方法:
在这种情况下,这取决于实际类型 l_i
从是否申请 A.GetName
或者 B.GetName
来电。
DeliverName := l_i.GetName();
在新功能模块中实现接口
要求:当前打开的项目至少有一个接口对象。
选择 应用 在设备树中并选择菜单命令 .
对话 添加 POU 打开。
在输入字段中输入新功能模块的名称 姓 一个,例如 POU_Im.
选择 功能模块.
选择 实施的 并点击按钮
.
在入口助手中,从类别中选择 接口 以界面为例
ITF1
并点击 行.要添加另一个接口,请再次单击
并选择另一个界面。
您可以选择拥有一个 访问修饰符 用于选择列表中的新功能模块。
从下拉列表中选择 实现语言 例如 结构化文本(ST) 出去。
点击 添加.
CODESYS 添加功能块 POU_Ex 进入设备树并打开编辑器。第一行说:
FUNCTION_BLOCK POU_Im IMPLEMENTS ITF1
接口及其方法和属性现在插入到功能块下的设备树中,您现在可以在接口及其方法的实现部分输入程序代码。
在现有功能块中实现接口
要求:当前打开的项目有一个功能块,例如 POU_Im 和至少一个接口对象,例如 ITF1.
双击设备树中的 POU POU_Ex(FB).
POU 的编辑器打开。
展开现有的顶行条目
FUNCTION_BLOCK POU_Im
和IMPLEMENTS ITF1
.功能块 POU_Im 实现接口 ITF1.