首页> 中国专利> 一种基于QML技术实现可组装的电力应用软件方法

一种基于QML技术实现可组装的电力应用软件方法

摘要

本发明公开了一种基于QML技术实现可组装的电力应用软件方法,由于主要包括:实现描述电力设备的属性动态扩展;为扩展的电力设备的属性关联具体的功能扩展模块;从而可以实现动态扩展软件中电力设备的属性,将电力设备属性与性的功能模块关联,实现软件与新增功能模块关联,达到在源程序不改动的情况下,扩展功能的效果,使电力设备的运行更加稳定。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-01-07

    授权

    授权

  • 2019-12-10

    著录事项变更 IPC(主分类):G06F8/20 变更前: 变更后: 申请日:20161010

    著录事项变更

  • 2017-04-26

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20161010

    实质审查的生效

  • 2017-03-29

    公开

    公开

说明书

技术领域

本发明涉及电力系统自动化软件监控技术领域,具体地,涉及一种基于QML技术实现可组装的电力应用软件方法。

背景技术

在电力系统自动化监控领域,计算机软件应用广泛,其中以c/c++语言开发的软件占了绝大部分,使用c/c++开发的优势在于该语言容易理解、执行效率高、硬件资源利用充分、可在多种硬件平台上移植。但使用c/c++也有一个要求,那就是程序必须经过编译,生产可执行的代码后,才能在目标机器上运行,这一点给我们带来的直接影响是,对c++软件的任何修改,都要经过重新编译部署后,才能重新运行。这些修改包括软件bug更正、功能增加,是应用软件开发使用过程中不可避免的。目前解决该问题的方式是将软件模块化,采用主程序加动态库的方式开发部署软件,各模块间通过事先设计的接口进行通讯。

在实现本发明的过程中,发明人发现现有技术中至少存在将软件模块化、采用主程序加动态库的方式,在一定程度上解决了该问题。如果,一个改动恰好在组成软件的某一个或几个模块中,则仅修改相关模块,然后重新编译替换这几个模块即可。但是我们遇到的大部分修改都超出这个限制,不仅涉及几个模块,而且涉及模块间的接口,这就导致改动无法限制在小范围内,改动会通过接口的变动蔓延到更大的范围,导致需要编译替换的部分增加。既增加了工作,也增加了软件更新后的风险。

发明内容

本发明的目的在于,针对上述问题,提出一种基于QML技术实现可组装的电力应用软件方法,以实现动态扩展软件中电力设备的属性,实现基于qml技术,将设备属性与新的功能模块向关联,达到在源程序不改动的情况下,扩展功能的效果。

为实现上述目的,本发明采用的技术方案是:一种基于QML技术实现可组装的电力应用软件方法,主要包括:

步骤1:实现描述电力设备的属性动态扩展;

步骤2:为步骤1中扩展的电力设备的属性关联具体的功能扩展模块。

进一步地,所述步骤1包括:

步骤11:为所有的电力设备构建通用的类来描述,使电力系统计算机软件的特定语言编写的部分稳定;

步骤12:为每一种电力设备建立一个QML文件,将所有电力设备的不同属性放置到各自的QML文件中。

进一步地,步骤11中,所述通用的类包括一个用来记录需要加载的QML文件的属性qmlurl、一个用来读取QML文件的方法loadQml()、一个用来解析QML文件,并将其中记录的属性注册到设备的描述类中,构成一个对独特设备描述的方法addDynamicPro()和一个用来为各种属性生成中文解释的方法propertyDescs()。

进一步地,所述步骤2中包括:

步骤21:建立一个功能模块ModelPlugin,通过QML文件加载动态属性并注册动态属性的方法,将该功能模块ModelPlugin的对外接口类ModelInterface注册为可供QML文件直接使用的对象,实现在任意QML文件中可直接使用对外接口类ModelInterface的所有方法;

