基于QT图形视图框架的PLC梯形图编辑器的设计
- 企业:和利时集团 领域:PLC /PAC/PCC/RTU 领域:智能制造
- 点击数:2404 发布时间:2021-05-17 16:19:54
- 分享到:
针对自主可控可编程控制器上位机组态软件的梯形图编程需求,本文设计了一种梯形图语言编辑器。它基于QT下的图形视图框架,对接口进行了二次封装与扩展,实现了梯形图中各组件的创建、绘制与管理等功能。该梯形图编辑器已成功应用于和利时推出的新一代自主可控PLC编程软件平台,为PLC系统的梯形图逻辑组态提供了支持。
1 引言
PLC作为工业控制系统的重要组成部分,是现代工业自动化的重要支柱。2006年,国务院在发布的《国家中长期科学和技术发展规划纲要(2006-2020年)》中提出建设“核高基”重大科技专项,2015年又提出“中国制造2025”。在此背景下,国产化、自主化已经成为PLC市场发展的重要趋势。QT开发框架因其出色的跨平台性和代码开源的特点,成为开发自主可控软件的优良选择。
IEC 61131-3是旨在规范可编程控制器(Programmable Logic Controller,简称PLC)编程语言的国际标准,经过十多年的发展和完善,已被广大PLC使用者和生产厂商所认可和支持[1]。它是国际电工委员会(IEC)定义的PLC编程系统规范,也是工业控制领域的通用标准。梯形图(Ladder Diagram, LD)被称为PLC的第一编程语言,凭借其直观易学的优点,成为最广泛的编程语言[2]。它作为IEC 61131-3规定的PLC编程语言之一,沿袭自继电器控制电路的术语和符号,具有形象、实用等特点,被称为是“面向生产过程的编程语言”。
和利时推出的新一代自主可控编程软件平台AutoThink V4提供了对梯形图语言的编程支持,完整的LD编程组态支持包括前端的编辑和管理,以及后端的编译和执行。本文主要介绍LD前端编辑器的设计和实现。
2 QT下图形视图框架的介绍
2.1 框架组成
图形视图框架(The Graphic View Framework)是QT中基于MVC(Model View Controller)的软件设计模型开发出来的一个图元管理与交互平台。图1为框架的结构图,它由三部分组成:
(1)场景(QGraphicsScene)
场景是图元对象存储和管理的容器,也是图元存在的逻辑场所,我们创建的图元只有添加到场景中才能进行显示和操作。
(2)视图(QGraphicsView)
视图是整个框架的对外交互接口,负责将场景中特定区域的内容显示出来。在实际使用中,可以对一个场景只添加一个视图,也可以将多个视图附加到同一个场景来显示其不同区域或不同缩放旋转变换下的状况。
(3)图元(QGraphicsItem)
图元是场景中的最基本元件,单个图元支持各种事件响应,多个图元之间可以生成父子组合等层级关系。
图1 图形视图框架结构
2.2 框架特点
(1)图元管理
QT图形视图架构使用了BSP(二叉空间分割树)的数据结构来组织和管理其中的图元,能够支持大场景下百万数量级别的2D图元的快速查找、排序以及实时显示。
(2)坐标系统
图形视图框架中存在三个坐标系统:场景坐标、视图坐标及图元坐标,每个系统都以自己的中心点为原点分别管理自己的坐标,三套系统之间使用映射来进行坐标转换。
(3)图形渲染
框架设计的坐标系统使每个图元仅需负责自己的图形渲染,图形视图框架基于仿射矩阵变换的运算处理能够快速响应缩放、旋转等高级渲染需求。
除此之外,框架支持图元间的z-order深度排序、碰撞检测,以及动画、OpenGL等高级应用,便于之后的高级应用扩展 。
(4)事件处理
图形视图框架中包含一套事件传播架构,支持对场景中图元进行双精度的精确交互[3] 。
3 LD编辑器在AutoThink V4组态软件中的功能
AutoThink V4是和利时研发的自主可控可编程控制系统的上位机软件,它作为系统中的控制算法组态工具,运行于工程师站中,技术人员通过它来进行现场工程的逻辑设备组态。AutoThink V4基于QT环境进行开发,整体模块结构如图2所示,其中框架管理和变量管理主要负责软件的UI展示与人机交互,IEC组态与硬件配置负责编程语言与硬件模块及协议的组态,数据源通过组态、语法分析、指令翻译等一系列处理,经过编译生成二进制形式的目标文件,最终通过在线模块下发给PLC下位机执行指令。
LD组态模块是IEC组态部分的子模块,分为前端编辑器及后端逻辑转换与处理两部分。梯形图编辑器负责梯形图中元件的创建、删除、选中、绘制、语法检查等管理操作,编辑器中的组态数据经过语法检查无误后,将被LD后端转换为一种预定好的中间语法结构传递给编译模块进行处理,生成目标文件下装到硬件设备端,并在在线监控状态下通过编辑器进行调试。
图2 AutoThink V4模块结构图
4 基于QT图形视图框架的梯形图编辑器的设计
4.1 梯形图编辑器的模块结构
本文实现的梯形图编辑器模块结构如图3所示,它基于QT的图形视图框架,采用三层结构。编辑器分别从QGraphicsView、QGraphicsScene、QGraphicsItem继承并实现自己的视图、场景和各元件类。
图3 梯形图编辑器的模块功能图
视图类中放开了鼠标键盘及拖拽等消息的接收,并在其中通过右键菜单响应创建图元管理的交互接口。图元管理与逻辑信息存储在场景类中完成,视图类中的右键菜单响应与场景类通过“信号/槽”机制进行连接,当鼠标点击右键菜单中的命令时,视图类发出信号,场景类接收到该信号开始进行元件的创建、删除、复制粘贴等的操作。为了实现图元的撤销恢复编辑动作,场景类中设计了两个栈结构用于存储撤销与恢复的元件指针。考虑到场景关闭及打开时的内容保存与重建,场景类还继承了QObject,以实现对数据的序列化操作。本文实现了IEC61131-3规定的所有梯形图元件,为了便于元素的管理和组织,还创建了一组抽象的逻辑元件用于表示不同元件之间的连接关系,元件之间可以存在父子包含关系,并以树形结构向下扩展直至到达终端的叶子节点元件,当父元件被删除的时候,它将会遍历删除所有的子元件之后再释放自身资源。除了继承自QGraphicsItem,本文还为所有的梯形图元件定义了一个基类CElement,用于记录其工程所要用到的其他基本特性。
使用这种三层架构很好地将数据的处理与表示进行分离,为数据的组织管理提供了统一的接口,便于分层管理和降低耦合,简化开发过程难度,提高开发效率。
4.2 主要接口封装
本文实现的梯形图编辑器,主要针对以下方面进行了接口的二次封装:
(1)鼠标键盘消息响应
在视图、场景和图元中均重载了keyPressEvent及mousePressEvent函数,用于实现元件在离线状态的选中判断及快捷键等的响应。
(2)图元绘制渲染
因为图形视图框架特有的坐标系统,编辑器中场景和视图类并不负责整体图形的绘制,而是由每个元件单独处理自己的图元渲染。图元在绘制时将以局部坐标系作为参考,以自身包围盒范围为限定进行图形的渲染处理。因此,本文中所有的可见节点元件都重载了paint和boundingRect函数,用于实现选中、离线、在线等不同状况下的图元显示。
(3)拖拽动作响应
梯形图编辑器中需要经常添加自定义或库中的函数和功能块,为了使用方便,需要实现拖拽添加函数块和功能块。因此,在场景、视图和元件类中都分别重载了拖拽系列的函数dragEnterEvent、dragMoveEvent和dropEvent,同时,图元中调用setAcceptDrops函数允许接收拖拽事件。
4.3 事件传递
图4显示了梯形图编辑器中的事件传递流程,视图类接收来自鼠标键盘等外部设备事件或其他视图的拖拽事件,然后将事件传递给场景类,场景类是整个事件传播的中间层,负责将接收到的事件封装后再次传递给对应的元件,并在传递的过程中将自动对事件包含的坐标进行映射转换。如果一个事件在场景中进行了阻塞,那么对应位置的元件将不会再接收到事件。
图4 梯形图编辑器中的事件传递流程
4.4 实现效果
图5为AutoThink V4实际运行时的梯形图编辑器效果图,该编辑器支持梯形图中不同元件的管理操作,支持离线和在线状态下的图形绘制,并能正确处理各种事件的响应,满足梯形图组态编程的前端需求。
图5 梯形图编辑器的实际应用效果图
5 结论
本文基于QT中的图形视图框架设计了一种支持IEC 61131-3标准的梯形图编辑器,并已成功添加到和利时AutoThink V4自主可控PLC编程软件中。该编辑器使用方便、直观,能够对梯形图程序进行逻辑组态,满足工程现场的使用需求。
作者简介
吴锦雯(1982-),女,硕士,工程师,就职于北京和利时智能技术有限公司,主要研究方向为PLC技术、上位机软件。
参考文献:
[1] 张海伟. 和利时IEC 61131-3编程软件平台[J]. 自动化博览, 2016, (6) : 42 – 44.
[2] 陈雪, 刘荫忠, 徐恩松. 基于Qt的软PLC梯形图编辑软件的设计与实现[J]. 计算机系统应用, 2011, 20(12): 64 – 69.
[3] Graphics View Framework. https://doc.qt.io/archives/qt-4.8/graphicsview.html