基于远程过程调用协议的分布式驱动中间件的制作方法

文档序号:20486676发布日期:2020-04-21 21:43阅读:428来源:国知局
基于远程过程调用协议的分布式驱动中间件的制作方法

本发明涉及航电系统测试与仿真技术领域,具体涉及一种基于远程过程调用协议的分布式驱动中间件。



背景技术:

现代航电系统是一个高度综合化、模块化的复杂系统,为实现系统内外的信息交互,往往采用多种高规格的网络、总线、点对点通讯技术。鉴于此,在对航电系统进行测试时,所需的仿真资源类型也越来越多。实际上,对单个型号的t2级别的航电系统进行测试,就需要利用将近10种不同类型的通讯仿真资源板卡。传统的测试设备在开发时,一般是使用测试软件直接调用厂家提供的api驱动函数,但这样做有两大弊端:一方面是测试软件开发人员需要花费大量精力适配硬件资源驱动;另一方面是测试软件和驱动绑定,当硬件资源更换时,需要对整个测试软件进行调整。



技术实现要素:

针对传统测试系统硬件驱动和仿真测试软件紧耦合、无法复用、维护成本高等问题,本发明的发明目的在于提供了一种基于远程过程调用协议的分布式驱动中间件,借鉴可互换虚拟仪器(ivi)规范思想,采用远程过程调用协议(prc)、分布式结构,设计了测试资源的分布式驱动中间件,大大降低测试软件与硬件资源驱动的耦合关系,将测试资源驱动作为一种通用服务提供给测试软件,使得测试开发人员在开发测试软件(仿真、用例等)时只需关心功能逻辑、验证流程,而无需关心资源提供,提高了航电测试验证的效率、测试软件的灵活性。

本发明的发明目的通过以下技术方案实现:

一种基于远程过程调用协议的分布式驱动中间件,采用客户端和ivi驱动服务器的软件架构,其中ivi驱动服务器运行在具有测试资源的节点计算机上,测试脚本在客户端上通过远程过程调用协议发送给ivi驱动服务器;ivi驱动服务器上的ivi驱动程序根据测试脚本驱动被测产品,并通过远程过程调用协议返回结果给客户端。

依据上述特征,ivi驱动程序包括若干个ivi具体驱动程序、若干个ivi类驱动程序和ivi配置文件;

每个ivi具体驱动程序是利用python语言封装对厂商提供的板块驱动函数封装成而成;

每个ivi类驱动程序是一类仪器函数和属性的集合,用于控制某一类型的仪器;

ivi引擎用于完成硬件状态缓存、仪器属性跟踪、测试数据和仪器通道映射以及ivi类驱动函数和ivi具体仪器驱动程序的映射功能;

ivi驱动程序收到测试脚本后,调用对应的ivi类驱动函数,再通过驱动配置引擎索引到ivi具体仪器驱动程序,最后执行厂家具体的板块驱动函数。

依据上述特征,远程过程调用协议的通信过程如下:

发送时:

步骤a1、发送方以本地调用方式调用服务;

步骤a2、发送方句柄接收到调用后负责将方法、参数组装成能够进行网络传输的消息体;

步骤a3、句柄找到接收方地址,并将消息发送到接收方;

接收时:

步骤b1、接收方句柄收到消息后进行解码;

其中步骤a2、步骤a3、步骤b1均由python的第三方模块zeropc来实现。

本发明的有益效果在于:

根据本发明设计的分布式驱动中间件,能够实现硬件资源驱动和仿真测试软件的解耦以及在分布式仿真系统中提供无差异于单机的硬件访问服务。通过对其他厂家驱动的二次封装,解决了不同厂家模块或者资源互换问题,延长了航电系统仿真平台的生命周期,同时通过rpc协议进行多台计算机的数据共享,使得测试开发人员在开发测试用例脚本时不需要关心网络层的协议,只需要关系验证流程和功能逻辑,从而提高了航电测试验证的效率。

附图说明

图1为标准ivi体系架构图。

图2为python和c/c++混合编程示意图。

图3为ivi驱动设计示意图。

图4硬件配置文件示例。

图5rpc远程过程调用流程。

图6基于远程过程调用协议的分布式驱动中间件的架构图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。

如图6所示,本实施例所示的一种基于远程过程调用协议的分布式驱动中间件采用客户端和ivi驱动服务器的软件架构,其中ivi驱动服务器运行在具有测试资源的节点计算机上,测试脚本在客户端上通过远程过程调用协议发送给ivi驱动服务器;ivi驱动服务器上的ivi驱动程序根据测试脚本驱动被测产品,并通过远程过程调用协议返回结果给客户端。本实施例主要涉及基于可互换虚拟仪器(ivi)的ivi驱动程序和远程过程调用协议(prc)二部分内容,下面对这二部分内容展开说明。

(一)基于可互换虚拟仪器(ivi)的ivi驱动程序

可互换虚拟仪器(ivi)是由ivi基金会(interchangeablevirtualinstrumentsfoundation)在vxiplug&play(简称vpp)基础上为仪器驱动程序制定的编程接口规范。采用ivi规范编写驱动程序进一步提高了仪器驱动的执行性能,达到了真正意义的仪器互换;应用程序可以实现完全独立于硬件,并具备仪器仿真的功能,对于延长应用程序的生命周期、增强软件的可维护性,加快tps(testprogramset)的开发具有极其重要的作用。

目前ivi基金会并没有现成的航电总线仿真仪器的标准规范,但可以参照示波器/数字化仪(iviscope)和数字万用表(ividmm)等仪器的ivi规范来开发航电总线仿真仪器的ivi驱动程序。从ivi体系结构框图1可知,符合ivi规范的驱动程序主要包括两部分ivi具体驱动程序和ivi类驱动程序,并且通过ivi配置文件中的配置信息建立映射关系,完成对具体物理仪器的操作。

1、各类硬件资源的ivi具体驱动程序封装

目前主流厂商提供的硬件资源驱动都是采用c/c++语言进行编写的,该语言具有稳定,灵活,运算速度强,产生的目标代码质量高,稳定性强的优点。但是由于其语法结构相对复杂,不适合作为自动化测试的脚本语言。而python是一种面向对象的解释型语言,虽然在运行速度和效率不及c/c++,但是其解释型语言的特点非常适合用于开发仿真测试用例的脚本,可以大大提高仿真测试用例的可读性以及开发效率。

为了解决两种语言在仿真测试中的功能和性能中的不足,如图2所示,利用python的第三方模块ctypes进行两种语言结合起来进行混合编程,这样在拥有了python语言的简介优美的同时也不会损失太多的性能。

目前仿真测试仪器的驱动接口往往是以标准的动态链接库的方式提供,利用python的ctypes模块提供四种方式加载动态库,分别是ctypes.cdll、ctypes.oledll、ctypes.windll和ctypes.pydll。操作系统平台和被加载动态库中函数的调用约定决定了我们应该使用哪种方式加载动态库。

当动态库加载成功后,就可以在python脚本中调用c/c++的函数了,函数的实参是python类型的变量,函数的形参则是c/c++类型的变量,显然将python类型的变量直接赋值给c/c++l类型的变量会有问题,ctypes作为pyhon和c/c++联系的桥梁,它定义了专有的数据类型来衔接这两种编程语言,几种典型的数据类型如表1所示:

表1数据类型对照表

2、ivi类驱动程序封装

ivi类驱动程序(iviclassdriver)是一类仪器函数和属性的集合,用于控制某一类型的仪器,如函数发生器,数字万用表等。如表2所示,这里将航电总线仿真卡作为一类仪器进行类驱动函数的规划和封装。ivi类驱动程序封装完成后加入类驱动函数库。

表2类驱动函数库

在参数设置上,本着函数及其之间高内聚低耦合的原则,并结合具体使用的实际情况,将其归纳整合,举例如下,注释内容依次为参数功能说明:

1.init(device_name,device_handle)//仪器名,获得的仪器的句柄

2.start_send(device_handle,chan,ctrl_config,cycle_time)//仪器句柄,通道号,控制参数结构体,发送周期

3、ivi引擎

ivi引擎完成硬件状态缓存、仪器属性跟踪、测试数据和仪器通道映射以及类驱动函数和具体仪器驱动程序的映射功能。

如图3所示,利用xml描述语言来描述测试仪器的基本配置信息,ivi引擎通过加载该文件来识别仪器名称和基本属性,从而实现ivi类驱动到ivi具体驱动的映射,更换仪器时只需要改变xml配置文件即可。

图4是硬件资源配置文件xml的示意图,以422类板卡进行举例,涉及到的属性标记词解释表3所示。

表3硬件资源配置文件标记词解释说明

(二)远程过程调用协议(prc)

rpc(remoteprocedurecall)即远程过程调用,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。rpc协议假定某型传输协议的存在,如tcp或者udp,为通信程序之间携带信息数据。在osi网络通信模型中,rpc跨越了传输层和应用层。prc使得分布式架构的应用程序变得更加容易。遵循prc协议将ivi驱动程序作为服务挂载在分布式网络中,可以提供无差异于单机的硬件访问服务。

一般来讲,对与航电系统级的测试,单台仿真计算机的计算能力以及硬件资源无法满足。因此,多节点的计算机形成分布式仿真系统成为解决复杂系统的常用手段。

在分布式仿真系统中,由于各服务部署在不同机器,服务间的调用免不了网络通信过程,服务消费方每调用一个服务都要写一坨网络通信相关的代码,不仅复杂而且极易出错。

驱动中间件的设计应当能够适应这种分布式的架构,提供无差异于单机的硬件访问服务。本文采用rpc远程过程调用将通信细节进行封装,让网络通信细节对使用这透明,从而提供无差异于单机的硬件访问服务。rpc的通信原理如图5所示:

a)客户端以本地调用方式调用服务;

b)客户端句柄接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;

c)客户端句柄找到服务地址,并将消息发送到服务端;

d)服务端句柄收到消息后进行解码;

e)服务端句柄根据解码结果调用本地的服务;

f)服务器执行并将结果返回给服务端句柄;

g)服务端句柄将返回结果打包成消息并发送至消费方;

h)客户端句柄接收到消息,并进行解码;

i)客户端方得到最终结果。

rpc的目标就是要b~h这些步骤都封装起来,让用户对这些细节透明,从而感受不到网络协议的存在。如图6所示,当computer01想要调用computer02的板块驱动和被测产品进行通信时,首先需要在computer01编写测试脚本远程调用ivi驱动服务器的ivi类驱动程序,通过zerorpc服务computer02就会执行对应的类驱动函数,并返回结果给computer01。ivi驱动服务器通过驱动配置引擎找到ivi类驱动程序和ivi具体驱动程序的对应关系,从而调用仿真板卡驱动和被测产品进行通信。该方式可以灵活扩展,即当可以存在多个ivi驱动服务器,搭载多个仿真驱动节点。

本方案采用python的第三方模块zerorpc来实现驱动中间件的远程过程调用,zerorpc是一个基于zeromq和messagepack开发的远程过程调用协议实现。跟其他rpc模块相比它有如下优点:

a)不用修改代码即可显露python模块。

b)通过命令行远程调用这些模块。

c)消耗资源更少,响应时间短,并发高。

可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1