步骤22:将功能模块ModelPlugin与设备新增的动态属性关联,达到扩展软件功能的目的;

步骤23:在主程序的电力设备类中,加载动态属性的同名QML文件measyc.qml,然后用QML对象的方法调用函数invokeMethod(),直接调用measyc.qml中公开给主程序的接口函数interfaceFunc(),从而通过qml文件就实现主程序与扩展功能模块之间的关联,而不必修改主程序。

进一步地,所述步骤21中通过QML文件加载及动态属性注册的方法,包括以下步骤:

步骤211:判断qmlurl指向的QML文件是否存在,若存在则执行步骤212,否则结束加载和注册过程;

步骤212:通过QML引擎对QML文件进行格式检查,并将QML文件转换为内存中的对象,如果转换成功,则执行步骤213,否则提示用户QML文件中存在错误,并结束加载和注册过程;

步骤213:便利QML对象的所有属性,逐一添加到C++编写的电力设备对象中;

步骤214:为每一个新的动态属性设定汉语注释,并结束加载和注册过程。

本发明各实施例的一种基于QML技术实现可组装的电力应用软件方法,由于主要包括:实现描述电力设备的属性动态扩展;为扩展的电力设备的属性关联具体的功能扩展模块;从而可以实现动态扩展软件中电力设备的属性,将电力设备属性与性的功能模块关联,实现软件与新增功能模块关联,达到在源程序不改动的情况下,扩展功能的效果。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:

图1为本发明实施例描述的一种基于QML技术实现可组装的电力应用软件方法中电力设备软件C++部分和QML的部分关系图;

图2为本发明实施例描述的一种基于QML技术实现可组装的电力应用软件方法中qml文件加载及动态属性注册过程图。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

具体地,一种基于QML技术实现可组装的电力应用软件方法,主要包括:

步骤1:实现描述电力设备的属性动态扩展;

步骤2:为步骤1中扩展的电力设备的属性关联具体的功能扩展模块。

进一步地,所述步骤1包括:

步骤11:为所有的电力设备构建通用的类来描述,使电力系统计算机软件的特定语言编写的部分稳定;

步骤12:为每一种电力设备建立一个QML文件,将所有电力设备的不同属性放置到各自的QML文件中。

步骤11中,所述通用的类包括一个用来记录需要加载的QML文件的属性qmlurl、一个用来读取QML文件的方法loadQml()、一个用来解析QML文件,并将其中记录的属性注册到设备的描述类中,构成一个对独特设备描述的方法addDynamicPro()和一个用来为各种属性生成中文解释的方法propertyDescs()。

所述步骤2中包括:

步骤21:建立一个功能模块ModelPlugin,通过QML文件加载及动态属性注册的方法,将该功能模块ModelPlugin的对外接口类ModelInterface注册为可供QML文件直接使用的对象,实现在任意QML文件中可直接使用对外接口类ModelInterface的所有方法;

步骤22:将功能模块ModelPlugin与设备新增的动态属性关联,达到扩展软件功能的目的;

步骤23:在主程序的电力设备类中,加载动态属性的同名QML文件measyc.qml,然后用QML对象的invokeMethod()方法,直接调用measyc.qml中的interfaceFunc()方法,从而通过qml文件就实现主程序与扩展功能模块之间的关联,而不必修改主程序。

所述步骤21中通过QML文件加载及动态属性注册的方法,包括以下步骤:

步骤211:判断qmlurl指向的QML文件是否存在,若存在则执行步骤212,否则结束加载和注册过程;

步骤212:通过QML引擎对QML文件进行格式检查,将QML文件转换为内存中的对象,如果转换成功,则执行步骤213,否则提示用户QML文件中存在错误,并结束加载和注册过程;

步骤213:便利QML对象的所有属性,逐一添加到C++编写的电力设备对象中;

步骤214:为每一个新的动态属性设定汉语注释,并结束加载和注册过程。

