admin 发表于 2023-9-22 23:29:12

CODESYS -- 编程进阶:面向对象的思维

本文介绍基于codesys的新的编程思维,融合了传统plc的按流程编程和高级语言中的面向对象编程,可让程序的架构更加优美,阅读本文前需要对codesys有一定的应用经验。首先介绍几种codesys中关键功能:1、功能块(FUNCTION BLOCK)相比于传统的plc,codesys给予了功能块丰富扩展,1.1 属性、方法、动作:这三类在PRG中也可以使用,可定义为private、internal(子类)、public权限。属性为内部变量的外部访问接口,可以在set、get中设置丰富的变化;方法使用类似函数,可定义输入、局部变量(使用上升沿、timer、counter等需注意);动作仅能使用FB中的变量,相当于给FB中的程序分类。1.2 继承(EXTENDS)codesys FB最大的进步就是支持继承,这让我们的函数变得更加简洁,子类可继承父类的变量、方法、动作(private除外),目前不支持多重继承。1.3 虚类(ABSTRACT)虚类无法实例化,是解决多重继承里命名冲突的问题,由于不支持多重继承,在这里意义并不大。FB的写法,比如针对运动控制,可采用如下方法进行编写:首先编写虚类ABSTRACT FB_MOTION,调用plcopen功能块,在其中实现轴的基本功能控制、状态监控,权限可以设置为internal;其次编写FB_SAXIS,继承自FB_MOTION,在其中实现单轴的控制,并提供控制的入口;再次编写FB_MAXIS,继承自FB_SAXIS,在其中实现多轴的同步、插补控制等,并提供控制的入口。

单轴的功能块

多轴控制功能块2、接口(INTERFACE)接口是一种规范,支持多接口,与功能块、结构体联合使用,可达到很好的效果。3、任务(TASK)codesys的任务类类比线程,可以设置不同的优先级、循环周期,实际的任务是否相互独立与CPU的线程数也有关系。在实际使用过程中,建议分多个任务:运动控制、通讯、设备逻辑控制、HMI,最优先级别为轴运动控制,通讯建议写成非阻塞模式,如果是阻塞模式,一定要独立线程。不同的POU之间可以通过属性实现内部变量的访问。4、指针与引用(POINTER AND REFERANCE)通过指针与引用能极大的提高程序编写效率,由于pointer可以直接加减,在使用时候尤其要注意避免使用空指针,这种情况会造成程序重启。实际使用可结合for循环、sizeof等使用。codesys有一类用于隐式检查的POU,支持除法检测、指针检测等。
关于程序的结构,提出以下思路:在工业控制中,往往存在着复杂的IO点、复杂的执行机构、复杂的流程。在编写时,要结合面向对象和面向流程编程,如何让程序更加简洁优美,是一件很重要的事情。1、运动控制:常采用总线,需要较快的刷新周期,建议采用独立的POU+独立任务,功能块采用面向对象方式编写,我们仅需要一个或多个for循环即可实现所有轴的功能。(这里不实现任何逻辑控制)。2、流程编写:独立的线程,一般不需要太快的刷新周期,流程尽量写在函数中,mian函数只是对其调用。

Main函数
页: [1]
查看完整版本: CODESYS -- 编程进阶:面向对象的思维