今天这个题目是PLC中用OOP方法编程的重要内容-接口。这里讲的接口不是普通意义的数据接口,而是OOP方法中专业接口。接口稍微难以理解。为了让读者朋友们更容易理解接口。本文内容的先后顺序是精心安排的。
一,创建接口
我们首先在CODESYS(V3.5 SP20)下创建一个接口。看看接口是什么样子。如何创建接口不是本文讨论的重点。
,图 1
图1中是在一个应用中创建一个的接口,接口名称是ITF1。接口中可以添加属性和方法。在探秘1中,我们探讨过,属性本质也是代码是方法。所以本文以添加方法为重点。添加属性也类似。
,图 2
我们为ITF1接口添加2个方法,如图2。打开METH1,看到图3
,图 3
从图3,我们观察到:接口中的方法只有方法名称和变量声明区,没有代码区。在本系列的探秘6中我们探讨了子类重写父类的方法,要求是签名一致。在那篇文档中,我们知道签名是什么了。在这里又用到签名这个术语了。上面的黑体字可以用更简练的语言描述:接口的方法只有签名。
如图4,我们向变量声明区添加变量
,图 4
接口的方法变量声明区只允许存在3类变量,输入,输出和输入输出类型变量。
在探秘4-方法中变量的存活期这一小节中,探讨了类方法中各个声明区变量的特性。接口的方法中的变量与类方法中变量特性相同,这里不再赘述。
二,创建类实现接口
我们创建一个类FB1实现这个接口,如图5
,图 5
创建类FB1后,我们在CODESYS软件中可见图6。CODESYS软件自动向类FB1中添加了2个方法。这2个方法的名称和签名与ITF1接口中2个方法的名称和签名相同。
,图 6
FB1中的2个方法名称和签名是不可以更改的。为什么?因为在图5中,编程者规定了FB1要IMPLEMENTS接口ITF1。所谓IMPLEMENTS ITF1的意思就是在类FB1中要实现接口ITF1的2个方法,也就是要向ITF1的2个相同名称和签名的的方法中写代码。
到这里,第一次接触接口的读者朋友们会难以理解,似乎有些混乱。不要急。我们在后续文档-“接口的应用”这一篇中讨论对接口的理解。
顺便提一句,类FB1除了必须实现接口ITF1外,其余的与普通类用法一样。也可以创建自己的属性、方法、变量、动作等。
三,实现接口
前面讲了,实现接口就是要对2个方法进行编程。那么这里编程METH1方法。
, 图 7
对图7进行解释:
1,FB1中的METH1方法与ITF1中的METH1方法签名一致体现在FB1类中的METH1方法的接口变量是由CODESYS自动继承自ITF1的METH1方法的,并且不可更改。
2,除了签名变量继承自接口外,方法内可以声明自己的变量。如图7的VAR1变量。这个变量的特性在探秘4中已经探讨过,这里不赘述。
3,在方法的代码区,填写业务代码。
4,以上这3点共同构成了对ITF1.meth1的实现
类FB1还要对ITF1.meth2方法进行实现。只有全部实现了ITF1中规定的方法和属性后,才可以讲类FB1实现了接口ITF1。这是OOP的一种约束。在后续文档《合逻辑与合理》中,将讨论这种约束。
对meth2方法的实现这里不赘述。
四,实现多个接口
假设还有个接口ITF2,这个接口下有个Meth
, 图 8
在FB1中,声明FB1也要实现接口ITF2
,图 9
那么得到结果是如图10,FB1中多出一个METH方法。
,图 10
从图10,我们就知道ITF1和ITF2中方法的名称不能一样,否则在FB1中就会产生2个名称相同的方法。这是不和逻辑的。但是我就想让2个接口有相同名称方法行不行呢?可以的,这是不常见的用于实现一些特殊功能的架构的设计。在探秘7中我们探讨过,在OOP中,我们的一些架构设计就能够帮助我们实现一些功能。这里也是这个道理。我们看下面的例子。
,图 11
图11中的2个接口中都定义了名称为METH1的方法。FB1声明中要实现这2个接口,那么结果就是图11的情况。不过这里面有个细节,就是2个METH1方法的签名必须一致,否则FB1的METH1的签名无所适从。
很多读者朋友到此还没有意识到,其实FB1的METH1方法有一个重大优势。就是它既实现了ITF1又实现了ITF2。那么在下一篇中这个优势将会探讨。
结束语
接口的基本知识就探讨到这里。那么接口怎么使用呢?下一篇文档《接口的应用》是重点。
384

被折叠的 条评论
为什么被折叠?



