PLC的面向对象编程(OOP)探秘4-类的代码

PLC面向对象编程类的代码探秘

        在探秘1中,探讨了属性,知道属性是类的代码。这里跟大家探讨类的其他代码。我们还是以一个简单例子开头。(本文档中所有例子的环境是CODESYS V3.5 SP20)

, 图 1

        一,FB中的代码       

        这个我们很熟悉。比如在类FB1中,填写代码

                statVar1 := tempVAR;

        这一行代码就属于FB中的代码。

        这里要注意一点。在非PLC的OOP语言中,是没有FB代码的。FB中有代码完全是历史遗留问题。在IEC61131-3的早期版本中,是没有典型的OOP编程的,但是有FB,FB里面允许有代码。这个特点是沿袭了SIEMENS的S7系列PLC,该系列PLC在1992年就推出到市场了。也就是说1992年的时候FB中就有代码了。到近期的IEC61131-3版本中增加了完全的OOP特性,不过FB中允许有代码这一特点也保留了下来。所以从OOP的角度看FB的代码就有些四不象。下一讲中,会说到OOP在继承时会抛弃这个4不象。

        个人建议,如果用纯OOP思想编程,那么FB中不要添加代码。

        二,Action        

        1,Action的基本概念        

给这个类添加一个ACTION,中文翻译为动作。如图2

,图2

        从图2,我们可以获取3个信息。

        第一,动作没有任何变量声明的位置,也就意味着动作不允许做变量声明。但是可以使用类中的任意变量。

        第二,动作可以对FB声明的任意类型变量做读和写的访问操作。

        第三,从以上2点看,动作实际上是FB中代码的延申或者补充。在某种意义上,可以认为,在FB中的一些代码写在了动作中,只不过动作中的代码可以独立调用。

        2,Action的调用     

        既然是代码,就有调用的问题。在哪里允许调用。这里先给出测试结果:在哪里都可以调用。

        在对象外可以调用,如图3

,图 3

在对象内部可以调用,如图4

, 图 4

在对象内部的其他动作中可以调用,如图5

, 图 5

ACT也可以调用自己形成递归算法。

既然FB内部的动作可以互相调用,那么注意不要形成无限调用死循环。

另外,在方法中也可以调用动作。这里不做例子。

       三,Method        

                1,方法中变量的存活期        

        在FB中,创建一个Meth方法。

   , 图 6

从图6中,可以看出2点:

        1, 方法可以有返回值,本例中的返回值是INT类型

        2,方法中不可以声明临时变量。这是为什么呢?因为除了stat区域声明的变量外,其余变量都是临时变量。所以无需再额外有临时变量的声明区。

        除了stat区域声明的变量外,其余变量都是临时变量。这个结论从下例中得到。

我们首先在方法中,填写代码如图7

 ,图7

        再为执行这段代码编程,如图8

,图8

        执行程序得到执行效果,如图9

,图9

        变量VAR2永远是0。虽然每个周期都累加1,但是因为是临时变量,所以每个周期的初始值是0。但是变量statVAR2也是每个周期累加1,该变量的值可以跨越周期保存。在此我们有个猜想。既然statVAR2变量在STAT区域声明的,那么是不是就象在FB中STAT区声明的变量一样,statVAR2是所有对象共用变量。看图8和图10

,图10

        从图10中观察到变量i1和i2不相等,由此得到一个重要结论,在方法中STAT区域声明的变量存活期不同于类的STAT区声明的变量,而完全等同与类中普通变量。

        到此我们是不是觉得OOP有些复杂呢!

          2,方法中变量的作用域     

        方法中的变量只能在方法内使用。在方法外不可见。

,图 11

        如果方法中有变量名称与对象的变量名称同名,如图11红框的VAR1。在本方法内如果写为VAR1,那么这个变量就是本方法内声明的变量。写法是this^.VAR1 ,那么就是对象的VAR1变量。

         3,方法中访问对象的变量     

        下面的例子,对方法重新定义,如图12

,图12

        从图12得到结论:方法中可以访问除了对象的临时变量外的所有变量。这一点与动作不同。

        如果欲访问的对象变量名称与方法中的变量重名,那么需要加“this^.”。这在第2小节中已经讨论过。

         4,方法的调用     

        1,方法可以在类中调用

,图13

        动作是FB中代码的延申,所以动作中也可以调用方法,如图14。

,图14

        方法也可以在类内部的方法中调用,如图15

,图15

        方法也可以在自己中调用,这就是递归算法,如图16

,图16

        方法也可以在类外部调用,如图17

,图17

           5,与经典OOP的比较

        通过上面的讨论,发现PLC中的OOP的方法与经典OOP高级语言的方法特性是一样。

        四,属性       

        在探秘1中我们就对属性进行了探讨,知道属性就是代码。在本文档中就不做更多的阐述。

        到这里,本文档的内容就结束了。本文档总结了OOP中代码的一些特性。通过前文的讨论,我们知道OOP中代码的特性很复杂。不过好在有本文档在,如果在编写代码过程中对一些特性记忆模糊了,可以到此翻阅。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值