本发明属于机载航电系统应用软件技术领域,基于地面仿真验证环境,提出一种基于以太网的cpci总线仿真方法,为综合化航空电子系统提供安全支撑环境。
背景技术:
地面仿真验证环境中“机载航电操作系统”由航电系统仿真主控软件、飞行环境软件、飞行仿真软件、数据采集软件、仿真数据管理软件、总线仿真软件、应用执行调度管理、验证管理软件组成。这些软件对“机载航电操作系统”进行验证,不仅验证了“机载航电操作系统”对应用型号的支持,验证覆盖了大量的功能和性能;同时也可单独对某些功能和性能进行了验证,为突出验证某些功能性能、获取验证数据提供了平台。两者相辅相成,为全面验证“机载航电操作系统”提供了验证环境。
为了对“机载航电操作系统”的功能和性能进行验证,以适应不同项目的试验,自动化程度,就需要仿真、综合测试系统提供完善的试验管理功能。在试验前,确定总线仿真是试验管理重要的任务,对验证“机载航电操作系统”设计的合理性、正确性起到了重要作用。
cpci总线(compactpci,紧凑型pci),是(pciindustrialcomputermanufacturer'sgroup,国际工业计算机制造者联合会)组织于1994年提出的高性能工业计算机总线标准。cpci标准具有种种优点,它与传统的桌面pci系统完全兼容,在64位/66m总线接口下能提供每秒高达512mb的带宽。它支持用在桌面pc和工作站上的完全一样的接口芯片。使用cpci能利用在桌面工作站上开发的整个应用,无需任何改变就能将其移到目标环境,极大地缩短了产品推向市场的时间。利用cpci技术使得电信设备oem能利用与桌面应用系统同样的先进技术,同时还具有针对桌面系统设计的大量pci芯片所带来的规模经济和低成本特性。其产品成本上往往低于同等功能的vme产品,仅略高于通常的工控机ipc(ipc,industrialpersonalcomputer)产品。
航电系统的飞行管理系统rehost/retarget平台中使用符合cpci总线标准的通信总线进行通信。在航电系统地面仿真中,真机系统模块之间使用的是相应板卡模块进行通讯,通讯虚拟必须针对不同的通信板卡开发,虚拟板卡驱动接口以及通信模式,为此有必要开展cpci总线仿真技术的研究。
技术实现要素:
本发明的目的是:提供一种易于扩展、能够有效降低开发成本的基于以太网的cpci总线仿真方法。
本发明的技术方案是:一种基于以太网的cpci总线仿真方法,基于以太网部署多台计算机的cpci总线通信系统,采用全双工的模式进行数据的发送和接收,cpci总线通信系统对cpci总线进行封装形成链接库,向外部暴露出符合cpci总线的接口函数,在这些接口函数中通过调用链接库实现通信。
打开vs2010开发平台上建一个win32项目commbus,应用程序类型选择dll,直接点击完成即可,在头文件中添加cpci函数的声明,在.cpp文件中按照真实cpci总线标准接口进行仿真,添加cpci函数的具体实现,编译运行后,即可在debug目录下生成链接库commbus.lib和commbus.dll。
向外部暴露出符合cpci总线的cpci接口函数包括:hpm_com_intialize、com_initialize、com_data_read、com_data_write、data_read以及data_write,所述cpci接口函数中使用基于发布订阅机制的commbus总线进行实现,且内部都实现了通过给定的端口id自动生成消息订阅发布的主题。
hpm从gpm读数据时使用的读数据接口函数:unsignedshortcom_data_read(gpm_tgpm,channel_tchannel,unsignedshortport_id,unsignedchar*pdata,unsignedshort*data_len);
参数说明:
参数1(ingpm):gpm的id
参数2(inchannel):通道类型
参数3(inport_id):端口号
参数4(outpdata):读取到的数据
参数5(outdata_len):数据长度
返回值:见常见返回值表。
hpm向gpm写数据时使用的写数据接口函数:
unsignedshortcom_data_write(gpm_tgpm,channel_tchannel,unsignedshortport_id,unsignedchar*pdata,unsignedshortdata_len);
参数说明:
参数1(ingpm):gpm的id
参数2(inchannel):通道类型
参数3(inport_id):端口号
参数4(inpdata):发送的数据
参数5(indata_len):数据长度
**返回值:见常见返回值表。
gpm从hpm读取数据时使用的读数据接口函数:
unsignedshortdata_read(unsignedintch_id,channel_tchannel,unsignedshortport_id,unsignedchar*pdata,unsignedshort*data_len);
参数说明:
参数1(inch_id):通道id
参数2(inchannel):通道类型
参数3(inport_id):端口号
参数4(outpdata):读取到的数据
参数5(outdata_len):数据大小
返回值:见常见返回值表。
gpm向hpm写数据时使用的写数据接口函数:
unsignedshortdata_write(unsignedintch_id,channel_tchannel,unsignedshortport_id,unsignedchar*pdata,unsignedshortdata_len);
参数说明:
参数1(inch_id):通道id
参数2(inchannel):通道类型
参数3(inport_id):端口号
参数4(inpdata):要发送的数据
参数5(indata_len):数据大小
返回值:见常见返回值表。
本发明的技术效果是:本发明所设计的cpci总线仿真架构,相对于真实cpci板卡设备方式,具有以下好处:
1)在验证环境中,没有真实cpci板卡,也可以方便实现板卡的功能,节约了成本和资源。
2)模块接口标准化。采用标准的cpci接口,保证了总线接口的一致性,提升总线仿真设计的可复用性。
3)提升了系统结构的可扩展性。总线仿真接口可以根据需要进行扩展,而不会带来总线接口复杂度的显著提升。因此,总线仿真结构为cpci总线仿真提供了良好的可扩展性。
附图说明
图1是本发明cpci总线仿真接口示意图;
图2是发布/订阅中间件模型示意图。
具体实施方式
下面结合附图和实施例对本发明做进一步说明:
本发明基于以太网的cpci总线仿真方法先进行以太网环境的部署。共2台pc机,分别安装hpm软件和gpm软件。用2根网线分别将pc机和路由器连接起来,并将ip地址设置在一个局域网段内。再基于发布/订阅的数据分发服务的cpci总线仿真。真机系统模块之间使用的是相应板卡模块进行通讯,因此通讯虚拟必须针对不同的通信板卡开发,虚拟板卡驱动接口以及通信模式。
通信虚拟是使用网络通信技术,根据真实板卡驱动接口和使用模式进行封装,形成cpci总线仿真模块。
基于发布/订阅的数据分发服务为各种虚拟机载设备之间的通信提供了统一的底层支撑,其技术原理如图2所示,机载应用程序之间需要传输的数据由“主题”来标识,数据的实际分发是由发布/订阅中间件来处理。发布方将包含主题的消息发布给发布/订阅中间件,订阅方应用程序则向发布/订阅中间件订阅自己需要接受的主题消息。发布方与订阅方通过相同的主题建立映射关系,这个映射关系由发布/订阅中间件来维护。发布订阅/中间件根据发布方与订阅方的映射关系,不断将订阅方所订阅的消息推送给订阅方。
发布/订阅模式通过中间件模型实现了数据发送者和数据接收者之间的松耦合,实现了机载系统分布式通信中各通信实体之间的异步独立性。这种通信是一种主动、实时的信息传递方式,一旦消息发布者有动态更新的数据产生时,发布/订阅中间件通过事件通知机制通知消息订阅者存在新的可用数据,而无须消息订阅者进行轮询。因此,发布/订阅通信模型非常适合于对于机载系统这种具有实时性、异步性、异构性的系统的分布式数据交互行为进行仿真。
为了实现在飞行管理系统rehost/retarget平台中使用符合cpci总线标准的通信总线进行通信,飞行管理系统rehost/retarget平台系统设计了仿真虚拟cpci总线,底层用commbus总线实现。
系统对commbus总线进行了封装,向外部暴露出符合cpci总线的接口函数hpm_com_intialize、com_initialize、com_data_read、com_data_write、data_read以及data_write。在这些接口函数中使用基于发布订阅机制的commbus总线进行实现。
在使用cpci总线的时候,需要进行初始化。在hpm_com_intialize、com_initialize中会对消息发布的采样大小、数量进行初始化。在初始化后就可对消息进行发送和接收,注意,用com_data_write发送的数据需要用data_read进行接收,而用data_write发送的数据需要用com_data_read进行接收。在这些接口函数的内部都实现了通过给定的端口id自动生成消息订阅发布的主题。
具体函数实现说明:
初始化函数:
unsignedshorthpm_com_intialize(unsignedintsend_que_size,unsignedintsend_sampling_num,unsignedint*send_sampling_size,unsignedintrev_que_size,unsignedintrev_sampling_num,unsignedint*rev_sampling_size);
功能描述:初始化cpci总线
参数说明:
参数1(insend_que_size):发送队列大小
参数2(insend_sampling_num):发送采样块个数
参数3(insend_sampling_size):发送采样块大小
参数4(inrev_que_size):接收队列大小。
参数5(inrev_sampling_num):接收采样块个数
参数6(inrev_sampling_size):接收采样块大小
**返回值:见常见返回值表
hpm从gpm读数据函数:
unsignedshortcom_data_read(gpm_tgpm,channel_tchannel,unsignedshortport_id,unsignedchar*pdata,unsignedshort*data_len);
功能描述:hpm从gpm读数据时使用的读数据接口
参数说明:
参数1(ingpm):gpm的id
参数2(inchannel):通道类型
参数3(inport_id):端口号
参数4(outpdata):读取到的数据
参数5(outdata_len):数据长度
返回值:见常见返回值表
hpm向gpm写数据函数:
unsignedshortcom_data_write(gpm_tgpm,channel_tchannel,unsignedshortport_id,unsignedchar*pdata,unsignedshortdata_len);
功能描述:hpm向gpm写数据时使用的写数据接口
参数说明:
参数1(ingpm):gpm的id
参数2(inchannel):通道类型
参数3(inport_id):端口号
参数4(inpdata):发送的数据
参数5(indata_len):数据长度
**返回值:见常见返回值表
gpm从hpm读取数据函数:
unsignedshortdata_read(unsignedintch_id,channel_tchannel,unsignedshortport_id,unsignedchar*pdata,unsignedshort*data_len);
功能描述:gpm从hpm读取数据时使用的读数据接口
参数说明:
参数1(inch_id):通道id
参数2(inchannel):通道类型
参数3(inport_id):端口号
参数4(outpdata):读取到的数据
参数5(outdata_len):数据大小
返回值:见常见返回值表
gpm向hpm写数据函数:
unsignedshortdata_write(unsignedintch_id,channel_tchannel,unsignedshortport_id,unsignedchar*pdata,unsignedshortdata_len);
功能描述:gpm向hpm写数据时使用的写数据接口
参数说明:
参数1(inch_id):通道id
参数2(inchannel):通道类型
参数3(inport_id):端口号
参数4(inpdata):要发送的数据
参数5(indata_len):数据大小
返回值:见常见返回值表
注:使用data_write()接口发送数据后,要使用com_data_read()接口进行接收;使用com_data_write()接口发送数据后,要使用data_read()接口进行接收。
本发明基于以太网的cpci总线仿真方法的具体实施过程如下:
第一步:以太网部署。采用全双工的模式,总线型拓扑结构的以太网进行数据的发送和接收。将两台pc机用两根双绞线分别连接到路由器上。将两台pc机和路由器的ip地址配置在一个网段内,两台pc机上分别部署gpm软件和hpm软件。使用以太网部署的优点是所需电缆较少,价格便宜,管理方便,连接简单。
第二步:发布/订阅的数据分发服务。首先调用获取主题函数获取消息发布(接收)的主题。而获取主题函数函数内部则是根据传过来的cpci的端口id自动生成主题,并将该主题返回到com_data_read和com_data_writ接口中,data_read和data_write再根据获取的主题创建发布者(订阅者),将消息发布出去(订阅该主题的消息)。这里的主题即就是端口id。用来唯一标识收发的两端。
第三步:接口的标准封装库。打开vs2010新建一个win32项目(命名为commbus),应用程序类型选择dll,直接点击完成即可。在头文件中添加cpci函数的声明。在.cpp文件中按照真实cpci总线标准接口进行仿真,添加所有函数的具体实现。编译运行后,即可在debug目录下生成commbus.lib和commbus.dll。
第四步,调用动态链接库,实现cpci总线仿真。2台pc机上分别部署的hpm软件和gpm软件中引用commbus链接库。
引用方式:
项目->属性->链接器->常规->附加库目录加入库目录
项目->属性->链接器->输入->附加依耐项加入库名称
其中,当hpm软件使用库函数com_data_writ()根据端口id将数据发送出去,在gpm软件中在接收端调用库函数data_read()根据端口id成功接收到数据。gpm软件使用库函数data_write()根据端口id将数据发送出去,在gpm软件中在接收端调用库函数com_data_read()根据端口id来成功接收到数据。cpci总线成功实现仿真。