PLC梯形图编程软件实现

2018-01-15 07:52李应春王庭有杨安园
价值工程 2018年1期
关键词:梯形图

李应春+王庭有+杨安园

摘要: 本文使用跨平台的C++应用程序开发框架(Qt)及其图形视图框架(The Graphics View Architecture)以及信号与槽机制,结合C++标准模板库中的链表结构、运行时类型识别等技术,实现了PLC梯形图编程软件的总体框架设计;梯形图语言的主程序、子程序、中断程序的存储及图元的插入编辑操作等功能。

Abstract: This paper uses the cross-platform C++ application development framework (Qt) and its Graphics View Architecture, as well as the signal and slot mechanism, combined with the C++ standard template library linked list structure, run-time type recognition technology to achieve the PLC Ladder diagram programming software overall framework design; ladder language main program, subroutine, interrupt program storage and primitive insert editing operation and other functions.

關键词: 梯形图;Qt;存储结构

Key words: ladder diagram;Qt;storage structure

中图分类号:TP313 文献标识码:A 文章编号:1006-4311(2018)01-0185-03

0 引言

PLC作为一种工控装备,占据了自动化控制领域的半壁江山。在德国提出“工业4.0”,我国部署“中国制造2025”的大环境下,自动化形式越来越严峻,在这样的形式下,PLC的技术改进也就成为了一种必然的趋势。另一方面,虽然我国是PLC的使用大国,但是就最近几年的PLC市场份额来看,我国使用的PLC大多来自欧美和日本。国内的PLC主要应用在小型自动化控制系统中。所以综合来看,开发具有自主知识产权的PLC系统是我国自动化产业发展的必然需要。

梯形图被称为PLC的第一编程语言,凭借其直观易学的优点,成为最广泛的PLC编程语言。梯形图采用图形语言,沿用了继电器的触点、线圈、串并联等术语与图形符号,在计算机和控制技术上称为“面向生产过程的语言”[1]。

Qt使用“一次编写,随处编译”的方式为开发跨平台的图形用户界面应用程序提供了一个完整的C++应用程序开发框架。Qt允许程序开发人员使用应用程序的单一源码来构建可以运行在不同平台下的应用程序,这些平台包括从Windows98到Vista、Mac OS X、Linux以及其他很多基于X11的UNIX[2]。

由于当下工业形式的发展对工业生产的速度和安全提出了全新的要求,Windows系统在工业现场中的非实时性、不安全性得到了进一步暴露。所以开发跨平台的、高效的PLC系统是今后PLC发展的一大趋势。故本文基于Qt平台实现的PLC梯形图编程软件将对开发跨平台的PLC系统有着一定的贡献。因为它结合了C++语言的高效性以及Qt框架的跨平台特性充分体现了以上两个PLC发展的方向。

1 梯形图编程软件的总体框架设计及实现

同任何的软件框架相同,PLC梯形图编程软件的基本框架也包含了基于Qt类——QMainWindow的应用程序主窗口。其中包含基于QMenu的菜单栏、基于QToolBar的工具栏、基于QTabWidget的中央窗口部件、基于QStatusBar的状态栏以及基于QDockWidget的停靠窗口(软件主要构架如图1所示)。中央窗口作为应用程序的主要部分,用QTabWidget来实现梯形图编程时候的主、子、中断程序之间的相互切换。当然,其中QTabWidget中包含的部件是基于Qt图形视图框架的梯形图编辑部分。

从图1中可以看出,中央窗口QTabWidget下面将包含三层结构:QGraphicsView、QGraphicsSecne、QGraphicsItem. 其实这就是整个图形视图框架的三层结构:视图、场景、项目。其中,场景类用于提供一个用于管理位于其中的众多图元的容器,视图类用于显示场景中的图元,一个场景可以供多个视图来表现[3],场景的大小理论上来说是无限大的。图形视图框架的三元素关系如图2所示。由于图形视图框架支持时间传播体系结构,使得图元能够处理鼠标和键盘事件,另一方面来说,图形视图框架通过二叉空间分割树(Binary Space Partitioning,BSP)来提供图元的快速查找。在这样的条件下,该框架能够处理百万级图元的大场景。从而可以轻松的完成梯形图的编辑。

2 梯形图的数据存储结构