在该方法中,电力应用软件仍遵循模块化设计原则,但模块组装时,不再沿用传统的接口设计方法,而是基于QML技术,设计各功能模块与主程序间的连接,这些连接不需要编译。应用这种方法,当为软件增加功能模块时,可以有效的控制更新范围。

为了实现可组装的电力应用软件,需要实现两点:一是软件中描述的电力设备可以动态扩展属性;二是为新属性关联上具体的扩展模块。本方法实现这两点的具体方案如下。

(1)动态扩展电力设备的属性

为了使软件中C++编写的部分稳定,我们为所有电力设备构建通用的类来描述;又为了展现各种设备的不同属性,我们为每一种设备都建立一个qml文件,将设备的不同属性放到各自的qml文件中。这样,无论以后为设备增加何种属性,都不需要改动C++编写的部分,而只需要在其自己的qml文件中增加相应的属性即可。

软件中C++部分和qml部分的关系如图1所示。图1中,在通用的描述类中,有一个重要的属性:qmlurl,和三个重要方法:loadQml()、addDynamicPro()和propertyDescs()。属性qmlurl用来记录需要加载的qml文件;方法loadQml()用来读取qml文件;方法addDynamicPro()用来解析qml文件,并将其中记录的属性,注册到设备描述类中,这样就可以构成一个对独特设备的描述;由于在编程过程中全部使用英文字符,所以我们使用方法propertyDescs()来为各种属性生成中文解释,方便中文用户使用。整个qml文件加载及动态属性注册的过程如图2所示,

(2)动态属性关联扩展模块

本方法的第一部分实现了为电力设备动态增加属性的功能,但仅仅添加了一些属性还不够,软件的扩展都是功能上的扩展,所以,第二部分要实现为这些新属性关联上新的功能模块。要实现本功能,我们仍以qml为基础,具体步骤分为三步。

第一步,我们开发一个功能模块ModelPlugin,通过qml提供的插件注册方法,将ModelPlugin的对外接口类ModelInterface注册为可供qml文件直接使用的对象,这样,在任意qml文件中可以直接使用ModelInterface的所有方法。

第二步,我们将该ModelPlugin与设备新增的动态属性关联起来,来达到扩展软件功能的目的。这里我们以图1中变压器的“遥测”属性为例,该属性是定义在qml文件中的动态属性,其唯一标志定为measyc,该标志可自由定义,标志确定之后,我们创建一个同名的qml文件measyc.qml,在该文件中定义一个可供主程序,或者说电力设备类使用的接口函数interfaceFunc(),interfaceFunc()中可任意调用ModelInterface提供的方法,这样,就建立起measyc.qml文件和功能模块ModelPlugin之间的关联。

第三步,我们在主程序的电力设备类中,加载动态属性的同名qml文件measyc.qml,然后用qml对象的invokeMethod()方法直接调用measyc.qml中的interfaceFunc()方法,这样通过qml文件就实现了主程序与扩展功能模块之间的关联,而完全不必修改主程序。

通常,c++软件模块之间的接口需要事先设计好,并且接口就是固定在程序内部的,或者说接口就是程序的一部分。任何修改,一旦涉及到接口,则必须重现编译所有使用接口和实现接口的部分。本发明既针对该问题,将接口从c++程序中抽取出来,以不需要编译的QML配置文件来实现,从而尽量减少一个修改对整个软件的影响,并且可以使用该方法扩展原有软件的功能。

本发明的创新点:

(1)基于qml技术,动态扩展软件中电力设备的属性。

(2)基于qml技术,将设备属性与新的功能模块向关联。

(3)基于(1)和(2),实现了软件与新增模块关联,达到在源程序不改动的情况下,扩展功能的效果。

至少可以达到以下有益效果:当大型软件的部分功能需要变更,或者添加功能时,使用该方法可以避免重新编译部署整个软件,将变更限制在小范围内,从而极大的降低变更后的运行风险,提高电力系统运行的稳定性。

最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号