基于QT的PLC梯形图编辑系统设计与实现
2019-06-10李驰骎王庭有李应春杨安园
李驰骎 王庭有 李应春 杨安园
摘 要:为了探索PLC梯形图编辑系统的设计方法,从梯形图编程系统设计需求出发,分析传统梯形图网络的不足,采用一种高自由度的网络拓扑结构描述梯形图网络,并根据该网络拓扑结构提出一种分布式存储方案,实现梯形图图元之间的连接关系存储。基于QT图形框架采用面向对象的软件方法实现梯形图标准图元创建、连接关系建立、图元删除等功能。完成梯形图编辑系统设计后,对图元管理、各种指令调用进行编辑测试,结果表明该系统设计方法可行。
关键词:可编程控制器;梯形图;QT;存储结构;图元管理
DOI:10. 11907/rjdk. 181943
中图分类号:TP319文献标识码:A文章编号:1672-7800(2019)002-0072-04
Abstract: In order to explore the design method of PLC ladder diagram (LAD) editor system, we start with the overall requirements of LAD editor system, analyze the shortcomings of the traditional LAD network, and use a high-degree-of-freedom network topology to describe LAD network. According to the network topology, a distributed storage scheme is proposed to implement the storage of connection relationships between LAD primitives. The object-oriented software method based on the QT graphics framework is used to realize the functions of creating ladder diagram standard primitives, establishing connection relationships and deleting primitives. After completing the design of the ladder diagram editing system, we tested the management of graphic elements and various instructions. No problems were found during the process. The results shows that the method of designing the ladder diagram editing system proposed in this paper is feasible.
Key Words: programmable logic controller; ladder diagram; QT; storage scheme; primitive management
0 引言
可編程控制器(programmable logic controller,PLC)在工业控制领域应用广泛, PLC编程软件是推动PLC发展的重要动力[1-2],而编辑系统是编程软件中至关重要的组成部分,它负责梯形图的输入、编辑、显示,各个单元的位置、符号等信息保存,决定了软件的交互性[3]。
国外PLC发展相当成熟,PLC编程软件技术研究较多:Milik A[4]提出了一种多线程执行技术,利用数据流图识别程序的并行性,完成编程语言的编译;Prahofer等[5]采用程序上的模式匹配、控制流、数据流等分析方法,开发静态代码分析工具;Deveza等[6]将指令表作为Matlab/Simulink翻译软件包的输入,实现PLC在Matlab中的仿真;Kim H S等[7]采用二叉逻辑树方法实现梯形图程序的解释;Moonga等[8-10]通过将梯形图映射为AOV图的方法,把梯形图转换为AOV图,且使用双堆栈深度优先搜索算法(TSDFS)实现梯形图到指令表的转换;Asensio等[11]提出了基于IEC61131-3标准和PLCOpen TC6架构的完整工业自动化程序开发环境。
国内PLC编程软件研究主要有:李慧亮等[12]使用FLEC、BISON对指令表进行词法分析和语法分析,进一步完成了中间代码结构设计、目标代码生成器设计,但文中的中间代码结构和目标代码生成器考虑过少,不具备通用性;韩江等[13]将梯形图映射为AOV图,建立梯形图到以邻接矩阵方式存储的AOV图的映射,但由于梯形图串并联关系的复杂性,使用该算法会导致转换不稳定;吴盼盼等[14]采用XML文件描述梯形图图元及其连接方式的存储结构,以类C的脚本语言作为中间语言实现梯形图到指令表的转换,但存储方式和转换方式稍显复杂,支持的指令不多;黄健[15]基于MFC实现图元的数据结构设计,用分层方法存储图元位置关系;杨观赐等[16]提出了以链表与双向二维链表结合的梯形图网络存储结构。
本文对梯形图编辑系统设计方法进行研究。从梯形图编程系统总体需求出发,通过分析梯形图的网络拓扑结构及图元存储方案,提出拓扑结构及对应的图元存储结构,采用面向对象的软件方法实现图元管理功能,该方案在梯形图网络结构上更加人性化,图元存储结构更加简单,对编辑语言转换的复杂度更低,图元管理的各种功能更加健全。
1 系统总体设计
1.1 系统功能
编辑系统在整个编程软件中起着基石作用,可细分为变量模块、图元模块、程序网络模块[17],具体功能细分如图1所示。
1.2 梯形图网络拓扑结构设计
大部分梯形图编程软件的编辑模块采用网格或矩阵固定位置的方式向梯形图网络中添加图元[18-19],这种方式规定每个元件所占网格数,优点是图元连接关系清晰且排版简单,但也有一些缺点:①网络空间利用率低;②图元操作的算法时间复杂度高,串并联关系识别较复杂,如图2所示。
因此,本文不采用固定位置的网络结构而采用元件可以自由移动的网络拓扑结构,这种网络结构不限制梯级中任何一个图元位置,图元之间的连接关系是用户添加的,通过解析连接线唯一得到,与图元位置没有任何关系。删除图元时,只删除和该图元直接相连的连接线,不对其余图元及连接线做任何更新。
本文采用的网络结构以最优方式完整呈现整个梯级网络,同时降低图元存储结构复杂度和图形网络转换复杂度。此外,虽然没有网格会给程序编排带来困难,但通过建立大小随意设置的栅格可以解决问题,元件按照栅格的设置移动,每次只移动一格[20]。
1.3 程序结构设计
基于面向对象的软件开发方法,本文使用Qt图形/视图框架搭建编辑系统的程序结构。图形/視图框架包含图元(QGraphicsItem)、场景(QGraphicsScene)、视图(QGraphicsView)三层结构,分别具有作为场景图形项目的基类、提供图形/视图场景管理器的容器、使场景中的内容可视化功能[21]。
将IEC61131-3标准规定的梯形图图元抽象为图形视图框架中的图元,采用继承QGraphicsItem的方法生成不同的图元,并通过响应图元的鼠标双击事件完成图元信息的修改。图元的管理通过重写场景类QGraphicsScene实现:响应鼠标的单击事件完成图元的连接及图元的添加,响应键盘事件删除图元。最后,考虑到梯形图网络中功能/功能块的使用频率高,增加拖拽添加功能/功能块图元的方式,该过程通过重写图形/视图框架中的视图类QGraphicsView的拖放响应函数完成。面向对象的软件开发方法将软件系统中各个实体抽象为类,然后基于类的继承、封装、消息传送、多态等特性构造软件系统,最后设计各个实体类之间关键信息通信。编辑系统实现结构如图3所示。
2 图元数据结构设计
2.1 图元存储结构设计
采用准确高效的图元存储结构是设计梯形图编辑系统不可缺少的环节。目前,主流的梯形图存储结构有双向链表[22]、分层存储法[23]、三级单向链表[24]。
根据网络拓扑结构提出一种分布式图元存储结构,该存储结构设计如下:①每个图元存储每个输入/输出点对应的连接线集合;②连接线存储起点图元及终点图元。
由于梯形图图元管理系统由Qt图形/视图框架中的场景类QGraphicsScene提供,所以这种分布式存储结构仅仅需要存储图元之间的连接关系,并不需要考虑图元本身的存储,从而降低了存储结构的复杂度,图4为该存储结构的方法示例。
2.2 图元类设计
图元作为梯形图网络中最小的单元,是构造梯形图网络的核心元素,但是图元的多样性决定了不能对每个图元单独设计,因此本文对图元进行类设计。图元类设计思路是:把图元的通用属性抽象成所有图元的基类,然后按照各个图元的不同属性从该基类中派生出具体类,所有图元将基于图形/视图框架中的图元类QGraphicsItem生成。为使图元支持SIGNLA/SLOT操作[25],采用继承QGraphicsItem、QObject的多继承方式实现梯形图图元类设计,图5是图元类的继承关系。
3 图元管理
3.1 图元创建
本文设计的图元采用工具栏按钮添加方式创建。
图元添加工具栏属于主程序实体,和梯形图编辑框架中的图元管理实体属于不同的实体,故无法在对应工具按钮的响应函数中生成图元。通过工具栏按钮添加图元时,需要将图元的型别信息通过SIGNAL/SLOT传递给图元管理实体类,型别信息的传递过程如图6所示。图6中KM_PLC为编程软件主框架类,LD_Viewer为梯形图编辑模块主部件,LD_View为基于图形/视图框架中视图类QGraphicsView的自定义视图类,LD_Scene为基于图形/视图框架的场景类。
自定义图元管理类LD_Scene通过响应鼠标的单击事件完成与当前型别信息相对应的图元类添加。型别信息为字符串类型,无法被new运算符直接使用,为了保证图元添加算法的可伸缩性,采用工厂模式(Object Factory)完成型别信息映射到对应图元类。本文使用map类容器完成型别信息与函数指针之间的映射关系,图元的注册、取消注册、创建分别对应于map容器的添加、删除、查找。
根据上述设计,要在梯形图程序组织单元中产生图形元素必须用到该工厂模式,如果每个程序组织单元都实例化一个全局的BaseItem工厂模式,程序将可能因内存不足而被迫结束。因此,本文将工厂类封装在Singleton模式下,在LD_Scene的构造函数中完成图元注册。
3.2 图元连接关系建立
创建连接关系的实质是确定图元之间的存储关系。起始连接、结束连接信号都是从图元中输入(输出)连接捕捉点发出的,为了区分这两个信号,设计一个公有的bool变量flag作为标记:当flag的值为false时,发射开始连接信号;当flag的值为true时,发射结束连接信号。此外为保证正确的位置绘制连接线起点、终点且实现连接线起始图元的正确存储,在请求连接/结束时需要传递“请求连接位置”及“请求连接捕捉点类型”。
3.4 图元删除
图元删除操作通过重写LD_Scene的键盘响应事件完成(按Del建实现删除)。使用场景类的接口函数selectItem()提取当前所有的选中项目,利用运行时类型识别(run-time type identification,RTTI)技术中的dynamic_cast判断选中的项目类型。由于图元基类的析构函数会删除所有与该图元相连的连接线,所以为了避免二次删除连接线,本文先删除连接线再对选中的项目执行delete操作。
4 软件测试
对系统设计方案进行编辑测试,对图元管理、各种指令调用都进行了测试,结果表明本文提出的编辑系统设计方法可行。图7为梯形图编程实例。
5 结语
本文基于面向对象的软件开发方法实现了PLC梯形图编辑系统设计,通过软件测试证明该方案有良好的应用效果,为后续功能完善的PLC编程软件开发打下了基础,是在目前国内没有完全自主开发的PLC编程软件现状下的一种探索。梯形图是PLC编程语言中最常用的语言,该编程软件的其它模块正在开发中,本文的研究对推进PLC软件发展有着重要意义。
参考文献:
[1] 欧阳三泰,周琴,欧阳希. 软PLC控制技术综述[J]. 电气传动,2005(9):52-54.
[2] GREGOR K,GIOVANNI G,STANKO S. A new approach to PLC software design[J]. ISA Transactions,2003,42(2):167-171.
[3] 赵雨生,高美凤. 一种梯形图编程系统的研究与实现方法[J]. 工业控制计算机,2008(6):34-35.
[4] MILIK A. Multiple-core PLC CPU implementation and programming[J]. Journal of Circuits, Systems and Computers,2018,27(10): 162-185.
[5] PRAHOFER H, ANGERER F, RAMLER R, et al. Static code analysis of iec 61131-3 programs: comprehensive tool support and experiences from large-scale industrial application[J]. IEEE Transactions on Industrial Informatics, 2017, 13(1): 37-47.
[6] DEVEZA T, MARTINS J F. PLC control and Matlab/Simulink simulations: a translation approach[C]. Mallorca, Spain: Emerging Technologies & Factory Automation, 2009.
[7] KIM H S, KWON W H, CHANG N. A translation method for ladder diagram with application to a manufacturing process[C]. Detroit, MI, USA: International Conference on Robotics and Automation, 1999.
[8] MOONGA K H, LINRU Y, SHAOJUN L. Algorithm for compiling unrestricted ladder diagram to IEC 61131-3 compliant instruction list[J]. Lecture Notes in Engineering and Computer Science, 2011, 2191(1): 949-954.
[9] FEN G,NING W. A transformation algorithm of ladder diagram into instruction list based on AOV digraph and binary tree[C]. Hong Kong: IEEE Region 10 Conference, 2006.
[10] YAN Y, ZHANG H. Compiling ladder diagram into instruction list to comply with IEC 61131-3[J]. Computers in Industry, 2010,61(5): 448-462.
[11] ASENSIO J, ORTU?O F, DAMAS M, et al. Industrial automation programming environment with a new translation algorithm among IEC 61131-3 languages based on the TC6-XML scheme[J]. International Journal of Automation and Control Engineering, 2013(2): 47-55.
[12] 李慧亮. 基于IEC61131-3標准的IL语言编译器的设计与实现[D]. 西安:西安电子科技大学,2014.
[13] 韩江,段少磊,夏链,等. PLC梯形图向指令表转化的算法研究与实现[J]. 组合机床与自动化加工技术,2013(11):61-63
[14] 吴盼盼. 梯形图与脚本语言互换方法的研究[D]. 杭州:杭州电子科技大学,2013.
[15] 黄健. 基于ARM与FPGA的PLC及其梯形图编程系统设计[D]. 广州:华南理工大学,2016.
[16] 杨观赐,陈占杰,李少波,等. 面向智能控制的软PLC中梯形图的动态解析方法[J]. 贵州大学学报:自然科学版,2016,33(6):43-47.
[17] 韩兵兵. PLC梯形图编程系统研究与实现[D].广州: 华南理工大学,2013.
[18] 吴玉香,郭建勋,周建香. 嵌入式软PLC编程系统的设计[J]. 控制工程,2010,17(3):363-366.
[19] 胡飞虎,傅亮,刘乐. 基于表格技术的软PLC梯形图编辑软件[J]. 微计算机信息,2009,25(19):227-229.
[20] 徐德刚,黄江波,刘育峰,等. 基于能流的梯形图到指令表转换方法研究[J]. 控制工程,2017,24(2):243-249.
[21] BLANCHETTE J, SUMMERFIELD M. C++GUIQt4编程[M]. 第2版. 北京:电子工业出版社,2008.
[22] 苏淑芝. 软PLC梯形图编程系统的研究与实现[D]. 广州:华南理工大学,2012.
[23] SUMMERFIELD M. Qt高级编程[M]. 北京:电子工业出版社,2011.
(责任编辑:杜能钢)