在国际电工委推出了IEC61131-3标准后,基本上所有的PLC厂商都在逐渐的向这个标准靠拢。考虑到PLC梯形图编程语言的读写方便性,该标准将各种程序进行必要的划分——使用多种块来组成整个控制程序。所以PLC编程软件必须能对程序进行划分处理,本文主要将控制程序划分成主程序、子程序、终端程序三个部分。其实所有的划分都是在另外一个存储空间中存储不同的梯形图程序,他们的不同点存在于PLC梯形图编程语言到可执行二进制代码的编译过程。由于链表在任何位置插入和删除的速度都比较快,所以本文用QList < QList*>链表的数据结构来存储主程序、子程序、中断程序中的各个程序段。从数据结构中可以看出,存储的内部结构都是以指针的形式来进行存储,这样就可以通过点击菜单动态的添加子程序、主程序、中断程序以及对应各个程序块的不同程序段。

从图1的主框架结构中可以看出,中央窗口部件QTabWidget主要以选项卡的方式来呈现出各个程序块。也就是说,必须在每一个选项卡中添加一个图形视图框架来显示场景。但是这样做将会使程序的内存开支大大增加,故本文结合场景的无限大特点,将场景进行认为的划分。其划分结果如图3所示。通过以上的场景划分,可以在同一个场景中完成所有程序快的显示,大大节省了程序的内存开支。

3 梯形图编辑实现

在梯形图编程语言中,为了让程序的可读性增强。一般将梯形图程序划分成多个程序段组成。在本文的设计中,一个程序段由以下4部分组成:程序段序号区、程序注释、程序段、左母线、分割线。在Qt的图形视图框架下,重写QGraphicsObject来实现程序段。同时采用C++的多态特性结合QPainter来重写梯形图语言的常开触点、触闭触点、定时器等图元.其继承关系如图4所示。

从图中可以看出,程序段中的所有元素都继承自QGraphicsItem。结合C++的RTTI(运行时类型识别),就可以把所有的程序段存入以QGraphicsItem为元素的链表结构中(即QList)。当用户在动态的输入程序段的注释或改变程序段中的元素使得程序段的总高度发生变化时,必须改变该程序段后面的程序段的位置。为了解决这一个问题,采用Qt的信號与槽机制。当程序段的高度发生改变时候,发送相应的高度的改变信号。同时在QMainWindow中重写位置跟新函数就能够完美的解决这个问题。其中值得注意的是,程序段的注释高度该表能够激发自身的高度变化函数。这并不会使得程序段的高度变化信号发射。所以就必须在次应用信号与槽机制的另一个特性:信号的连锁发射。通过connect函数,使得在一个信号发射的同时发射另外一个信号。到此为止,一个基本的PLC编程软件基本开发完毕(如图5所示),其基本功能已经实现,当然还有许多需要改进的地方。

4 总结

本文以C++语言为基础,结合Qt跨平台应用程序框架,主要应用Qt图形视图框架以及C++语言的运行时动态类型识别等技术,实现了PLC梯形图编程软件的框架设计以及程序编辑的基本功能。经过测试,此软件可以运行在Linux和Windows平台上,对于今后开发跨平台的PLC应用程序有一点的贡献作用。

参考文献:

[1]蒲志新,熊永超,熊晓红.PLC梯形图语言编辑功能的软件实现[J].机械,2003,30.

[2]Blanchette H,Summerfield M.C++ Programming with Qt4[M].New York:Prentice Hall,2008:6.

[3]陆文周.Qt5开发及实例[M].北京:电子工业出版社,2015,205.

[4]姜琳.基于单片机的 PLC 设计与实现[D].东南大学,2008.

[5]李洪亮.基于IEC 61131-3 标准的 PLC 仿真系统的研究与设计[D].山东大学,2010.

[6]朱兆斌.嵌入式数控系统软 PLC 模块的研究与实现[D].南京航空航天大学,2009.

[7]吴盼盼.梯形图与脚本语言互换方法的研究[D].杭州电子科技大学,2013.

[8]万伟.PLC编程语言开发平台的设计[D].武汉理工大学,2007.

猜你喜欢
梯形图
PLC梯形图编程系统应用分析
基于VC的梯形图编程软件开发技术
继电器电路转为梯形图教学经验浅谈
PLC编译功能的实现
S7—200PLC基本编程教学案例
数控机床梯形图故障设置方法研究
PLC编程中SFC图转换到梯形图的方法探讨
一种可编程逻辑控制程序的竞态检测方法
PLC梯形图程序设计技巧及应用
软PLC梯形图编辑与指令表生成方法研究