QML语言在显控界面开发中的应用

(整期优先)网络出版时间:2023-10-18
/ 2

QML语言在显控界面开发中的应用

李玉琳 王瑞雪 郭琼 南博  曹蓉

北方自动控制技术研究所 山西太原 030006 

摘要:协议测试主要分为以下四方面:一致性测试、互操作性测试、性能测试、鲁棒性测试。协议一致性测试是协议测试中最为关键的测试,是其他协议测试类型的基础。已经有大量的研究与实践对协议一致性测试做了深入探讨,到目前为止,仍然缺乏系统、有效而实用的协议一致性测试方法。目前的协议一致性测试没有对一致性测试执行全过程研究,难以适应工程化应用的需要。在涉及各类工控设备的软件中,需要和各类工控设备通信。各种工控设备一般都有特殊的协议结构,通用化的测试工具无法直接使用。对于一些特殊测试需求,通用化的测试工具也无法满足。因此,需要研究一种简单易行的协议测试软件。

关键词:协议测试;一致性测试;QML

前言:随着制造业的升级改革,大量的设备生产厂面临着更新换代,用户对数控系统的需求量显著增大,特别是具有友好的人机交互界面以及能够进行快速二次开发的数控系统更受用户的青睐。目前很多数控系统开发商都在开发人性化的人机界面和组态软件,来提高数控系统的开发效率,而华中数控系统目前还缺乏专有的组态软件以及能够运行组态软件的数控系统平台。

1.QML语言概述

QML是一种描述语言,并且它们已经被整合到Qt开发环境中,QtQuick的核心之一就是QML语言。Qt5.0开始程序员使用QquickView类从QT应用程序中载入QML文件,并与之互动。QML元素是先进的图形元素。这些图形元素可以叠加在任意图形界面上,像搭积木那样构建程序界面,这一特性使得QML既可以快速创建新的程序界面,也可以非常方便地改造已有的程序界面,QML还可以在脚本里创建图形对象,并且支持各种图形特效。同时又能跟Qt写的c++代码进行交互,使用起来非常方便。QML为程序开发人员与界面设计人员合作开发程序界面创造了条件。界面设计人员可以通过PhotoShop、Visio等图形开发工具设计出非常漂亮的程序界面,然后Qt程序开发人员在此基础上进行二次开发,将QML图形元素叠加到程序界面上以完成各种功能。

2.协议解析/构造

在描述协议中,总结协议特点,提出以下几个需求:

(1)完全自定义;(2)允许公共模块的嵌套;(3)支持数据绑定;(4)支持枚举类型;(5)支持数组类型;(6)支持选择结构;(7)支持描述协议树。采用xml作为协议描述文件是一种常见的做法,优点是程序结构简单,借用现有的xml文件读取模块,可以方便的完成程序代码的编写。缺点是编辑协议复杂,在描述复杂协议结构时,可读性不够好。对公共模块的嵌套并非天然支持,需要自定义规则。其它格式化文本存在类似的问题。GoogleProtobufbuffers(简称Protobuf)是一种轻便高效的结构化数据存储格式,它用于结构化数据的串行化.Google的protobuf采用完全自定义语法格式的.proto文件格式,为了读取该文件,编写了专用的前端分析,实现了完整的一套解释器。该解释器只支持Google自身的protobuf。

参考Protobuf,自定义一门语言去描述新的软件需求是唯一的方法了。但是在当今软件开发环境下,重复造轮子是不可取的。研究发现QML语法符合上述所有特点。QML是一种声明性语言,是一种可读性很强的语言,旨在使组件能够以动态方式互连,并允许组件在用户界面中易于重用和自定义。QML同时支持自定义数据类型,这样就允许采用QML语法,自定义一个全新的解释语言。

而且QML支持文件的嵌套,直接使用文件名即可引用该类型。Qt自身的属性绑定系统给数据绑定提供了便利。比如上面的文件为Time.qml,那么在其他文件中可以直接使用该类型。

3.QML与C++和Javascript的交互

3.1 QML与C++的交互

QML主要是完成对一些界面的绘制,对于一些需要进行逻辑判断和操作的界面,它并不能很好地实现,在这种情况下,就需要通过C++来完成。因此,如何进行QML与C++的交互就十分重要了,本节将着重介绍两种方法。(1)用C++创建新的QML类型在QML中,要想将一个类或者是对象导出到QML中,必须满足两个前提条件:一、继承自QObject或QObject的派生类;二、使用了Q_OBJECT宏。这两个条件是为让一个类或者是对象能够进入Qt的元对象系统,只有这样这个类的某些方法或属性才能够通过字符串形式的名字被调用,才具有了在QML中被访问的基础条件。在创建完C++类后,就可以通过模板函数qmlRegisterType()来注册:

