CN112527268B - 一种面向高性能复杂测试测量应用的软件开发系统 - Google Patents
一种面向高性能复杂测试测量应用的软件开发系统 Download PDFInfo
- Publication number
- CN112527268B CN112527268B CN202011489304.0A CN202011489304A CN112527268B CN 112527268 B CN112527268 B CN 112527268B CN 202011489304 A CN202011489304 A CN 202011489304A CN 112527268 B CN112527268 B CN 112527268B
- Authority
- CN
- China
- Prior art keywords
- plug
- labview
- instance
- interface
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000005259 measurement Methods 0.000 title claims abstract description 32
- 238000012360 testing method Methods 0.000 title claims abstract description 32
- 238000011161 development Methods 0.000 claims abstract description 58
- 238000012545 processing Methods 0.000 claims abstract description 49
- 230000006870 function Effects 0.000 claims abstract description 35
- 238000004364 calculation method Methods 0.000 claims abstract description 15
- 230000008901 benefit Effects 0.000 claims abstract description 7
- 238000010276 construction Methods 0.000 claims abstract description 7
- 230000001133 acceleration Effects 0.000 claims abstract description 6
- 238000004891 communication Methods 0.000 claims description 35
- 230000005540 biological transmission Effects 0.000 claims description 34
- 230000007246 mechanism Effects 0.000 claims description 33
- 238000009877 rendering Methods 0.000 claims description 22
- 230000003993 interaction Effects 0.000 claims description 14
- 230000000903 blocking effect Effects 0.000 claims description 11
- 238000000034 method Methods 0.000 claims description 10
- 238000004458 analytical method Methods 0.000 claims description 6
- 230000008878 coupling Effects 0.000 claims description 5
- 238000010168 coupling process Methods 0.000 claims description 5
- 238000005859 coupling reaction Methods 0.000 claims description 5
- 238000003860 storage Methods 0.000 claims description 5
- 230000004044 response Effects 0.000 claims description 4
- 230000001960 triggered effect Effects 0.000 claims description 4
- 230000000007 visual effect Effects 0.000 claims description 2
- 230000009286 beneficial effect Effects 0.000 abstract description 3
- 238000007405 data analysis Methods 0.000 abstract description 2
- 230000007774 longterm Effects 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000005538 encapsulation Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000004075 alteration Effects 0.000 description 1
- 230000010485 coping Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种面向高性能复杂测试测量应用的软件开发系统,利用一个框架,一套代码库,基于同一套用户界面及标准,将C++/Qt和LabVIEW相结合、并发挥两种编程语言和平台的优势,其中,C++/Qt作为主框架开发语言,充分利用其对高性能并发计算、跨平台构建、复杂用户界面支持、异构计算加速的特点;本发明的有益效果是:通过此软件开发模式和架构,在开发高性能复杂测试测量应用时,开发人员可以采用C++/Qt构建图形用户界面和数据分析处理主框架,并充分利用LabVIEW丰富的硬件接口驱动库、信号处理库和用户界面库快速搭建硬件和软件功能插件应用程序,从而大大提升高性能复杂软硬件系统的开发效率。
Description
技术领域
本发明属于电子信息测试测量技术领域,具体涉及一种面向高性能复杂测试测量应用的软件开发系统。
背景技术
测试测量领域中,LabVIEW是最为流行的开发工具。LabVIEW是由美国国家仪器公司推出的、主要面向计算机测控领域的虚拟仪器软件开发平台, 是一种基于图形开发、调试和运行的集成化环境。LabVIEW提供很多外观与传统仪器显示和控制组件类似的图形界面控件,可用来方便快速地创建虚拟仪器图形用户界面;同时,LabVIEW具有非常丰富的硬件接口驱动库和信号处理库,可以用来快速构建需要硬件I/O交互和信号处理的应用程序;使用LabVIEW做程序开发主要利用图标和连线以数据流的方式编程,可以在开发时同步完成编译和部分调试工作,因此可以非常高效快捷地完成测试测量应用程序。
在测试测量领域中,大部分的应用程序开发需求都是定制化、轻量化,用户界面需求类同,同时测试测量系统研制周期一般比较短,开发团队小,软件产品迭代少;此类应用非常适合利用LabVIEW进行开发。
不过,随着电子信息技术的发展,复杂的中大型测试测量和仿真应用需求正越来越多,比如雷达、通信、图像、超声信号通道数多、数据量大、运算复杂的应用;这些应用需要管理复杂的信号测量、传输和计算子系统,并对大量数据进行实时处理和分析,信息显示的复杂度和用户交互的复杂度也都越来越高。LabVIEW受限于其UI和程序控件的预设属性和功能,应用程序功能开发受到诸多限制;同时,因为LabVIEW诞生于上世纪80年代,其架构无法受益于最新的计算机技术发展,难以充分利用最新的计算技术和图形处理能力,不能有效满足实时和复杂的处理计算和图形显示的需求。此外,LabVIEW图形化开发的设计原理导致程序文件之间耦合性高,对运行引擎和各类功能库文件的版本依赖度高,LabVIEW各版本之间程序向前和向后兼容性较差,使得中大型开发团队的联合开发和大型项目的长期开发迭代维护都遇到诸多挑战。
在高性能程序开发领域,尤其是需要利用CPU、GPU、DSP,乃至FPGA进行异构计算的场合,C/C++语言是不二选择。
C++是在C语言基础上开发的一种集面向对象编程OOP、泛型编程和过程化编程于一体的编程语言,是C语言的超集;C++继承了C语言高效、简洁、快速和可移植性的传统,同时其面向对象的特性带来了全新的编程方法,用以应付复杂程度不断提高的现代编程任务。
在利用C++进行程序开发时,通常也会辅以Qt开发框架;Qt是一个C++应用程序框架,以其GUI(图形用户界面)库而著称,也同时具有多线程、数据库访问、图像处理、音视频处理、网络通信、文件操作相关的功能。
C++和Qt都具有高效和高可移植性,具有强大的生态体系,支持跨平台构建;C++/Qt非常适合有跨平台要求,以及规模大、用户界面交互复杂、开发团队较大的场合,特别在军工、能源和嵌入式领域有广泛应用;不过,C++/Qt开发复杂度高,对团队整体技术能力有比较高的要求;此外,C++/Qt的GUI控件和功能并没有针对测试测量应用进行特别优化,也缺少针对各式仪器和硬件的驱动支持和丰富的信号处理库,如果完全以C++/Qt完成测试测量程序的开发,都难免做相当多的基础功能组件的开发,这些因素都导致了较低的开发效率,不适合有敏捷开发和大量定制功能要求的测试测量应用。
为了兼顾复杂应用程序和界面开发、新功能快速实现、丰富硬件I/O、高性能计算、中大型团队联合开发和长期迭代维护的需求,为此我们提出一种面向高性能复杂测试测量应用的软件开发系统。
发明内容
本发明的目的在于提供一种面向高性能复杂测试测量应用的软件开发系统,兼顾复杂应用程序和界面开发、新功能快速实现、丰富硬件I/O、高性能计算、中大型团队联合开发和长期迭代维护的需求。
为实现上述目的,本发明提供如下技术方案:一种面向高性能复杂测试测量应用的软件开发系统,利用一个框架,一套代码库,基于同一套用户界面及标准,将C++/Qt和LabVIEW相结合、并发挥两种编程语言和平台的优势,其中,
C++/Qt作为主框架开发语言,充分利用其对高性能并发计算、跨平台构建、复杂用户界面支持、异构计算加速的特点;
LabVIEW作为插件开发语言,充分利用其快速界面和应用程序构建、丰富的硬件I/O支持、丰富信号处理函数库支持、多线程和FPGA支持的特点。
作为本发明的一种优选的技术方案,还包括让C++/Qt与LabVIEW相结合,并满足高性能复杂测试测量应用各业务的并行迭代的两套机制。
作为本发明的一种优选的技术方案,所述两套机制包括插件服务机制、数据通信机制,其中,插件服务机制满足两种开发语言所建立的用户界面和应用程序的结合及扩展;数据通信机制满足两种开发语言所建立的程序产生的数据的交互,以及协同完成两种开发语言所建立图形用户界面的渲染和显示。
作为本发明的一种优选的技术方案,C++/Qt和LabVIEW相结合,整体数据处理流程包括如下两种形式:
LabVIEW插件实例负责硬件控制、信号获取和处理并产生数据,C++/Qt主框架负责数据的传输、计算、分析、存储、显示及渲染;
C++/Qt主框架负责数据的产生、处理和传输,LabVIEW插件实例负责数据的分发、硬件控制和信号播放。
作为本发明的一种优选的技术方案,LabVIEW和C++/Qt所构建的程序实例需要基于不同线程来完成,LabVIEW插件实例与C++/Qt主框架不同线程间的数据通信需要利用非阻塞式数据队列。
作为本发明的一种优选的技术方案,还包括硬件驱动模块、且硬件驱动模块用于对数据采集硬件进行配置和控制。
作为本发明的一种优选的技术方案,还包括异构计算模块、且异构计算模块用于对所获取的数据进行高速处理和计算。
作为本发明的一种优选的技术方案,还包括数据渲染模块、且数据渲染模块用于对数据进行图表绘制和视景呈现。
作为本发明的一种优选的技术方案,还包括程序更新模块、且程序更新模块用于对程序和数据进行升级更新。
与现有技术相比,本发明的有益效果是:
通过此软件开发模式和架构,在开发高性能复杂测试测量应用时,开发人员可以采用C++/Qt构建图形用户界面和数据分析处理主框架,并充分利用LabVIEW丰富的硬件接口驱动库、信号处理库和用户界面库快速搭建硬件和软件功能插件应用程序,从而大大提升高性能复杂软硬件系统的开发效率,有助于兼顾复杂应用程序和界面开发、新功能快速实现、丰富硬件I/O、高性能计算、中大型团队联合开发和长期迭代维护的需求;
(2)通过设计的程序更新模块,提高版本迭代升级的效率。
附图说明
图1为本发明的结构示意图;
图2为本发明的主框架调用插件顺序结构示意图;
图3为本发明的数据通信机制结构示意图。
实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例
请参阅图1、图2和图3,本发明提供一种技术方案:一种面向高性能复杂测试测量应用的软件开发系统,利用一个框架,一套代码库,基于同一套用户界面及标准,将C++/Qt和LabVIEW相结合、并发挥两种编程语言和平台的优势,其中,
C++/Qt作为主框架开发语言,充分利用其对高性能并发计算、跨平台构建、复杂用户界面支持、异构计算加速的特点;
LabVIEW作为插件开发语言,充分利用其快速界面和应用程序构建、丰富的硬件I/O支持、丰富信号处理函数库支持、多线程和FPGA支持的特点。
由于LabVIEW自身具有完整的程序执行和界面渲染机制,并进行了较高程度的封装,为了能让C++/Qt与LabVIEW相结合,同时满足高性能复杂测试测量应用各业务的并行迭代,需要:
设计一套插件服务机制来满足两种开发语言所建立的用户界面和应用程序的结合及扩展;
设计一套数据通信机制来满足两种开发语言所建立的程序产生的数据的交互,以及协同完成两种开发语言所建立图形用户界面的渲染和显示。
插件服务机制
插件是一种遵循一定规范的应用程序接口编写出来的程序,利用C++/Qt作为主框架程序,LabVIEW作为功能实现插件接入到主框架程序,其需要:
1.主框架提供一组服务,约束功能实现插件对主框架可控制的边界,服务接口定义颗粒度较高,耦合度和复杂度较小;
2.主框架定义一种契约,通过约定协议规则让主框架程序发现和识别插件,并通过插件管理模块来维护插件。
具体方案如下(对应说明书附图图1):
1.C++/Qt作为主框架程序实现,提供一套服务接口Create/Destroy、Start/Stop、Read/Write、CreateWindow;
2.具体功能插件可以用C++或者LabVIEW来实现,实现方式需要符合主框架程序的接口规范,本发明以LabVIEW来实现功能插件;
3.插件以动态链接库DLL方式提供,其名称、路径、接口协议需要满足主框架的契约。
主框架调用插件顺序如下(对应说明书附图图2):
1.主框架扫描指定路径的文件,满足约定规则的DLL会被加载;
2.针对加载成功的DLL,主框架会调用Create接口创建插件实例,并针对实例进行管理,LabVIEW在响应Create接口调用时,将进行一系列初始化操作,比如软件和硬件的初始化、参数的初始化,并对Create操作成功与否进行反馈,通过返回值传给主框架;
3.主框架调用CreateWindow创建插件实例窗口,LabVIEW插件实例在响应CreateWindow接口调用时,将获取自身窗口参数并通过传参的方式传递给主框架,主框架根据返回的窗口参数进行各项窗口设置;至此LabVIEW插件实例窗口得以创建;
4.针对创建成功的LabVIEW插件实例,主框架会调用其DLL里提供的Start接口,如果LabVIEW响应Start成功,则开始运行插件功能;如果LabVIEW响应Start失败,则主框架将LabVIEW插件实例移除管理、关闭并销毁;
5.主框架调用Start接口成功后,通过调用Read/Write接口,实现基于C++/Qt的主框架和基于LabVIEW的插件实例的数据通信,数据通信分两种处理方式:针对状态量传递,通过传参和返回值进行数据通信;针对大数据量传输,通过队列的方式进行;
6.当主框架中的插件实例被触发退出时,主框架会依次调用已管理的插件实例提供的Stop接口实现插件实例的关闭;
7.主框架针对调用Stop接口成功的插件实例,会进行Destroy接口调用,释放掉插件实例申请的资源,并对插件实例进行销毁。
数据通信机制
要将C++/Qt和LabVIEW相结合,则两者之间的数据通信必不可少,整体数据处理流程主要有如下两种形式:
1.LabVIEW插件实例负责硬件控制、信号获取和处理并产生数据,C++/Qt主框架负责数据的传输、计算、分析、存储、显示及渲染;
2.C++/Qt主框架负责数据的产生、处理和传输,LabVIEW插件实例负责数据的分发、硬件控制和信号播放。
为满足高性能应用所需要的并行性,LabVIEW和C++/Qt所构建的程序实例需要基于不同线程来完成,既能提高了程序的执行吞吐率,又能把进程中负责I/O处理与人机交互的部分并行执行。
针对大数据量传输,为满足并发性,LabVIEW插件实例与C++/Qt主框架不同线程间的数据通信需要利用非阻塞式数据队列。
这套机制限定了LabVIEW与C++/Qt线程间大数据交互只能通过该队列,而相关的数据操作则被各自所隐藏;这里的非阻塞式数据队列定义为:基于链接节点的无界线程安全队列;采用先进先出的规则对节点进行排序;当我们添加一个元素的时候,会添加到队列的尾部;当我们获取一个元素时,它会返回队列头部的元素;在多个线程并发执行时,并不会阻塞线程;同时,该队列只有一个消费者(C++线程)和一个生产者(LabVIEW线程)同时使用,消费者和生产者之间在时间上没有依赖性,利用先进先出的特性保证数据的顺序性。
具体方案如下(对应说明书附图图3):
1.C++/Qt主框架工作线程初始化一个非阻塞队列,队列大小可根据实际配置,队列中每个节点信息包括数据内容及数据大小;
2.LabVIEW数据采集实例线程或信号处理实例线程,在完成操作后调用队列Put接口(该接口由C++主框架提供),把数据插入到队列末尾;
3.C++/Qt主框架工作线程调用队列Pop接口,把数据取回后交给处理和渲染线程进行计算和显示。
通过以上方式,就能让C++/Qt、LabVIEW窗口在一个应用软件中同时工作,充分利用了LabVIEW的快速开发能力和C++/Qt的灵活开发能力,准确和快速响应用户需求。
实施例
请参阅图1、图2和图3,本发明提供一种技术方案:一种面向高性能复杂测试测量应用的软件开发系统,利用一个框架,一套代码库,基于同一套用户界面及标准,将C++/Qt和LabVIEW相结合、并发挥两种编程语言和平台的优势,其中,
C++/Qt作为主框架开发语言,充分利用其对高性能并发计算、跨平台构建、复杂用户界面支持、异构计算加速的特点;
LabVIEW作为插件开发语言,充分利用其快速界面和应用程序构建、丰富的硬件I/O支持、丰富信号处理函数库支持、多线程和FPGA支持的特点。
由于LabVIEW自身具有完整的程序执行和界面渲染机制,并进行了较高程度的封装,为了能让C++/Qt与LabVIEW相结合,同时满足高性能复杂测试测量应用各业务的并行迭代,需要:
设计一套插件服务机制来满足两种开发语言所建立的用户界面和应用程序的结合及扩展;
设计一套数据通信机制来满足两种开发语言所建立的程序产生的数据的交互,以及协同完成两种开发语言所建立图形用户界面的渲染和显示。
插件服务机制
插件是一种遵循一定规范的应用程序接口编写出来的程序,利用C++/Qt作为主框架程序,LabVIEW作为功能实现插件接入到主框架程序,其需要:
1.主框架提供一组服务,约束功能实现插件对主框架可控制的边界,服务接口定义颗粒度较高,耦合度和复杂度较小;
2.主框架定义一种契约,通过约定协议规则让主框架程序发现和识别插件,并通过插件管理模块来维护插件。
具体方案如下(对应说明书附图图1):
1.C++/Qt作为主框架程序实现,提供一套服务接口Create/Destroy、Start/Stop、Read/Write、CreateWindow;
2.具体功能插件可以用C++或者LabVIEW来实现,实现方式需要符合主框架程序的接口规范,本发明以LabVIEW来实现功能插件;
3.插件以动态链接库DLL方式提供,其名称、路径、接口协议需要满足主框架的契约。
主框架调用插件顺序如下(对应说明书附图图2):
1.主框架扫描指定路径的文件,满足约定规则的DLL会被加载;
2.针对加载成功的DLL,主框架会调用Create接口创建插件实例,并针对实例进行管理,LabVIEW在响应Create接口调用时,将进行一系列初始化操作,比如软件和硬件的初始化、参数的初始化,并对Create操作成功与否进行反馈,通过返回值传给主框架;
3.主框架调用CreateWindow创建插件实例窗口,LabVIEW插件实例在响应CreateWindow接口调用时,将获取自身窗口参数并通过传参的方式传递给主框架,主框架根据返回的窗口参数进行各项窗口设置;至此LabVIEW插件实例窗口得以创建;
4.针对创建成功的LabVIEW插件实例,主框架会调用其DLL里提供的Start接口,如果LabVIEW响应Start成功,则开始运行插件功能;如果LabVIEW响应Start失败,则主框架将LabVIEW插件实例移除管理、关闭并销毁;
5.主框架调用Start接口成功后,通过调用Read/Write接口,实现基于C++/Qt的主框架和基于LabVIEW的插件实例的数据通信,数据通信分两种处理方式:针对状态量传递,通过传参和返回值进行数据通信;针对大数据量传输,通过队列的方式进行;
6.当主框架中的插件实例被触发退出时,主框架会依次调用已管理的插件实例提供的Stop接口实现插件实例的关闭;
7.主框架针对调用Stop接口成功的插件实例,会进行Destroy接口调用,释放掉插件实例申请的资源,并对插件实例进行销毁。
数据通信机制
要将C++/Qt和LabVIEW相结合,则两者之间的数据通信必不可少,整体数据处理流程主要有如下两种形式:
1.LabVIEW插件实例负责硬件控制、信号获取和处理并产生数据,C++/Qt主框架负责数据的传输、计算、分析、存储、显示及渲染;
2.C++/Qt主框架负责数据的产生、处理和传输,LabVIEW插件实例负责数据的分发、硬件控制和信号播放。
为满足高性能应用所需要的并行性,LabVIEW和C++/Qt所构建的程序实例需要基于不同线程来完成,既能提高了程序的执行吞吐率,又能把进程中负责I/O处理与人机交互的部分并行执行。
针对大数据量传输,为满足并发性,LabVIEW插件实例与C++/Qt主框架不同线程间的数据通信需要利用非阻塞式数据队列。
这套机制限定了LabVIEW与C++/Qt线程间大数据交互只能通过该队列,而相关的数据操作则被各自所隐藏;这里的非阻塞式数据队列定义为:基于链接节点的无界线程安全队列;采用先进先出的规则对节点进行排序;当我们添加一个元素的时候,会添加到队列的尾部;当我们获取一个元素时,它会返回队列头部的元素;在多个线程并发执行时,并不会阻塞线程;同时,该队列只有一个消费者(C++线程)和一个生产者(LabVIEW线程)同时使用,消费者和生产者之间在时间上没有依赖性,利用先进先出的特性保证数据的顺序性。
具体方案如下(对应说明书附图图3):
1.C++/Qt主框架工作线程初始化一个非阻塞队列,队列大小可根据实际配置,队列中每个节点信息包括数据内容及数据大小;
2.LabVIEW数据采集实例线程或信号处理实例线程,在完成操作后调用队列Put接口(该接口由C++主框架提供),把数据插入到队列末尾;
3.C++/Qt主框架工作线程调用队列Pop接口,把数据取回后交给处理和渲染线程进行计算和显示。
通过以上方式,就能让C++/Qt、LabVIEW窗口在一个应用软件中同时工作,充分利用了LabVIEW的快速开发能力和C++/Qt的灵活开发能力,准确和快速响应用户需求。
本实施例中,优选的,还包括硬件驱动模块、且硬件驱动模块用于对数据采集硬件进行配置和控制。
本实施例中,优选的,还包括异构计算模块、且异构计算模块用于对所获取的数据进行高速处理和计算。
实施例
请参阅图1、图2和图3,本发明提供一种技术方案:一种面向高性能复杂测试测量应用的软件开发系统,利用一个框架,一套代码库,基于同一套用户界面及标准,将C++/Qt和LabVIEW相结合、并发挥两种编程语言和平台的优势,其中,
C++/Qt作为主框架开发语言,充分利用其对高性能并发计算、跨平台构建、复杂用户界面支持、异构计算加速的特点;
LabVIEW作为插件开发语言,充分利用其快速界面和应用程序构建、丰富的硬件I/O支持、丰富信号处理函数库支持、多线程和FPGA支持的特点。
由于LabVIEW自身具有完整的程序执行和界面渲染机制,并进行了较高程度的封装,为了能让C++/Qt与LabVIEW相结合,同时满足高性能复杂测试测量应用各业务的并行迭代,需要:
设计一套插件服务机制来满足两种开发语言所建立的用户界面和应用程序的结合及扩展;
设计一套数据通信机制来满足两种开发语言所建立的程序产生的数据的交互,以及协同完成两种开发语言所建立图形用户界面的渲染和显示。
插件服务机制
插件是一种遵循一定规范的应用程序接口编写出来的程序,利用C++/Qt作为主框架程序,LabVIEW作为功能实现插件接入到主框架程序,其需要:
1.主框架提供一组服务,约束功能实现插件对主框架可控制的边界,服务接口定义颗粒度较高,耦合度和复杂度较小;
2.主框架定义一种契约,通过约定协议规则让主框架程序发现和识别插件,并通过插件管理模块来维护插件。
具体方案如下(对应说明书附图图1):
1.C++/Qt作为主框架程序实现,提供一套服务接口Create/Destroy、Start/Stop、Read/Write、CreateWindow;
2.具体功能插件可以用C++或者LabVIEW来实现,实现方式需要符合主框架程序的接口规范,本发明以LabVIEW来实现功能插件;
3.插件以动态链接库DLL方式提供,其名称、路径、接口协议需要满足主框架的契约。
主框架调用插件顺序如下(对应说明书附图图2):
1.主框架扫描指定路径的文件,满足约定规则的DLL会被加载;
2.针对加载成功的DLL,主框架会调用Create接口创建插件实例,并针对实例进行管理,LabVIEW在响应Create接口调用时,将进行一系列初始化操作,比如软件和硬件的初始化、参数的初始化,并对Create操作成功与否进行反馈,通过返回值传给主框架;
3.主框架调用CreateWindow创建插件实例窗口,LabVIEW插件实例在响应CreateWindow接口调用时,将获取自身窗口参数并通过传参的方式传递给主框架,主框架根据返回的窗口参数进行各项窗口设置;至此LabVIEW插件实例窗口得以创建;
4.针对创建成功的LabVIEW插件实例,主框架会调用其DLL里提供的Start接口,如果LabVIEW响应Start成功,则开始运行插件功能;如果LabVIEW响应Start失败,则主框架将LabVIEW插件实例移除管理、关闭并销毁;
5.主框架调用Start接口成功后,通过调用Read/Write接口,实现基于C++/Qt的主框架和基于LabVIEW的插件实例的数据通信,数据通信分两种处理方式:针对状态量传递,通过传参和返回值进行数据通信;针对大数据量传输,通过队列的方式进行;
6.当主框架中的插件实例被触发退出时,主框架会依次调用已管理的插件实例提供的Stop接口实现插件实例的关闭;
7.主框架针对调用Stop接口成功的插件实例,会进行Destroy接口调用,释放掉插件实例申请的资源,并对插件实例进行销毁。
数据通信机制
要将C++/Qt和LabVIEW相结合,则两者之间的数据通信必不可少,整体数据处理流程主要有如下两种形式:
1.LabVIEW插件实例负责硬件控制、信号获取和处理并产生数据,C++/Qt主框架负责数据的传输、计算、分析、存储、显示及渲染;
2.C++/Qt主框架负责数据的产生、处理和传输,LabVIEW插件实例负责数据的分发、硬件控制和信号播放。
为满足高性能应用所需要的并行性,LabVIEW和C++/Qt所构建的程序实例需要基于不同线程来完成,既能提高了程序的执行吞吐率,又能把进程中负责I/O处理与人机交互的部分并行执行。
针对大数据量传输,为满足并发性,LabVIEW插件实例与C++/Qt主框架不同线程间的数据通信需要利用非阻塞式数据队列。
这套机制限定了LabVIEW与C++/Qt线程间大数据交互只能通过该队列,而相关的数据操作则被各自所隐藏;这里的非阻塞式数据队列定义为:基于链接节点的无界线程安全队列;采用先进先出的规则对节点进行排序;当我们添加一个元素的时候,会添加到队列的尾部;当我们获取一个元素时,它会返回队列头部的元素;在多个线程并发执行时,并不会阻塞线程;同时,该队列只有一个消费者(C++线程)和一个生产者(LabVIEW线程)同时使用,消费者和生产者之间在时间上没有依赖性,利用先进先出的特性保证数据的顺序性。
具体方案如下(对应说明书附图图3):
1.C++/Qt主框架工作线程初始化一个非阻塞队列,队列大小可根据实际配置,队列中每个节点信息包括数据内容及数据大小;
2.LabVIEW数据采集实例线程或信号处理实例线程,在完成操作后调用队列Put接口(该接口由C++主框架提供),把数据插入到队列末尾;
3.C++/Qt主框架工作线程调用队列Pop接口,把数据取回后交给处理和渲染线程进行计算和显示。
通过以上方式,就能让C++/Qt、LabVIEW窗口在一个应用软件中同时工作,充分利用了LabVIEW的快速开发能力和C++/Qt的灵活开发能力,准确和快速响应用户需求。
本实施例中,优选的,还包括硬件驱动模块、且硬件驱动模块用于对数据采集硬件进行配置和控制。
本实施例中,优选的,还包括异构计算模块、且异构计算模块用于对所获取的数据进行高速处理和计算。
本实施例中,优选的,还包括数据渲染模块、且数据渲染模块用于对数据进行图表绘制和视景呈现。
本实施例中,优选的,还包括程序更新模块、且程序更新模块用于对程序和数据进行升级更新,提高版本迭代升级的效率。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (6)
1.一种面向高性能复杂测试测量应用的软件开发系统,其特征在于:利用一个框架,一套代码库,基于同一套用户界面及标准,将C++/Qt和LabVIEW相结合、并发挥两种编程语言和平台的优势,其中,
C++/Qt作为主框架开发语言,充分利用其对高性能并发计算、跨平台构建、复杂用户界面支持、异构计算加速的特点;
LabVIEW作为插件开发语言,充分利用其快速界面和应用程序构建、丰富的硬件I/O支持、丰富信号处理函数库支持、多线程和FPGA支持的特点;还包括让C++/Qt与LabVIEW相结合,并满足高性能复杂测试测量应用各业务的并行迭代的两套机制;所述两套机制包括插件服务机制、数据通信机制,其中,插件服务机制满足两种开发语言所建立的用户界面和应用程序的结合及扩展;数据通信机制满足两种开发语言所建立的程序产生的数据的交互,以及协同完成两种开发语言所建立图形用户界面的渲染和显示;所述插件服务机制包括以下内容:插件是一种遵循一定规范的应用程序接口编写出来的程序,利用C++/Qt作为主框架程序,LabVIEW作为功能实现插件接入到主框架程序,其需要:
(1)主框架提供一组服务,约束功能实现插件对主框架可控制的边界,服务接口定义颗粒度较高,耦合度和复杂度较小;
(2)主框架定义一种契约,通过约定协议规则让主框架程序发现和识别插件,并通过插件管理模块来维护插件;
具体方案如下:
(1)C++/Qt作为主框架程序实现,提供一套服务接口Create/Destroy、Start/Stop、Read/Write、CreateWindow;
(2)具体功能插件用C++或者LabVIEW来实现,实现方式需要符合主框架程序的接口规范,本发明以LabVIEW来实现功能插件;
(3)插件以动态链接库DLL方式提供,其名称、路径、接口协议需要满足主框架的契约;
主框架调用插件顺序如下:
(1)主框架扫描指定路径的文件,满足约定规则的DLL会被加载;
(2)针对加载成功的DLL,主框架会调用Create接口创建插件实例,并针对实例进行管理,LabVIEW在响应Create接口调用时,将进行一系列初始化操作,包括软件和硬件的初始化、参数的初始化,并对Create操作成功与否进行反馈,通过返回值传给主框架;
(3)主框架调用CreateWindow创建插件实例窗口,LabVIEW插件实例在响应CreateWindow接口调用时,将获取自身窗口参数并通过传参的方式传递给主框架,主框架根据返回的窗口参数进行各项窗口设置;至此LabVIEW插件实例窗口得以创建;
(4)针对创建成功的LabVIEW插件实例,主框架会调用其DLL里提供的Start接口,如果LabVIEW响应Start成功,则开始运行插件功能;如果LabVIEW响应Start失败,则主框架将LabVIEW插件实例移除管理、关闭并销毁;
(5)主框架调用Start接口成功后,通过调用Read/Write接口,实现基于C++/Qt的主框架和基于LabVIEW的插件实例的数据通信,数据通信分两种处理方式:针对状态量传递,通过传参和返回值进行数据通信;针对大数据量传输,通过队列的方式进行;
(6)当主框架中的插件实例被触发退出时,主框架会依次调用已管理的插件实例提供的Stop接口实现插件实例的关闭;
(7)主框架针对调用Stop接口成功的插件实例,会进行Destroy接口调用,释放掉插件实例申请的资源,并对插件实例进行销毁;
所述数据通信机制包括以下内容:
要将C++/Qt和LabVIEW相结合,则两者之间的数据通信必不可少,整体数据处理流程主要有如下两种形式:
(1)LabVIEW插件实例负责硬件控制、信号获取和处理并产生数据,C++/Qt主框架负责数据的传输、计算、分析、存储、显示及渲染;
(2)C++/Qt主框架负责数据的产生、处理和传输,LabVIEW插件实例负责数据的分发、硬件控制和信号播放。
2.根据权利要求1所述的一种面向高性能复杂测试测量应用的软件开发系统,其特征在于:LabVIEW和C++/Qt所构建的程序实例需要基于不同线程来完成,LabVIEW插件实例与C++/Qt主框架不同线程间的数据通信需要利用非阻塞式数据队列。
3.根据权利要求1所述的一种面向高性能复杂测试测量应用的软件开发系统,其特征在于:还包括硬件驱动模块、且硬件驱动模块用于对数据采集硬件进行配置和控制。
4.根据权利要求1所述的一种面向高性能复杂测试测量应用的软件开发系统,其特征在于:还包括异构计算模块、且异构计算模块用于对所获取的数据进行高速处理和计算。
5.根据权利要求1所述的一种面向高性能复杂测试测量应用的软件开发系统,其特征在于:还包括数据渲染模块、且数据渲染模块用于对数据进行图表绘制和视景呈现。
6.根据权利要求1所述的一种面向高性能复杂测试测量应用的软件开发系统,其特征在于:还包括程序更新模块、且程序更新模块用于对程序和数据进行升级更新。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011489304.0A CN112527268B (zh) | 2020-12-16 | 2020-12-16 | 一种面向高性能复杂测试测量应用的软件开发系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011489304.0A CN112527268B (zh) | 2020-12-16 | 2020-12-16 | 一种面向高性能复杂测试测量应用的软件开发系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112527268A CN112527268A (zh) | 2021-03-19 |
CN112527268B true CN112527268B (zh) | 2023-10-27 |
Family
ID=75000774
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011489304.0A Active CN112527268B (zh) | 2020-12-16 | 2020-12-16 | 一种面向高性能复杂测试测量应用的软件开发系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112527268B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114035902A (zh) * | 2021-11-17 | 2022-02-11 | 上海商汤智能科技有限公司 | 应用程序开发平台及方法、电子设备和存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6588007B1 (en) * | 2001-01-03 | 2003-07-01 | Advanced Micro Devices, Inc. | Use of endpoint system to match individual processing stations within a tool |
US7496053B1 (en) * | 2005-11-23 | 2009-02-24 | Teletech Holdings, Inc. | Web-based visual development environment |
WO2011031328A2 (en) * | 2009-09-14 | 2011-03-17 | Ldra Technology, Inc. | Systems and methods for management of projects for development of embedded systems |
CN104950854A (zh) * | 2015-06-17 | 2015-09-30 | 中国核动力研究设计院 | 一种核电站失水事故监测系统 |
CN106095431A (zh) * | 2016-06-08 | 2016-11-09 | 中国科学院武汉岩土力学研究所 | 基于Python的3DGIS系统及其快速开发的方法 |
CN110297470A (zh) * | 2019-05-27 | 2019-10-01 | 北京北交新能科技有限公司 | 一种轻量级跨平台的轨道交通蓄电池数据监控上位机平台 |
CN111078210A (zh) * | 2019-12-11 | 2020-04-28 | 中国科学院光电技术研究所 | 一种用于自适应光学操控系统的QT和Matlab多线程混合编程软件架构 |
US10831456B1 (en) * | 2019-05-31 | 2020-11-10 | The Mathworks, Inc. | External code integrations within a computing environment |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110072371A1 (en) * | 2009-09-18 | 2011-03-24 | Microsoft Corporation | Application programming interface for user interface creation |
-
2020
- 2020-12-16 CN CN202011489304.0A patent/CN112527268B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6588007B1 (en) * | 2001-01-03 | 2003-07-01 | Advanced Micro Devices, Inc. | Use of endpoint system to match individual processing stations within a tool |
US7496053B1 (en) * | 2005-11-23 | 2009-02-24 | Teletech Holdings, Inc. | Web-based visual development environment |
WO2011031328A2 (en) * | 2009-09-14 | 2011-03-17 | Ldra Technology, Inc. | Systems and methods for management of projects for development of embedded systems |
CN104950854A (zh) * | 2015-06-17 | 2015-09-30 | 中国核动力研究设计院 | 一种核电站失水事故监测系统 |
CN106095431A (zh) * | 2016-06-08 | 2016-11-09 | 中国科学院武汉岩土力学研究所 | 基于Python的3DGIS系统及其快速开发的方法 |
CN110297470A (zh) * | 2019-05-27 | 2019-10-01 | 北京北交新能科技有限公司 | 一种轻量级跨平台的轨道交通蓄电池数据监控上位机平台 |
US10831456B1 (en) * | 2019-05-31 | 2020-11-10 | The Mathworks, Inc. | External code integrations within a computing environment |
CN111078210A (zh) * | 2019-12-11 | 2020-04-28 | 中国科学院光电技术研究所 | 一种用于自适应光学操控系统的QT和Matlab多线程混合编程软件架构 |
Non-Patent Citations (3)
Title |
---|
利用Matcom实现Visual C++与Matlab的混合编程;张爱丽,陈逢胜;电脑与电信(第04期);全文 * |
基于嵌入式Linux+QT的管道超声导波检测系统图形用户界面设计;柳伟续;;装备制造技术(09);全文 * |
柳伟续 ; .基于嵌入式Linux+QT的管道超声导波检测系统图形用户界面设计.装备制造技术.2016,(09),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN112527268A (zh) | 2021-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11360747B1 (en) | Variant modeling elements in graphical programs | |
US9547481B2 (en) | Textual code provided in temporal and change operators of a technical computing environment | |
US8234623B2 (en) | System and method for using stream objects to perform stream processing in a text-based computing environment | |
US8191042B2 (en) | Continuation based declarative definition and composition | |
Zhang et al. | Design, construction, and application of a generic visual language generation environment | |
Trinder et al. | Parallel and distributed Haskells | |
US20080059621A1 (en) | Non-blocking local events in a state-diagramming environment | |
Sheng et al. | A compiler infrastructure for embedded heterogeneous MPSoCs | |
JP2022177793A (ja) | ディープラーニングフレームワークのオペレータ登録方法、装置、デバイス及び記憶媒体 | |
Biddiscombe et al. | Parallel computational steering for hpc applications using hdf5 files in distributed shared memory | |
Boutellier et al. | Actor merging for dataflow process networks | |
Wozniak et al. | Language features for scalable distributed-memory dataflow computing | |
Fu et al. | Quingo: A programming framework for heterogeneous quantum-classical computing with nisq features | |
CN112527268B (zh) | 一种面向高性能复杂测试测量应用的软件开发系统 | |
US8041551B1 (en) | Algorithm and architecture for multi-argument associative operations that minimizes the number of components using a latency of the components | |
CN111176658B (zh) | 基于元对象机制的AADL到Simulink模型自动转换方法 | |
Castrillon et al. | Dataflow Models of computation for programming heterogeneous multicores | |
Björklund et al. | Towards efficient code synthesis from statecharts | |
Hainque et al. | Cronos: a separate compilation tool set for modular esterel applications | |
Jia et al. | Executable visual software modeling—the ZOOM approach | |
CN107918958B (zh) | 一种可视化和可定制的三维渲染系统及方法 | |
Pino et al. | Automatic code generation for heterogeneous multiprocessors | |
CN117234480B (zh) | 基于本体的多编程语言组件规范和工作流系统及使用方法 | |
Björklund et al. | A unified approach to code generation from behavioral diagrams | |
Renaud et al. | Automated Clustering and Pipelining of Dataflow Actors for Controlled Scheduling Complexity |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20230915 Address after: 610000 No. 10, building 11, No. 3, Gaopeng Avenue, high tech Zone, Chengdu, Sichuan Applicant after: Chengdu lisifang Information Technology Co.,Ltd. Address before: No.98-478, wanshouqiao Road, Wuhou District, Chengdu, Sichuan 610045 Applicant before: Jixian Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |