codesys 面向对象分析 二-CODESYS资源下载区-酷德网 - CoDeSys软件教程下载,CoDeSys工控资讯门户 

酷德网

HSC6490-cn中国制造,中国芯~
查看: 1758|回复: 0

codesys 面向对象分析 二

[复制链接]
  • TA的每日心情
    开心
    2017-11-20 22:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2023-4-12 22:54:35 | 显示全部楼层 |阅读模式
    一、两种指针

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

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

      codesys 面向对象分析 二-1.png

      codesys 面向对象分析 二-2.png

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

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

      codesys 面向对象分析 二-3.png

    3、

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

    ​​
    二、 接口的介绍-INTERFACE

    1、定义

    接口是一个协议、规范;例如电源插座接口,它就是一个规范,中国制定的插座标准;
    codesys 面向对象分析 二-4.png


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

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

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

    codesys 面向对象分析 二-5.png



    (2)使用 上述Driver接口 定义台达电机功能块,并实现点动前进、后退的方法
    1. FUNCTION_BLOCK PUBLIC Driver_Delta IMPLEMENTS Driver
    复制代码
    codesys 面向对象分析 二-6.png



    (3)使用上述Driver接口 定义三洋电机功能块,并实现点动前进、后退的方法
    1. FUNCTION_BLOCK PUBLIC Driver_SANYO IMPLEMENTS Driver
    复制代码
    codesys 面向对象分析 二-7.png



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

    三、功能块实现多态

    1、多态定义

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

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

    (1)定义一个动物功能块(父类),有一个 “叫()”的动作
    1. FUNCTION_BLOCK PUBLIC Animal
    复制代码
    codesys 面向对象分析 二-8.png



    (2)定义一个继承动物的猫功能块,实现 “叫()”的动作
    1. FUNCTION_BLOCK cat EXTENDS Animal
    复制代码
    codesys 面向对象分析 二-9.png



    (3)定义一个继承动物的狗功能块,实现 “叫()”的动作
    1. FUNCTION_BLOCK dog EXTENDS Animal
    复制代码
    codesys 面向对象分析 二-10.png



    (4)我们听一下叫声,不同的动物,只要一个输入参数就可以;
    codesys 面向对象分析 二-11.png



    (5)运行结果
    codesys 面向对象分析 二-12.jpg


    codesys 面向对象分析 二-13.jpg




    继承: Codesys子类继承父类的方法,属性,动作(private可以继承,只是没有访问权限)
    多态:Codesys只支持纯虚函数(只声明,不实现),纯虚属性,有纯虚函数的功能块叫做纯虚类,不能实例化,通过指针的方式实现多态
    继承和多态都是子类的访问权限的问题,要心中有表,不要混淆
    。。。。。。。。。。。。。。
    。-------------------------------------。
    。 。 。 。 。----------------------。
    。 。-------- 。----------------------。
    。 。-------- 。 ---------------------。
    。 。。 。 。-----------------------。
    。-------------------------------------。
    。。。。。。。。。。。。。。
      接口:codesys接口就是只有纯虚函数的FB,接口虽然不能定义指针,但是定义接口对象其内部就是一个指针,如果多少个接口函数或者属性,接口对象开辟的内存空间一样,类似别名;当把一个子类赋值给接口对象的时候,其实是吧子类的指针给接口对象;
    +10
    不赞一个?
    打赏鼓励一下!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

    本版积分规则

    
    顶部qrcode底部
    关注酷德网订阅号,获取更多资讯!

    QQ|Archiver|手机版|小黑屋|酷德论坛 ( 苏ICP备16065247号-1 )|网站地图

    GMT+8, 2026-11-9 03:46 , Processed in 0.151464 second(s), 49 queries .

    酷德网

    © 2001-2013 Hicodesys. 技术支持 by 酷德网

    快速回复 返回顶部 返回列表