关于PLC面向对象编程的思考

(整期优先)网络出版时间:2017-02-12
/ 1

关于PLC面向对象编程的思考

蒋一琦

(江苏华电句容发电有限公司江苏镇江212413)

摘要:随着PLC的发展,功能也日益强大,处理器和内存的提升带来了计算性能大幅提高和解决了运行程序大小的限制,并且伴随着编程软件的升级,带来了更多可能的编写模式。在以上背景的情况下,程序的易读性、可维护性与上位机人机界面的结合性将成为PLC相关人员更应关注的重点。

关键词:PLC;程序不足;思考

一、PLC程序存在的不足

目前PLC的编程多是过程导向,PLC的发展可以说是模拟原有继电器接线的逻辑控制的一种电子化、数字化。编程依旧是以线圈、常开触点、常闭触点加模拟量输入输出模块、计时计数模块等构成。在编程中多采用线性逻辑进行编程,因此PLC编程多适用于顺控逻辑,简单的编程也许可读性不错,但是一但对象的实际可执行部分多,整体对象多,就会产生各种连锁、多接触器的情况,对一般工作人员来说可读性就会下降,随之带来的就是可维护性的降低。可维护性的降低在于出现逻辑不清晰,发现问题不迅速,日后维护增改需要牵涉的内容太多。

二、面向对象语言的简介

面向对象语言如Java语言的编写过程中有一个重要环节就是思考(构建)对象,对象的创建需要对程序内的变量或要形成的内容有深刻的了解,进而进行总结,形成一个具有共同属性的功能块,即对象原型。比如人,人的属性有:姓、名、性别、身份证号码,人的状态有:有力气、渴、饿、困,人的动作有:跑、跳、走等,这些是人都具备的共性,而有些人会武术,有些人会写作,当然也有人会PLC,这些就是人的特性。当一个人“出生”,我们会给其取名,给予其身份证号码。虽然会有不少同名同姓的人存在,但是身份证号码可以说是唯一的,因此通过身份证号码便可找到对应的人,这就有点类似数据库构建时对键(key)的设计。那么我们要让身份证为1234X的跑,只需要执行1234X跑这个指令。而1234X能不能跑这件事,会根据其状态决定,而这些都是封装在人这个对象内部的。这样我们就可以将精力更多的放在什么条件下让谁做什么动作。如果不动作我们可以依据身份证号找到此人,了解其状态得知原因。

作者在电厂工作,所以本文接下来的事例内容会以电厂为例。工作中所用PLC型号:PLC编程软件:UnityPro7.2人机交互界面软件:

三、在PLC编程中实现面向对象

实现上述思想,需要运用到DFB功能块。

先让我们来看下帮助文档对DFB功能块的描述:

图1看出该块具有功能块名称、输入输出引脚以及公共变量与私有变量。这些就将构成“对象”。

先以电机控制块为例,电机是控制主体,是电泵、搅拌器等的动力来源,因此可以归类到电机控制块上来。电机控制,需要远近控切换、手自动控制切换,启停控制、紧急情况、启停允许。考虑到与人机界面的联系,启停控制需要有上位机和下位机之分。

那么输入引脚有:远近控(LR)、手自动(AUTO)、上位机启(OPEN_X)、下位机启(OPEN_Y)、上位机停(CLOSE_X)、下位机启(CLOSE_Y)、紧急情况(E)、启允许(Allow_O)、停允许(Allow_C);

输出引脚有:启(OPEN_OUT)、停(CLOSE_OUT),考虑到要人机界面有操作反应,设计启反应(OPEN_RE)、停反应(CLOSE_RE);

如图2,变量名可以以KKS_功能形式进行命名,这样还有个好处,就是在Vijeo?Citect7.20中可以将电机控制封装,只需输入KKS码和远近控信号变量名即可,实现上下位机编程的统一性和便捷性。

关于公共变量和私有变量的使用,我个人建议是全部使用私有变量。私有变量的使用可以使功能块具有可移植性,因为这样内部逻辑封闭,不依赖外部变量的引用,可以确保功能块逻辑性的完整与独立,可以做到一次建立,多处使用的特点。

内部逻辑实现:

图3

图4

图3、图4可以看到功能块内部逻辑编程与PLC其他编程无异,输入以触点形式出现,输出以线圈形式出现,其中可以新建变量(私有变量)。

至此一个电机控制DFB功能块就设计完成,编译通过便可使用,还可导出应用至其他工程。

四、可维护性的体现

当进行缺陷消除时,只需要在编程软件中输入“KKS码+引脚”即可搜索到所有有关内容,此时只要寻找功能块即可。找到功能快后,便可通过查看消缺对象当前在控制系统中的状态。从而判断是允许信号、控制信号、反馈信号和急停信号哪方面出现问题。进而去逻辑中针对查看或是检查硬件情况。从而提高消缺效率。

五、结语

至此PLC面向对象编程的思考就阐述完了,希望为各位提供一个新的思路,在日常系统维护或程序编写过程中获得更高的效率。