摘要:为满足信号处理系统发展的需求,在CORBA的基础上开发支持PCI总线的可插拔协议。以软件通信体系结构(SCA)为
>> 基于CORBA的Java开发与应用的研究 基于UML和CORBA的空间应用仿真研究 基于CORBA的协同CAD系统研究 基于智能变电站的多接口可插拔式智能电能计量系统的探讨 基于CORBA的分布式系统在核电站DCS的设计与研究 基于Java CORBA的企业分布式计算模型研究 基于CORBA的书目信息采访系统分析与研究 关于可热插拔系统器件的问题 基于RapidIO的实时CORBA中间件实现 基于CORBA的C/S分布式计算模型 基于CORBA的通信中间件设计 基于CORBA技术的网络数据库应用 基于AODV协议的可靠路由研究 基于UWB的MAC协议仿真研究 基于SPIN的协议分析验证研究 一种基于隐马尔可夫模型的协议识别技术 浅谈基于CORBA的电子商务系统的安全性 基于CORBA技术的电业局智能管理信息系统 基于CORBA的通信网动态网络规划系统设计 基于CORBA技术的EDFA远程监控软件架构设计 常见问题解答 当前所在位置:l中预先将0x54414f06 "TAO\0x06"当作 Compact PCI bus总线数据的标签。
当完成上述工作后使用下面的命令可将PCIIOP协议加载到ORB中:
添加以上文件后,重新编译时发现能够在TAO中支持PCIIOP协议。
3.3 支持PCI总线的可插拔协议实现的关键环节
服务端必须产生一个IOR,它将包含所有可能的inter-ORB和transport- protocol-specific profile,使得对象可以被访问到。当服务器端启动时会立刻调用TAO_PCIIOP_Acceptor类的open函数,通过该函数会传递给TAO_PCIIOP_Acceptor类一个ACE_Reactor类的指针;open函数进一步调用open_i函数。在该函数中实例化了TAO_PCIIOP_Connection_Handler,然后调用ACE_Reactor类的register_handler函数来注册TAO_PCIIOP_Connection_Handler类。open_i函数最后将TAO_PCIIOP_Connection_Handler与ACE_IPC_SAP类型的handle_联系在一起,使得每当SOCKET接收到报文,就会调用TAO_PCIIOP_Connection_Handler类的handle_input函数进行接收。
TAO_Acceptor类的open函数作用是初始化Acceptor,分析指定的协议并创建endpoint对象传递给Acceptor。TAO_Acceptor类的create_mprofile函数作用是创建指定协议的Profile对象并且把该profile传递给TAO_MProfile object。执行create_mprofile几乎可以完整的建立TAO的可插拔协议。该函数所定义的内容包含一个可插拔协议的版本号、地址信息、对象键值、所使用的数据代码集等信息,这些信息是服务端产生的IOR文件的重要组成部分。
PCIIOP协议要实现支持PCI总线传输,需要将PCI设备的地址写入IOR文件中,客户端只要对IOR文件进行解析,就可以正确定位到每个PCI设备。因此,首先要在TAO_PCIIOP_Endpoint类的构造函数里定义一个char类型的DriverNum变量,如果使用固定的寻址信息,可在构造函数中直接赋值。其次,需要在TAO_PCIIOP_Endpoint类中定义一个用以调用DriverNum的函数。该函数的返回值即在构造函数中定义的DriverNum值。最后在TAO_PCIIOP_Profile类中利用create_profile_body函数调用encap.write_octet (this->endpoint_.DriverNum())将DriverNum函数封装到IOR文件中。
由于基于TAO可插拔协议框架开发新的协议要求定义API函数来安装ESIOP及其传输依赖的组件,因此,需要事先定义好支持PCI驱动函数 API接口函数,并在调试之前把#include "CPCI_API.h"命令写进TAO_PCIIOP_Transport.cpp和Connection_handler.cpp的头文件中,同时要把PMC_DLL.dll,PMC_DLL.lib两个文件复制到要调试的文件下,并在program argument添加PMC_DLL.dll库已备调用。
4 PCIIOP协议分析验证
当协议定义完成之后,对协议的验证工作在整个协议开发的过程中同样具有相当的地位。通过对协议代码的调试可以发现程序中的不足和错误,在不断的出错、查错和改错的过程中,不断地积累经验,完善整个程序,从而使该协议可以很好的实现预期的目标。
通过熟悉SCA体系结构和PCI总线通信的基本知识,在前面工作的基础上已经在TAO的可插拔协议框架中添加了PCIIOP协议,为了验证该协议的可行性,下面将在项目平台上对服务器端和客户端的实现分别进行分析和验证。
4.1 服务端寻址信息的实现验证
考虑到IOR文件中包含了网络协议、版本号、对象键值、寻址等重要的信息,是完成CORBA通信的关键。因此,将IOR文件作为重点来进行验证。通过前面的分析可知,TAO可插拔协议框架中是使用-ORBEndpoint选项来直接传递指定寻址信息的,可以通过对-ORBEndpoint的具体修改来改变IOR文件中PCI总线设备的地址信息。从而在IOR文件中体现出可自主选择的PCI总线设备地址。
例如,要想获取7号设备的信息,可以通过将-ORBEndpoint构造函数中的DriverNum值赋为7来实现,具体办法如下:
经过上述的设置,开启服务后,在服务器端产生的IOR文件中可以看到,已经将选定的寻址信息写入了IOR文件中,如***5所示:
***5 写入DriverNum的IOR
4.2 客户端发送数据
客户端的发送数据工作是由TAO_PCIIOP_Transport类的send来完成的。send函数定义如下:
服务器端创建了IOR后,客户端的ORB会获取到该文件并进行解析,获取相应的寻址信息即DriverNum。得到的DriverNum会被赋值给TAO_PCIIOP_Endpoint类的DriverNum函数,这样客户端在发送请求报文就可以准确的发送到服务器端指定的设备中。开启客户端后,在远端可以使用ChipScope软件来获取数据的发送情况。客户端在发送数据时,send函数会调用如下句柄:HANDLE hDevice = CPCI_OpenDeviceHandle(DriverNum)来打开PCI设备进行接收数据[9]。在send函数中设置断点,可以实时监控数据的发送情况。当数据发送完毕,在ChipScope软件中可以观察到客户端发送出来的请求报文的全部内容。如***6、7所示:(红色标出的部分代表GIOP版本为1.2)
截***
5 结束语
SCA是一个功能强大的框架,它实现了可变的、可重用的基于组件的应用程序。其采用的中间件CORBA 有着良好的开放性和扩展性。加之PCI总线具有高数据传输率、***于处理器、支持多个外设等独特性能,被广泛的应用在现今主流产品中,因此开发支持PCI总线的CORBA可插拔协议具备广阔的应用前景。
参考文献:
[1] Modular Software-Programmable Radio Consortium. Support and Rationale Document for the Software Communications Architecture Specification (v2.2.2). [R] .Washington: JTRS Joint Program Office, 2006.
[2] 雍婷.基于SCA规范的PCI设备驱动设计与实现[D].国防科学技术大学,2006.
[3] Henning M, Vinoski S. 基于C++的CORBA高级编程[M].徐金梧,徐科,吕志民,等,译.北京:清华大学出版社,2000.
[4] 李方,张虹.GIOP协议和CORBA 的性能优化[J].微计算机信息,2006,22(7):3.
[5] 韦乐平,薛君敖,孟洛明.CORBA系统结构、原理与规范[M].北京:电子工业出版,2000.
[6] Douglas C,Chris Cleeland Applying a Pattern Language to Develop Extensible ORB Middleware[J].IEEE Communications Magazine Special Issue,1999,37(4).
[7] 曾远方,韩元杰.基于TAO的CORBA程序设计[J].计算机与现代化,2003.
[8] 袁可亮,范建华,李晓光.基于PCI总线的ESIOP的设计与实现[J].山西电子技术,2007(2):36-37,45.
[9] 武安河.Windows 2000/XP WDM设备驱动程序开发[M].北京:电子工业出版社,2005.
转载请注明出处学文网 » 基于CORBA的可插拔协议研究