基于QT的1ToN保护界面平台设计
- 格式:doc
- 大小:267.00 KB
- 文档页数:6
基于QT的1ToN保护界面设计杨永标,成海生(国电南瑞科技股份有限公司,江苏省南京市210003)(NARI Technology Development Limited Company, Nanjing 210003,China)摘要:Qt作为图形用户接口和应用开发而定制的C++软件开发包,由于其跨平台性和易移植性,得到了越来越多的应用。
本文介绍了采用嵌入式Qt开发了基于IEC61850数字化1ToN 保护界面。
给出如何利用Qt进行保护界面架构的设计、功能模块的设计及使用Unicode进行汉字的显示。
结论证实Qt在基于PowerPC8270硬件平台Linux操作系统下运行性能良好,图形显示效果令人满意。
关键词:Qt;1ToN保护界面;模块设计;UnicodeAbstract:Qt as C++ software Kit is customizied by graph user interface and application develop which is applying more and more for its exceeding flat and transplanting easily.This paper introduce developing the digital series1 To N protect interface base on IEC61850 by embedded Qt.And presented howto design protect interface frame and function module and by Qt.also theChinese characters showing by using Unicode in Qt. The result proved that Qt run performace is good in Linux operation base on PowerPc8270 hareware plat,The graph display effect is satefied.Key Words:Qt;1ToN protect interface;module design;Unicode0 引言图形界面已经成为电力系统软件的一个重要组成部分。
通过图形界面展示发布信息和数据,进行交换操作,方便快捷而且直观。
微机保护测控装置的数据、信息显示经历了最早的数码管或者打印机显示,到后来普通字符、点阵液晶的字符或汉字显示,到现在彩色液晶的图形、汉字的综合显示。
近年来,电力系统用户对图形界面显示的要求越来越高。
目前的国内绝大多数主流厂家在高压保护、测控装置或故障录波器等产品中采用了图形界面显示,由于其美观且方便用户操作,功能全面,受到了广大用户的喜爱和推崇。
嵌入式Qt(以下简称Qt)是一个为嵌入式设备上的图形用户接口和应用开发而定制的C++工具软件开发包,如果有嵌入式linux操作系统支持,它可以运行在多种不同的处理器体系上,例如:IntelX86,ARM,MIPS,PowerPC等。
它为在嵌入式设备上开发应用程序提供了标准的API函授,而且这些API函数都是单一的,在不同平台下都是用相同API函数,方便在不同体系结构下进行代码移植。
Qt专门为小型设备提供图形用户界面的应用框架和窗口系统。
提供了丰富的窗口小部件,并且还支持窗口部件的定制,因此它可以为用户提供漂亮的图形界面1ToN保护装置是国电南瑞为河北承德西地110KV变电站工程中开发的基于IEC61850标准的多条线路保护测控一体化装置的简称。
它是国电南瑞和河北承德西地用户为实现基于IEC61850标准的集中式线路保护,在降低成本和提高装置可靠性上做的一次有益的探索。
采用双机冗余,高速ADSP-BF533和强大的PowerPC8270集中管理多条线路的保护和测控功能,同时负责液晶显示和IEC61850数据、信息的转发。
1 1ToN保护总体结构及其功能特点1ToN保护装置采用了分层分模块设计思想。
高速ADSP-BF533负责最大8条线路96路交流量和128路开关量的数据采集、计算和保护逻辑判断及出口,即相当于完成变电站中多个装置保护功能。
PowerPC8270以嵌入式Linux操作系统为软件应用平台,实现与ADSP-BF533之间保护数据、动作事件、操作命令等交换;实现定值的存储和管理;实现IEC61850模型的建立和与主站的数据、信息交换;实现基于Qt的保护界面的显示和管理;实现数据库信息的管理,即相当于实现了变电站中后台监控层的功能,ADSP-BF533与PowerPC8270之间的数据、信息交换通过双口RAM来完成,相当于变电站中装置与监控后台之间的通讯通道。
采用分层的设计思想简化了软件的设计,提高了保护装置的可靠性。
同时我们在PowerPC8270上的软件采取了分模块设计的思想,具体分为数据库管理模块,定值管理模块,IEC61850处理模块和保护界面显示模块。
数据库管理模块负责与ADSP-BF533之间数据、信息的交换,录波数据的存储,IEC61850和界面数据源数据的组织;定值管理模块负责IEC61850模块和保护界面模块中保护定值的管理和保护定值的校验和下发;IEC61850模块负责与站控层设备之间数据、信息的交换,IEC61850模型的创建等;保护界面负责遥测、遥信数据和动作、操作事件的简报显示,遥控、定值和参数校验功能的实现。
图1为1ToN保护系统接口框图图1 1ToN保护系统接口框图Fig 1 The frame of the 1 To N protect system interface 其中保护界面显示模块采用了Qt软件包进行了开发,本文重点讨论基于Qt的1ToN保护界面的功能设计。
2 基于Qt的1ToN保护界面的功能设计2.1 基于Qt的1ToN保护界面总体架构的设计根据通用保护装置液晶界面功能要求及用户的特殊要求,1ToN保护装置应该具备遥测、遥控、遥信、简报窗、保护定值管理功能、参数校验、重要参数设置、用户登录管理及装置接线图显示。
如图2所示图2 保护界面功能设计框图Fig 2 The function design frame of the protect interface Qt程序设计思路清晰,它是面向对象的,容易扩展。
它以main入口函数处开始编程,并且支持命令行参数设置启动选项,通过创建一个Qapplication对象来管理应用程序范围的资源。
在Qapplication对象被执行前,可以创建与用户交互的可视化元素,即窗口部件。
例如按钮、菜单、滚动条和框架都是窗口部件的实例。
主窗口部件可以包含其他窗口部件。
有我们可以通过setGeometry可以确定的坐标定义窗口部件的位置,同时窗口部件总是被隐藏创建,可以避免窗口部件闪烁。
因此我们在未调用show(显示函数)可以初始化创建我们需要的所有窗口部件,可以避免在程序运行过程中被多次动态创建造成系统运行效率低下。
如上图2所示,首先创建了派生于QMainWindow主框架,完成保护描述信息(如线路描述、装置IP地址、定值描述,四遥参数描述等)的读取和初始设置,然后创建派生于QWidget 主窗口部件和状态栏部件。
主窗口部件接着创建派生于QWidget遥测、遥信、遥控数据部件、装置接线图部件和派生于QMainWindow的简报窗口。
状态栏部件创建派于基于QDialog 的用户登录管理、重要参数设置、参数校验对话框和基于QMainWindow的定值管理窗口。
由于QmainWindow类和Qdialog类均派生于Qwidget类,所以它们的创建过程很类似,以创建基于QMainWindow部件为例:被创建对象=new QmainWindow(父对象,“被创建对象名称”,创建标志);//创建对象实例被创建对象->setGeometry(坐标系) ;//设置部件的布局通过Qt创建部件和完成该部件的布局是比较清晰和简单的,用户可以很方便利用Qt 完成保护界面总体架构的设计。
2.2 基于Qt的1ToN保护界面功能模块设计以保护定值管理界面例,介绍Qt如何进行功能模块的设计。
对于保护管理定值界面,根据其功能需求应具备定值召唤和定值修改、定值区号召唤和修改,定值校核范围的设定以及保护开关量和保护采样值的查看。
如图3图3 1ToN保护定值管理界面Fig 3 The value manage interface of 1ToN protect在定值管理界面中,当我们对菜单项或者工具栏进行操作时,需要根据不同的命令显示不同的界面。
这里我们就要使用Qt中另一个特别重要的特性——“信号和槽”,当需要用户的响应命令和相关的处理程序建立联系时,我们只需要调用connect函数即可,调用形式:connect(动作事件对象,SIGNAL(“何种用户动作事件”),部件对象,SLOT(“动作事件的处理函数”));当需要用户需要移除的响应命令和相关的处理程序联系时,我们只需要调用disconnect函数即可,调用形式:disconnect(动作事件对象,SIGNAL(“何种用户动作事件”),部件对象,SLOT(“动作事件的处理函数”))。
这种通信连接关系在程序运行过程中可以随时建立和移除。
如图4为1ToN保护定值管理界面事件响应流程。
如图4 保护定值管理界面事件响应流程Fig 4 The response flow of 1ToN protect value manage interface2.3 基于Qt的1ToN保护界面汉字显示为了方便用户对1ToN保护装置的浏览和操作,我们需要以汉字方式显示。
在通用保护装置的普通液晶需要显示汉字时,常用的方法就是直接读取字库中点阵显示,显然这种方法程序处理起来非常麻烦。
而Qt以本地字符编码方式Unicode很好地解决了这个问题。
Unicode 是一种支持世界上绝大多数书写系统的字符编码标准。
它使用16位取代8位来存储字符,它可以编码大约65000个字符,可以覆盖绝大多数的汉字。
Qt中的类QtextCodec专门可以实现编码字符的转换。
具体实现函数如下:QString gbkstr(const char* chars){QTextCodec* gbk;gbk=QTextCodec::codecForName("GBK");return gbk->toUnicode(chars,strlen(chars));}每次将需要显示的汉字传递给const char* chars后,得到的编码字符就可以在各个部件中显示汉字。