设为首页
收藏本站
注册账号
登录
|
搜索
搜索
本版
文章
帖子
用户
门户
Portal
论坛
BBS
网赚问答
科教问答
平面设计
网站制作
软件开发
网络运维
网教网
»
论坛
›
网教网
›
软件开发
›
CODESYS -- 编程进阶:面向对象的思维
返回列表
发新帖
查看:
77
|
回复:
0
CODESYS -- 编程进阶:面向对象的思维
[复制链接]
别再闹了
别再闹了
当前离线
积分
7
2
主题
3
帖子
7
积分
新手上路
新手上路, 积分 7, 距离下一级还需 43 积分
新手上路, 积分 7, 距离下一级还需 43 积分
积分
7
发消息
发表于 2023-4-21 10:35:52
|
显示全部楼层
|
阅读模式
本文介绍基于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函数
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
快速回复
返回顶部
返回列表