(2)通过模板函数qmlRegisterType注册后,就可以像调用其它组件一样利用importQtFileMan1.0来使用QtFileMan的函数等资源。QML中调用C++在HNC848型数控系统程序编辑界面中,需要对编辑区域类的代码进行一些逻辑性的操作,比如程序的复制、粘贴、块标记等,这些功能如果只是用QML是不能够实现其使用要求的,因此需要在C++中进行实现。在这种情况下可以将编写的C++文件进行动态编译,生成其对应的.dll文件,而在QML中,.dll文件的使用方法与.qml文件的用法一致,于是就可以按照调用.qml文件的方式调用.

3.2QML与Javascript的交互

Javascript在QML中作为作为一种脚本语言,主要是对QML进行逻辑方面的编程,在QML中对Javascript的使用主要分为两种方式:直接使用和间接调用。(1)直接使用在QML中可以直接调用Javascript中的元素,比如function(),QML主要是一种描述性的编程语言,在QML中一般会使用function()函数来进行逻辑部分的处理。(2)间接调用对于一些共用的函数,用于被调用的频率比较高,如果在各个文件中都写相应的函数,将会造成程序的杂乱无章。可以在外部新建一个publicfun.js文件,在文件中编写这个公共函数,实现它的功能,然后无论哪个.qml文件想要调用该函数,只需在文件开始位置输入语句import"../../publicfun.js"asPublicFun,就可以在对应的地方通过PublicFun.function()来使用publicfun.js文件中的function()函数。

3.3程序关键字高亮显示功能的实现

在HNC848型数控系统中有程序代码显示的地方主要集中在两个方面:(1)程序编辑区;(2)其他程序预览区。由于程序编辑区和程序预览区的实现方式不一样,这就造成了在实现程序关键字高亮显示时方法的不同。程序编辑区由于程序编辑区是采用C++编写的,它支持对字符的查找和替换和字符格式设置等操作,这在一定程度上为在程序编辑区实现关键字的高亮显示提供了方法,可以按照这个思路通过对关键字的查找,然后再对关键字进行字体颜色设置,而对于程序的注释功能,则可以通过块标记的方法将注释部分选中,然后再进行颜色设置。QT中的文本格式分为两种:纯文本和富文本,纯文本只支持对字符的逻辑操作,而不支持像字体、颜色等的操作,该程序编辑界面使用的是纯文本格式,经过测试,它能够支持对20M左右大小的文件的载入,基本上能够达到现在数控系统市场上的普遍标准,但是该格式并不能满足对系统功能的要求。为采用富文本格式编写的程序编辑区,它能够满足对关键字颜色进行设置的要求。

设定关键字主要是通过一个数组来定义,其中包含的关键字只是其中常用的一部分,在接下来的优化过程中会通过以下方法来实行:将所有关键字集中在同一个文件中,在进行关键字查找时,将该文件导入进来,来实现所定义数组的功能。定义完关键字后,通过一个循环语句对数组里的每一个关键字进行查找、选中、设置颜色等操作。在进行颜色设置时,需要考虑到程序编辑界面和普通的富文本编辑器具有相同的功能,当设置完一个关键字后,编辑器会默认该格式为接下来输入的格式,因此为了避免出现在关键字后进行普通字符输入时颜色与关键字一样的问题,需要在进行了颜色设置的关键字后,对关键字后的光标进行颜色设置,使其恢复默认的格式。

4.结束语:

综上所述,基于QML的协议测试软件具有通用性和可扩展性,适用于对工控设备软件的协议测试。能够完成协议一致性测试、异常测试、压力测试。在实际工程实践中验证发现,该软件能提高工控类软件开发效率和提高质量。

参考文献

[1]葛泽文.《基于自定义通信协议的动态测试技术研究》[J].数字技术与应用,2019.37(9):90-92.

[2]李强.《协议一致性测试研究进展》[J].西南科技大学学报,2013.28(4):85-92.

[3]王倩.《基于XML的6LoWPAN协议一致性测试系统的设计与实现》[D].南京邮电大学,2013.

[4]阮涛.《一种应用于工业控制系统的模糊测试方法》[J].自动化应用,2015.6:42-48.