无心飞扬 发表于 2023-4-12 22:54:35

codesys 面向对象分析 二

一、两种指针

1、 this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。

形参与成员名字重名,用 this 来区分



2、super 可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类

super 访问父类的方法、属性;super是不能访问父类private修饰的变量和方法的,因为这个只属于父类的内部成员。


3、

this^() 和 super^() 代码子、父实例功能块的主函数;

​​
二、 接口的介绍-INTERFACE

1、定义

接口是一个协议、规范;例如电源插座接口,它就是一个规范,中国制定的插座标准;


每个厂家插座的生产技术、工艺都不一样。插座的内部实现对于电器来说是完全屏蔽的;但任何厂家只要按照插座标准制作,我们的电器就能正常使用。
2、接口优点

接口和实现分离,方便分工协作、应对变化性、测试方便;
分工协作(软件开发):有了接口标准,可以让电源插座和电器不同的人来完成,分开测试,最后方便的整合在一起应对变化性: 有了接口标准,可以方便更换不同厂家的电源插座,而不影响电器的使用;也就是可以方便更换实现接口的类;测试方便 有了接口标准,可以单独测试每个模块,减少其他因素的干扰;
3、codesys 接口举例

要控制一个轴前进后退运动,需要用到电机,需要开发前进 后退功能
(1) 定义电机的一个接口,里面声明点动前进、后退的方法;



(2)使用 上述Driver接口 定义台达电机功能块,并实现点动前进、后退的方法
FUNCTION_BLOCK PUBLIC Driver_Delta IMPLEMENTS Driver

(3)使用上述Driver接口 定义三洋电机功能块,并实现点动前进、后退的方法
FUNCTION_BLOCK PUBLIC Driver_SANYO IMPLEMENTS Driver

(4) 后面还有很多厂家的电机,就不一 一 举例,有了统一的接口,不管什么厂家的电机,直接统一调用进行操作就好
例如定义一个操作电机的函数
FUNCTION DriveForwad : BOOL
VAR_INPUT
        m_dirver :Driver;//声明电机接口变量,不管什么厂家的电机,用统一的输入参数
END_VAR
VAR
END_VARm_dirver.JogForward();在程序中进行应用
PROGRAM PLC_PRG
VAR
m_Driver_Delta:         Driver_Delta;//台达
m_Driver_SANYO:   Driver_SANYO;//三洋
END_VARDriveForward(Driver_Delta);DriveForward(Driver_SANYO);//其他电机等等三、功能块实现多态

1、多态定义

同一个函数接口,实现不同的功能;
比如有动物(Animal)之类别(Class),而且由动物继承出类别鸡(Chicken)和类别狗(Dog),并对同一源自类别动物(父类)之一消息有不同的响应,如类别动物有“叫()”之动作,而类别鸡会“啼叫()”,类别狗则会“吠叫()”,则称之为多态
2、多态定义实现多态有三个必要条件:继承、重写、向上转型。

继承:在多态中必须存在有继承关系的子类和父类。重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备父类调用子类的方法。
3、codesys举例

(1)定义一个动物功能块(父类),有一个 “叫()”的动作
FUNCTION_BLOCK PUBLIC Animal

(2)定义一个继承动物的猫功能块,实现 “叫()”的动作
FUNCTION_BLOCK cat EXTENDS Animal

(3)定义一个继承动物的狗功能块,实现 “叫()”的动作
FUNCTION_BLOCK dog EXTENDS Animal

(4)我们听一下叫声,不同的动物,只要一个输入参数就可以;


(5)运行结果





继承: Codesys子类继承父类的方法,属性,动作(private可以继承,只是没有访问权限)
多态:Codesys只支持纯虚函数(只声明,不实现),纯虚属性,有纯虚函数的功能块叫做纯虚类,不能实例化,通过指针的方式实现多态
继承和多态都是子类的访问权限的问题,要心中有表,不要混淆
。。。。。。。。。。。。。。
。-------------------------------------。
。 。 。 。 。----------------------。
。 。-------- 。----------------------。
。 。-------- 。 ---------------------。
。 。。 。 。-----------------------。
。-------------------------------------。
。。。。。。。。。。。。。。
接口:codesys接口就是只有纯虚函数的FB,接口虽然不能定义指针,但是定义接口对象其内部就是一个指针,如果多少个接口函数或者属性,接口对象开辟的内存空间一样,类似别名;当把一个子类赋值给接口对象的时候,其实是吧子类的指针给接口对象;
页: [1]
查看完整版本: codesys 面向对象分析 二