当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]Qt跨平台数字化压力测量分析监控系统的设计与实现

摘要:利用Qt提供的C++应用程序开发框架,以单片机技术、数据库技术为基础,结合学校原有的测量仪器设计了一套包括计算机分析、储存数据的测量监控系统。使用操作简单,人机界面人性化,错误机制的反馈信息能帮助操作者及时处理错误操作,同时单组数据存储帮助学生更好的记录自己数据,为学生提供了一个生动有趣全面的实验平台。
关键词:C++;Qt;数据库;单片机;串行通信

    在应用物理学科的“数字化压力测量”实验装置中,使用了模拟电路,数字电路,传感器与单片机等学科技术知识。为了完成数据采集与分析,单靠单片机技术所构成的硬件系统架构,虽然可以做到实时的监控,但不利于数据处理的深化与更加深入详细分析的表达,数据的记录也会带来误差,为了解决这些问题,让学生能更好的领略到数字化时代的知识,在完成数字化压力测量检测仪的基础上,提出本课题的设计与实现。
    PC机具有强大数据处理,图像显示以及实时监控的能力,利用PC机的这些特点,同时编写友好的应用程序来实现数据的采集与分析,具有特殊意义——能够提升整套测试系统的处理能力的上位机得以呈现。
    Qt提供的C++应用程序开发框架,可以轻松实现“一次编写,随处编译”的跨平台解决方案,编写的应用程序能完美运行于从windows 98到windows 7,从Mac OSX到Linux,从Solaris,HP-UX到其他基于X11的众多Unix平台上。
    这让编写的应用程序可以运行在不同的系统,很大程度上方便移植。

1 总体架构设计
    软件整体架构包括完善的菜单栏、启动画面,工具栏,状态栏和应用程序主界面。软件架构如图1所示。


    由启动画面进入程序主应用程序,主应用程序初始化界面提供一些必要的操作说明,单击清除按钮将会清除说明,然后进入具体应用程序配置,配置完成一些工具按键进入使能状态同时另一些按键进入禁止使用状态。
    软件保留一个按键作为切换测量与监控模式,具体的模式由单片机程序决定,默认为测量模式。
    Qt是由C++体系实现,采用先进的信号槽机制,每一个类对应一个功能,about.cpp中的about类提供软件版本,作者和日期等信息,dis play.cpp中的Clock类提供数据回归分析曲线拟合,fader.cpp中FaderWidget类提供对整体程序弹出窗口中淡入淡出效果,mainwindow.cpp中的MainWindow类提供应用程序主体窗口,win_qextserialport.cpp提供的类用于串口配置底层驱动文件。

2 界面布局设计
2.1 菜单栏、工具栏以及状态栏的实现
    菜单可以让用户浏览应用程序并且可以学会如何处理一些新的事情;上下文菜单和工具栏则提供了对那些常使用的功能进行快速访问的方法;状态栏用于显示状态提示和其他一些临时消息。
    在Q1中实现这3个子窗口是相通的,原理一样,实现手法一样,只是对用户而言看上去不一样。Qt里面有一个类,叫做QAction,QAction保存有关于这个动作,也就是action的信息,神奇的是,QAction能够根据添加的位置来改变自己的样子,如果添加到菜单中,它就会显示成一个菜单项;如果添加到工具栏,它就会显示成一个按钮,QAction有一个属性适用于状态栏显示setStatusTip。通过这个属性可以设置状态栏显示信息。
    example=new QAction(tr(“”),this);
    example->setIcon(QIcon(“”));example->setStatusTip(tr(“”));
    最后给动作添加一个槽,以便实现了信号槽connect(example,SIGNAL(triggered()),this,SLOT())。[!--empirenews.page--]
2.2 添加控件的实现
    在Qt中每一个控件对应于一个类,向窗口或控件添加其他控件只需指定相关类就完成了添加窗口的操作。
2.3 布局组件的实现
    在Qt中使用布局机制来实现控件的位置定位。只要把组件放入某一种布局之中,当需要调整大小或位置的时候,Qt就知道该怎样进行调整。


    Qt一共有3种主要的Layout,分别是:QHBoxLayout水平方向从左到右布局;QVBoxLayout垂直方向从上到下布局;OGridLayout在一个网格中进行布局。图2是整体效果。

3 数据采集存储显示设计
3.1 数据存储
    在测量模式下通过单击获取数据按钮会获得来自单片机系统发送过来的实时测量数据。从数据显示获取系统采集的时间来精确记录数据信息。如果不需要在应用程序界面上显示,可以通过单击写入文件按钮,此时数据将会写入到具体文件中去,操作者可以保存以自己姓名学号为文件名的文件。Qt中通过QFile类访问本地文件系统或者嵌入资源,同时还要使用QTextStream类来操纵文本文件,QTextStream会自动将Unicode编码同操作系统编码进行转化。
3.2 数据分析与拟合
    为了方便学生实验,通过获取每个学生实验数据进行回归分析以及拟合曲线,对应于每个button是由数据增和数据减求得平均值;学生由于误操作导致获取的数据不正确,可以通过单击删除按钮删除该数据,然后重新获取数据。学生可以通过原始数据拟合曲线和回归分析后的拟合曲线进行对比。在Qt中没有具体数据图表控件,因此需要自定义控件。[!--empirenews.page--]
3.3 解决方案
    利用Qt中绘图控件QPainter当获取每个数据时,在屏幕上打印出相对应的点,这样就能拟合出曲线如图3所示。同时利用坐标变换trans late方法重新定义原点,这样更有利于坐标的绘制。


    如图3所示,首先画出网格坐标轴,然后将获取到的数据转化为相对应的具体左边打印出该点:
    paint,drawEllipse(((i+1)*24)+2,-(share[i]/10/5*24)+4,-6,-6);/画点,最后由回归分析拟合出数据表达式。

4 数据库设计
    QtSql模块提供了与平台以及数据库种类无关的访问SQL数据库接口。这个接口由利用Qt的模型/视图结构将数据库与用户界面集成的一套类来集成。
    本应用程序采用微软开发的SQL Setwer2005作为数据库引擎,用户界面采用Qt编写,当系统处于监控模式时,需要数据的实时监控和存储,数据量将非常大使用文件存储不适合,同时利用数据库提供的查询语句Select、修改update、删除delete等语句,可以方便地管理数据库。

5 软件美化
5.1 国际化
    Qt中国际化的方式有很多种,常使用的QTextCodec类和使用tr()函数,前者将编码名称写到代码里面,除非使用Unicode编码,否者编码依然是一个问题,本软件系统设计时使用tr()函数实现应用程序的国际化。同时在main函数中增加一个QTranslator对象,这样应用程序就变成了中文。[!--empirenews.page--]
5.2 淡入淡出效果
    当窗体进行页面切换时,原页面的消失和新页面的显示并不是瞬间切换的,而是逐渐消隐和逐渐显现的过程。


    本应用程序中实现的fader类就是用于实现这种效果,在响应页面切换时,新建一个窗体,此窗体是一个与对话框等尺寸的空白窗体,此窗体由透明逐渐变成不透明就完成了淡入淡出的效果,如图4所示。

6 Qt串口通信
    在Qt中没有特定的串口控制类,采用第三方写的qextserialport类如图5,文件中包含QextSerialBase类,Win_QextSerialPort类,Pos ix_QextSerialPort类,QextSeralPort是所有类的子类,是最高的抽象,它屏蔽了平台特征,使得在任何平台上都可以使用。


    对于串口的读取方式有Polling模式即查询模式还有EventDriven事件驱动模式。
    事件驱动方式就是使用处理串口的读取,一旦有数据到来就会发出readyRead()信号,设计者可以关联该信号来读取串口数据。在事件驱动的方式下,串口的读写是异步的调用读写函数会立即返回,它们不会冻结调用线程。
    而查询方式则不同,读写函数是同步执行,信号不能工作在这种模式下,但这种模式下开销小,需要自己建立定时器来读取串口数据。
    Windows下可以使用两种方式而在Linux下只能使用查询Polling方式。

7 结束语
    本软件测试系统界面直观、友好,数据存储方便,分组存储更能方便学生记录数据。软件能后满足实验室的测量要求,并且省去了繁琐的数据记录、处理的过程。学生可以更直观地观测压力的变化。在通信协议不变的条件下,软件和硬件平台可以分别进行改进、扩展,使其更加完善。应用程序的跨平台性,可以完美运行于各种操作系统,从Windows到Mac OS,从Linux到Unix及一些嵌入式系统上。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