一种在dm642型dsp内实现hit-tena中间件的方法

文档序号:7782853阅读:217来源:国知局
一种在dm642型dsp内实现hit-tena中间件的方法
【专利摘要】一种在DM642型DSP内实现HIT-TENA中间件的方法,本发明涉及在DM642型DSP内实现HIT-TENA中间件的方法。本发明是为了实现HIT-TENA中间件的服务,并解决异构系统的不兼容性,解决实时接入设备接入HIT-TENA平台的实时性差的问题。步骤一、根据HIT-TENA系统的不同服务的接口类型、数据元素类型、消息头格式与消息体格式定义传输的数据结构;步骤二、将中间件划分为网络线程、数据处理线程和数据装配线程;其中所述网络线程包括UDP接收线程、UDP发送线程、TCP接收线程和TCP发送线程,中间件根据步骤一中所述的数据结构进行消息传递。本发明属于虚拟仿真试验软件开发【技术领域】。
【专利说明】—种在DM642型DSP内实现HIT-TENA中间件的方法
【技术领域】
[0001]本发明涉及在DM642型DSP内实现HIT-TENA中间件的方法,属于虚拟仿真试验软件开发【技术领域】。
【背景技术】
[0002]针对试验和训练领域的需求,在借鉴HLA(High Level Architecture,高层体系结构)的基础上,美国国防部通过基础计划2010 (FI2010)工程开发了“试验训练使能体系结构”(Test and Training Enabling Architecture, TENA),实现祀场资源之间的互操作、重用和可组合。通过TENA体系结构,可以将分布在各靶场的资源互联起来,构建用于试验训练的“逻辑靶场”。
[0003]哈尔滨工业大学开发的试验训练使能体系结构(Harbin Institute ofTechnology-Test and Training Enabling Architecture, HIT-TENA)是虚拟试验仿真和验证领域的新型体系结构,是分布式仿真技术发展的新方向。
[0004]目前,我国试验靶场及国防工业部门已经建立了大量试验设备,由于没有统一的规范指导,这些试验设备的外部硬件接口、数据传输协议各异,尤其是数据传输协议与HIT-TENA中间件不兼容,属于异构系统,在接入HIT-TENA平台前要进行协议转换。因此,研制实时资源接入设备,解决试验资源接入HIT-TENA平台的实时性问题,对于平台能否有效支持完成高性能武器虚拟试验任务是至关重要的。
[0005]中间件是试验训练体系结构的一个重要基础设施,它为上层应用提供了底层通讯支持和基本服务。中间件主要解决系统建模、声明订购发布、数据订购发布等问题。
[0006]HIT-TENA中间件使用C++语言开发,运用ACE网络库实现跨平台网络编程,由于CCS2.20.18版本对C++提供非常有限的支持,特别是ACE网络库的操作系统层不支持DSP/BIOS实时操作系统,所以现有HIT-TENA中间件不能运行于DSP/B10S中。而且由于现有HIT-TENA中间件对ACE的深度依赖,也不能通过简单修改移植到DSP/B10S。因此,需要为资源接入设备开发面向DSP/B10S实时操作系统的中间件,并使用NDK网络开发工具包,为DSP/B10S的中间件软件提供网络编程支持利用DSP和NDK网络接口设计网络线程,实现了HIT-TENA中间件的服务。中间件共可以划分为三个部分若干网络线程、数据处理线程和数据装配线程,其中UDP数据包收发对应静态建模过程服务消息包的收发;TCP数据包的收发对应对象管理服务消息包的收发。

【发明内容】

[0007]本发明是为了实现HIT-TENA中间件的服务,并解决异构系统的不兼容性,解决实时接入设备接入HIT-TENA平台的实时性差的问题,而提出的一种在DM642型DSP内实现HIT-TENA中间件的方法。
[0008]本发明的一种在DM642型DSP内实现HIT-TENA中间件的方法按以下步骤实现:
[0009]步骤一、根据HIT-TENA系统的不同服务的接口类型、数据元素类型、消息头格式与消息体格式定义传输的数据结构;
[0010]步骤二、将中间件划分为网络线程、数据处理线程和数据装配线程;其中所述网络线程包括UDP接收线程、UDP发送线程、TCP接收线程和TCP发送线程,即完成了一种在DM642型DSP内实现HIT-TENA中间件的方法。
[0011]本发明的优点:
[0012]通过对中间件通信机制的研究和数据包的深入分析,以及DSP/B10S线程通信技术和线程同步技术的灵活运用,实现了中间件系统建模服务、声明管理服务、系统运行服务、发现服务以及对象管理服务,解决了资源接入设备独立参与试验系统的重大问题。
[0013]利用DM642这种DSP实现了 HIT-TENA中间件的基本功能。由于支持HIT-TENA的ACE网络库的操作系统层不支持DSP/B10S实时操作系统,因此,需要开发支持DSP/B10S的中间件软件来达到这个目的。由于在DSP中只需要实现数据的传输,转换,所以可以把完整的服务进行裁剪实现最基本的服务。
【专利附图】

【附图说明】
[0014]图1是【具体实施方式】一中的中间件线程的总体框图;
[0015]图2是UDP接收线程流程图;
[0016]图3是UDP发送线程流程图;
[0017]图4是TCP接收线程流程图;
[0018]图5是遍历rfds流程图;
[0019]图6 (a)是向上调整maxfd流程图;
[0020]图6 (b)是向下调整maxfd流程图;
[0021]图7是TCP发送线程流程图;
[0022]图8是中间件线程等待响应的方法;
[0023]图9是UDP数据包解析与分发线程流程图;
[0024]图10是心跳包装配线程流程图;
[0025]图11是TCP数据包装配线程流程图;
[0026]图12是TCP数据包处理线程流程图;
[0027]图13 是 M_Request_JoinSystem 请求消息包;
[0028]图14是MJoinSystem通知消息包;
[0029]图15 是 M_ResignSystem 通知消息包;
[0030]图16 是 M_Request_GetMemberOb jects 请求消息包;
[0031]图17 是 M_Reply_GetMemberOb jects 回复消息包;
[0032]图18 是 M_Request_SubscribeOb ject 请求消息包;
[0033]图19 是 M_Reply_SubscribeOb ject 回复消息包;
[0034]图2O 是 M_JoinSystemExecution 通知消息包;
[0035]图2I 是 M_ResignSystemExecution 通知消息包;
[0036]图22是对象值更新消息包;
[0037]图23 是 M_MemberOnline 消息包。【具体实施方式】
[0038]【具体实施方式】一:本实施方式的一种实现HIT-TENA中间件的方法,其具体应该包括以下两个部分:
[0039]步骤一、根据HIT-TENA系统的不同服务的接口类型、数据元素类型、消息头格式、消息体格式定义传输的数据结构。
[0040]步骤二、将中间件划分为网络线程、数据处理线程和数据装配线程,其中网络线程包括UDP接收线程和发送线程、TCP接收线程和发送线程,线程划分情况如图1所示。
[0041]具体的步骤二中所需要实现的网络线程将接收和发送分离在不同的线程中,可以解除接收和发送的相互影响,实现数据接收和数据发送并发进行。中间件只需要向试验系统其他成员公布m)P接收套接字的端口号和TCP接收套接字的端口号,它通过系统建模服务的加入系统通知消息包,和系统运行服务的加入系统运行通知消息包向试验系统其他成员公布这些端口号,为进一步的通信奠定基础。其所包含的网络线程如下:
[0042]具体的,其UDP的数据包装配所对应的API设计,其特征在于中间件向操作界面软件暴露了一系列API,在网页操作界面中发出加入系统、声明订购、启动运行等指令时,CGI线程调用这些API,装配请求消息包或通知消息包,完成操作要求。其API接口包括加入试验系统、获取系统成员发布的所有对象、订购属性、订购对象、取消订购属性、取消订购对象、加入试验系统运行、加入试验系统运行、退出试验系统。其实现方法如下:
[0043]具体的,中间件的UDP数据包解析与分发线程、心跳包装配线程、TCP数据包装配线程、TCP数据包处理线程,其详细设计如下:
[0044]本实施方式的优点:
[0045]通过对中间件通信机制的研究和数据包的深入分析,以及DSP/B10S线程通信技术和线程同步技术的灵活运用,实现了中间件系统建模服务、声明管理服务、系统运行服务、发现服务以及对象管理服务,解决了资源接入设备独立参与试验系统的重大问题。
[0046]利用DM642这种DSP实现了 HIT-TENA中间件的基本功能。由于支持HIT-TENA的ACE网络库的操作系统层不支持DSP/B10S实时操作系统,因此,需要开发支持DSP/B10S的中间件软件来达到这个目的。由于在DSP中只需要实现数据的传输,转换,所以可以把完整的服务进行裁剪实现最基本的服务。
[0047]【具体实施方式】二:本实施方式与【具体实施方式】一不同的是:所述步骤一中的不同服务具体包括以下五种服务:系统建模服务、声明管理服务、系统运行服务、对象管理服务与发现服务;其中,所述系统建模服务、声明管理服务、系统运行服务与发现服务属于静态建模过程。其它步骤及参数与【具体实施方式】一相同。
[0048]【具体实施方式】三:本实施方式与【具体实施方式】一或二不同的是:所述步骤一中根据HIT-TENA系统的不同服务的接口类型、数据元素类型、消息头格式与消息体格式定义传输的数据结构具体为:
[0049]第一,静态建模过程中传输的数据包由消息头和消息体构成,所述消息头的格式包括消息编号、服务名称长度、服务名称、消息类型长度、消息类型、消息名称长度、消息名称、成员名称长度、成员名称、消息体长度与消息体共11个部分;
[0050]所述服务名称、消息类型和消息名称是为静态建模过程服务设置的标识字符串,通过不同的服务名称,区分系统建模服务、声明管理服务、系统运行服务与发现服四种不同的服务,根据不同的消息类型和消息名称区分不同的操作;
[0051]第二,对象管理服务包括多种类型的数据包,裁剪掉设备不需要支持的数据包后,资源接入设备对象管理服务包含的消息类型有2种,分别为属性值更新及对象值更新;
[0052]所述属性值更新的消息格式包括数据包总长度、消息类型代码、源成员名称长度、源成员名称、源对象名称长度、源对象名称、源属性名称长度、源属性名称、时间戳标识、时间戳、属性值长度与属性值数据共12个部分;
[0053]所述对象值更新则包括数据包总长度、消息类型代码、源成员名称长度、源成员名称、源对象名称长度、源对象名称、时间戳标识、时间戳、对象值长度与对象值数据共10个部分,属性值更新消息和对象值更新消息的时间戳字段为一结构体,大小为28字节。
[0054]其它步骤及参数与【具体实施方式】一或二相同。
[0055]【具体实施方式】四:本实施方式与【具体实施方式】一至三之一不同的是:所述的5种服务由中间件按一定规律组织多种类型的数据包,实现各项服务和功能,成员参与试验系统的整个过程可以划分为三个状态:已退出试验系统、在试验系统中且未运行状态与在试验系统中运行状态,通过发送一定类型的数据包,实现状态切换;
[0056]当处在“已退出试验系统”的状态时,发送加入系统要求的消息以及加入系统的回复消息时,则会发出加入系统的消息,此时,系统进入“在试验系统且未运行”状态,当系统处在“在试验系统且未运行”状态时,接收到注销系统指令时,系统会转到状态“已退出试验系统”状态,而收到执行指令时,则会进入“在实验系统运行”状态;当系统处在“在试验系统运行”状态时,收到注销系统实行指令时,则会返回“在系统且未运行”的状态;处在“在试验系统且未运行”状态或者“在试验系统运行”状态时,成员需要定时发送心跳包;处在“在试验系统且未运行”状态时,成员可以发送声明管理服务消息包,如发送请求消息包并接收相应的响应,或者发送通知消息,从而实现对象或者属性的订购;处在“在试验系统运行”状态时,成员可以运行对象管理服务,接收和处理属性值更新消息或对象值更新消息包,或者发送属性值更新消息或对象值更新消息包。
[0057]其它步骤及参数与【具体实施方式】一至三之一相同。
[0058]【具体实施方式】五:本实施方式与【具体实施方式】一至四之一不同的是:所述步骤二中所有线程按以下步骤设计:
[0059]步骤一、根据服务要求,设计中间件相关数据结构;
[0060]步骤二、根据服务要求,设计中间件的相关网络线程;
[0061]步骤三、根据服务要求,设计中间件的UDP数据包解析与分发线程、心跳包装配线程、TCP数据包装配线程与TCP数据包处理线程。
[0062]其它步骤及参数与【具体实施方式】一至四之一相同。
[0063]【具体实施方式】六:本实施方式与【具体实施方式】一至五之一不同的是:步骤一中所述定义传输的数据结构包含设计成员列表、成员订购列表、发布列表、回应等待结构体UDP接收队列节点的数据结构、UDP发送队列队列节点的数据结构、TCP发送队列队列节点的数据结构以及输入队列和输出队列;
[0064](I)成员列表:成员列表包含成员的各项信息,包括成员名称、中间件发送静态建模过程服务数据包的IP地址和端口号、发送对象管理服务数据包的IP地址和端口号、最近接收到心跳包的时间、成员运行状态和TCP连接套接字;[0065](2)成员订购列表:资源接入设备通过声明管理服务向试验系统其他成员订购对象或属性;
[0066]其中,所述订购列表是用于存储这些订购关系的,订购列表包含对象编号、属性编号、成员、对名称象名称和属性名称,存储对象订购记录和属性订购记录,对于对象订购记录,设置属性编号字段为FFFFH,属性名称为空字符串,对象编号和属性编号是对象和属性信息在资源接入设备中的存储编号;
[0067](3)订购列表:发布列表存储资源接入设备的对象或属性被其他成员订购的情况,列表中包含对象编号、属性编号以及成员列表节点指针;
[0068](4)回应等待结构体:该结构体发出请求构体用于中间消息后,等待回复消息的过程;它包含消息编号、消息体长度和消息首地址;
[0069](5)UDP接收队列节点的数据结构:UDP接收队列的节点包含数据包的首地址和长度;
[0070](6)UDP发送队列队列节点的数据结构:UDP发送队列节点的数据结构包含待发送数据包的首地址和长度,以及目的成员的IP地址和端口号;
[0071](7)TCP发送队列队列节点的数据结构:TCP发送队列节点的数据结构包含待发送数据包的首地址data和长度length,以及与目的成员的TCP连接套接字;TCP发送线程根据该队列节点中length字段取值的不同,区分数据包和不同的命令,具体如下:
[0072]当length大于O时,为普通数据节点,发送之;
[0073]当length为-1时,与所有的成员建立TCP连接;
[0074]当length为_2时,与指定成员建立TCP连接;
[0075]当I ength为-3时,关闭所有TCP连接;
[0076]当length为_4时,关闭指定成员的TCP连接;
[0077]当长度字段为-2或者-4时,首地址指针data指向成员列表的节点
[0078](8)输入队列和输出队列:输入队列和输出队列的节点包含对象号信息,存储被更新的对象的对象号。
[0079]其它步骤及参数与【具体实施方式】一至五之一相同。
[0080]【具体实施方式】七:本实施方式与【具体实施方式】一至六之一不同的是:步骤二所涉及的线程是将接收和发送分离在不同的线程中,可以解除接收和发送的相互影响,实现数据接收和数据发送并发进行;中间件只需要向试验系统其他成员公布UDP接收套接字的端口号和TCP接收套接字的端口号,它通过系统建模服务的加入系统通知消息包,和系统运行服务的加入系统运行通知消息包向试验系统其他成员公布这些端口号,其所包含的网络线程如下:
[0081 ] (I)中间件网络线程与NDK协议栈事件调度器线程的同步:中间件网络线程在NDK协议栈事件调度器线程启动后运行;利用NDK的NC_NetStart调用,该调用的参数中包含Start回调函数指针,调度器线程在协议栈准备就绪后调用该回调函数,因此可以在该回调函数实现中创建并启动需要的若干网络线程,达到所要求的同步关系;
[0082]使用信号量SEM0,各网络线程需要等待SEMO有效才能开始进一步的流程;另一方面,在NC_NetStart的Start回调函数中,使信号量SEMO的计数加四(post四次,各网络线程消耗一个计数)[0083](2)UDP接收线程:图2所示为UDP接收线程的流程图。UDP接收线程接收到数据后,首先进行嵌套字绑定,然后将数据添加到接收队列,并传递接收信号量,以激活UDP数据包解析与分发线程对数据包进行处理;
[0084](3) UDP发送线程:如图3所示UDP发送线程等待信号量,当pend成功时,从发送队列中获取一则数据包并发送到目的成员(发送队列节点中包含目的成员的IP地址和端口号信息);
[0085](4) TCP接收线程:TCP接收线程需要支持试验系统多个成员同时连接和发送数据,通过使用套接字select调用实现。TCP接收线程的流程图如图4所示。该流程图涉及到的变量说明如下:
[0086]rdfs_keep:fd_set类型,保存线程中的所有套接字。
[0087]rdfs:fd_set类型,存储线程中活动的套接字。在调用fdSelect前将rdfs_keep拷贝至rdfs。
[0088]maxfd:1nt类型,线程的最大套接字描述符加I。将maxfd和rdfs作为参数调用fdSelect API,即 fdSelect(maxfd, &rfds, NULL, NULL, NULL)。
[0089]图5为遍历rfds的流程图,调整maxfd的流程图见图6 (a)和图6 (b)。其中包含两个自定义的操作fd_set结构体的宏,定义如下:
[0090]#define FD_ISALLCLR(p)((p)->fds_bits[O]==0)
[0091 ] #define FD_RSHIFT_TEMP(n, `p)((p)->fds_bits[0]?(n))
[0092]TCP接收线程使用fdSelect监视监听套接字和连接套接字的活动,并进行处理,从而得到新的连接套接字,或者接收得TCP数据包,或者关闭断开的连接,接收到数据后,将数据添加到接收队列QUE_RCVTCp,并post信号量SEM_RCVTCp,激活TCP数据包处理线程对数据包进行处理;
[0093](5) TCP发送线程:该线程的设计需要支持与试验系统多个运行成员进行连接并发送数据;在资源接入设备中间件实现中,这通过在TCP数据发送队列的节点中集成数据和命令实现。TCP发送线程的流程图如图7所示;TCP发送线程等待信号量SEM_SndTcp,当pend成功时,从发送队列QUE_SndTcp中获取一个节点,若为数据包,则将它发送到目的成员(队列节点中targetsock字段为目的成员套接字信息);如果是命令,则新建或者关闭连接;新建连接得到的套接字存储在成员列表中相应成员节点的tcpsock字段中;
[0094]在TCP发送线程中,若新建连接成功,则post信号量SEM_Connected ;而在关闭连接后,post信号量SEM_Done。
[0095]其它步骤及参数与【具体实施方式】一至六之一相同。
[0096]UDP的数据包装配所对应的接口函数设计,其特征在于中间件向操作界面软件暴露了一系列接口函数,在网页操作界面中发出加入系统、声明订购、启动运行等指令时,CGI线程调用这些函数,装配请求消息包或通知消息包,完成操作要求;其接口函数包括加入试验系统、获取系统成员发布的所有对象、订购属性、订购对象、取消订购属性、取消订购对象、加入试验系统运行、加入试验系统运行与退出试验系统;其实现方法如下:
[0097]加入试验系统、获取系统成员发布的所有对象、订购属性、订购对象这些函数发送请求消息,然后等待响应消息并进行进一步的处理;因为所有的UDP数据包都由UDP接收线程接收,所以需要额外的信息将匹配的响应消息分拣出来;正因如此,在中间件的静态建模过程服务数据包格式设计时,设置了消息编号字段;发送方保证发送的每则请求消息具有唯一的消息编号,假设为N ;接收方在回复响应消息时,将响应消息包的消息编号也设置为N ;发送方接收到响应消息后,提供给等待该消息的线程;
[0098]具体实现时,设置一个全局唯一的WaitingR印Iy结构体变量,再设置SEM_Iteply、SEM_SendRequeSt两个信号量,其中SEM_Iteply信号量用于发送请求数据包的线程与UDP数据包解析与分发线程的同步,SEM_SendRequest信号量用于保证WaitingReply结构体变量的互斥使用,确保在收到响应消息前,变量的值不被另一请求覆盖。该过程的流程如图8所
/Jn ο
[0099]所涉及的中间件的UDP数据包解析与分发线程、心跳包装配线程、TCP数据包装配线程、TCP数据包处理线程,其详细设计如下:
[0100]I) UDP数据包解析与分发线程:UDP数据包解析与分发线程对UDP接收线程接收的数据包进行解析,并根据数据包的类型做不同的处理,该线程的流程图如图9所示;接收到通知消息后,更新中间件的数据;接收到请求消息后,需要回复响应消息包,并且设置响应消息包的消息编号为请求消息的消息编号;
[0101]2)心跳包装配线程:在资源接入设备加入试验系统后,心跳包装配线程每隔50s向成员列表中的各成员发送M_MemberOnline通知消息.该线程的流程图如图10所示;
[0102]3) TCP数据包装配线程:TCP数据包装配线程激活后,确定更新的对象,然后遍历发布列表,将更新后的数据发送到订购了这个对象或者相关属性的成员;发送消息包前若检测到尚未建立连接,则首先向TCP发送线程发送创建连接命令.图11描述了 TCP数据包装配线程的执行流程;
[0103]TCP数据包装配线程设置资源对象缓冲区,将资源对象实例化区的内容拷贝至该区域,使得在发布对象值或属性值更新消息期间,上行协议转换过程仍可更新实例化区域,即发布过程和更新过程互不影响;在操作资源对象实例化区时,伴随获取和释放资源锁,从而保证对实例化区域操作的原子性。发送连接命令后,当SEM_Connected信号量有效时,表明成功建立连接;
[0104]4) TCP数据包处理线程解析接收到的数据包,如果是对象值更新消息包,则查询订购列表并更新对象实例化区域,然后将对象的对象号添加到QUE_0ut队列,再激活下行协议转换线程将对象转换为硬件协议数据包;如果是属性值更新消息包,则根据订购列表的查询结果更新对象的部分实例化区域,然后清除更新状态的相应比特位,当更新状态的各比特位都被清除时,将对象的对象号添加到QUE_0ut队列,并激活下行协议转换线程执行。更新对象实例化区域时,需要使用资源锁LCK_0bj0ut进行保护。执行流程如图12所示;
[0105]线程发出SEM_0ut信号量激活下行协议转换线程后,重新设置更新状态为对象的目标更新状态,为下一轮对象更新过程做好准备。
[0106]仿真实验:
[0107]分别针对五个服务的实现功能,进行五组不同的实验,验证其服务运行是否正常,符合HIT-TENA规范。
[0108]系统建模服务测试:在资源接入设备加入或退出试验系统过程中截获通信数据包,图13显示了截获的M_Request_JoinSystem请求消息包,图14和图15显示了截获的MJoinSystem通知消息包和M_ResignSystem通知消息包(所示消息包中从第2AH字节开始至结束部分为有效载荷,其余为UDP等协议的首部)。经过比对,资源接入设备发送的这些消息包均符合HIT-TENA的要求(。发送了 MJoinSystem通知消息包后,直至发送M_ResignSystem通知消息包为止,系统其他成员能够发现资源接入设备,资源接入设备也能查看到其他成员。这表明系统建模服务运行正常。
[0109]声明管理服务测试:图16显示了 M_Request_GetMemberOb jects请求消息包,图17显不了设备回复的M_Reply_GetMemberOb jects消息包;图18为M_Request_SubscribeOb ject请求消息包,图19为M_Reply_SubscribeOb ject回复消息包(所不消息包中从第2AH字节开始至结束部分为有效载荷,其余为UDP等协议的首部)。这些消息包均符合HIT-TENA的要求。通过这些数据包的处理,资源接入设备可以查看并订购试验系统其他成员发布的对象,也可以处理其他成员的订购请求。可见,资源接入设备能正常运行声明管理服务。
[0110]系统运行服务测试:图20显示了 M_JoinSystemExecution通知消息包,图21显示了 M_ResignSystemExecution通知消息包(所示消息包中从第2AH字节开始至结束部分为有效载荷,其余为Μ)Ρ等协议的首部),均符合HIT-TENA的要求。通过这两种数据包,资源接入设备向其他成员声明已准备好运行对象管理服务,可以开始数据订购发布过程。系统运行服务运行正常。
[0111]对象管理服务测试:资源接入设备在运行对象管理服务过程中发送或者处理对象值更新消息包和属性值更新消息包。测试显示资源接入设备可以接收试验系统成员发送的对象值或属性值更新消息包,也能够正常向各个订购成员发送对象值或属性值更新消息包,资源接入设备与试验系统成员能够进行数据订购发布过程。图22显示了资源接入设备发送的对象值更新消息包(其中从第36H字节开始至结束部分为有效载荷,其余为TCP等协议的首部),符合HIT-TENA的要求。对象管理服务运行正常。
[0112]发现服务测试:资源接入设备发送的M_MemberOnline消息包如图23所示(所示消息包中从第2AH字节开始至结束部分为有效载荷,其余为UDP等协议的首部),与HIT-TENA的要求相符。设备能定时发送心跳数据包,提示其他成员设备运行正常。发现服务运行正

巾O
[0113]通过测试表明,资源接入设备中间件实现了最小服务功能集,即系统建模服务、声明管理服务、系统运行服务、对象管理服务,以及发现服务。资源接入设备具备独立参与试验系统进行交互的能力。
【权利要求】
1.一种在DM642型DSP内实现HIT-TENA中间件的方法,其特征在于在DM642型DSP内实现HIT-TENA中间件的方法按以下步骤实现:步骤一、根据HIT-TENA系统的不同服务的接口类型、数据元素类型、消息头格式与消息体格式定义传输的数据结构;步骤二、将中间件划分为网络线程、数据处理线程和数据装配线程;其中所述网络线程包括UDP接收线程、UDP发送线程、TCP接收线程和TCP发送线程,中间件根据步骤一中所述的数据结构进行消息传递,即完成了一种在DM642型DSP内实现HIT-TENA中间件的方法。
2.根据权利要求1所述的一种在DM642型DSP内实现HIT-TENA中间件的方法,其特征在于,所述步骤一中的不同服务具体包括以下五种服务:系统建模服务、声明管理服务、系统运行服务、对象管理服务与发现服务;其中,所述系统建模服务、声明管理服务、系统运行服务与发现服务属于静态建模过程。
3.根据权利要求1或2所述的一种在DM642型DSP内实现HIT-TENA中间件的方法,其特征在于,所述步骤一中根据HIT-TENA系统的不同服务的接口类型、数据元素类型、消息头格式与消息体格式定义传输的数据结构具体为:第一,静态建模过程中传输的数据包由消息头和消息体构成,所述消息头的格式包括消息编号、服务名称长度、服务名称、消息类型长度、消息类型、消息名称长度、消息名称、成员名称长度、成员名称、消息体长度与消息体共11个部分;所述服务名称、消息类型和消息名称是为静态建模过程服务设置的标识字符串,通过不同的服务名称,区分系统建模服务、声明管理服务、系统运行服务与发现服四种不同的服务,根据不同的消息类型和消息名称区分不同的操作;第二,对象管理服务包括多种类型的数据包,裁剪掉设备不需要支持的数据包后,资源接入设备对象管理服务包含的消息类型有2种,分别为属性值更新及对象值更新;所述属性值更新的消息格式包括数据包总长度、消息类型代码、源成员名称长度、源成员名称、源对象名称长度、源对象名称、源属性名称长度、源属性名称、时间戳标识、时间戳、属性值长度与属性值数据共12个部分;所述对象值更新则包括数据包总长度、消息类型代码、源成员名称长度、源成员名称、源对象名称长度、源对象名称、时间戳标识、时间戳、对象值长度与对象值数据共10个部分,属性值更新消息和对象值更新消息的时间戳字段为一结构体,大小为28字节。
4.根据权利要求3所述的一种在DM642型DSP内实现HIT-TENA中间件的方法,其特征在于所述的5种服务由中间件按一定规律组织多种类型的数据包,实现各项服务和功能,成员参与试验系统的整个过程可以划分为三个状态:已退出试验系统、在试验系统中且未运行状态与在试验系统中运行状态,通过发送一定类型的数据包,实现状态切换;当处在“已退出试验系统”的状态时,发送加入系统要求的消息以及加入系统的回复消息时,则会发出加入系统的消息,此时,系统进入“在试验系统且未运行”状态,当系统处在“在试验系统且未运行”状态时,接收到注销系统指令时,系统会转到状态“已退出试验系统”状态,而收到执行指令时,则会进入“在实验系统运行”状态;当系统处在“在试验系统运行”状态时,收到注销系统实行指令时,则会返回“在系统且未运行”的状态;处在“在试验系统且未运行”状态或者“在试验系统运行”状态时,成员需要定时发送心跳包;处在“在试验系统且未运行”状态时,成员可以发送声明管理服务消息包,如发送请求消息包并接收相应的响应,或者发送通知消息,从而实现对象或者属性的订购;处在“在试验系统运行”状态时,成员可以运行对象管理服务,接收和处理属性值更新消息或对象值更新消息包,或者发送属性值更新消息或对象值更新消息包。
5.根据权利要求1所述的一种在DM642型DSP内实现HIT-TENA中间件的方法,其特征在于,所述步骤二中所有线程按以下步骤设计:步骤一、根据服务要求,设计中间件相关数据结构;步骤二、根据服务要求,设计中间件的相关网络线程;步骤三、根据服务要求,设计中间件的UDP数据包解析与分发线程、心跳包装配线程、TCP数据包装配线程与TCP数据包处理线程。
6.根据权利要求1所述的一种在DM642型DSP内实现HIT-TENA中间件的方法,其特征在于,步骤一中所述定义传输的数据结构包含设计成员列表、成员订购列表、发布列表、回应等待结构体UDP接收队列节点的数据结构、UDP发送队列队列节点的数据结构、TCP发送队列队列节点的数据结构以及输入队列和输出队列;(1)成员列表:成员列表包含成员的各项信息,包括成员名称、中间件发送静态建模过程服务数据包的IP地址和端口号、发送对象管理服务数据包的IP地址和端口号、最近接收到心跳包的时间、成员运行状态和TCP连接套接字;(2)成员订购列表:资源接入设备通过声明管理服务向试验系统其他成员订购对象或属性;其中,所述订购列表是用于存储这些订购关系的,订购列表包含对象编号、属性编号、成员、对名称象名称和属性名称,存储对象订购记录和属性订购记录,对于对象订购记录,设置属性编号字段为FFFFH,属`性名称为空字符串,对象编号和属性编号是对象和属性信息在资源接入设备中的存储编号;(3)订购列表:发布列表存储资源接入设备的对象或属性被其他成员订购的情况,列表中包含对象编号、属性编号以及成员列表节点指针;(4)回应等待结构体:该结构体发出请求构体用于中间消息后,等待回复消息的过程;它包含消息编号、消息体长度和消息首地址;(5)UDP接收队列节点的数据结构:UDP接收队列的节点包含数据包的首地址和长度;(6)UDP发送队列队列节点的数据结构:UDP发送队列节点的数据结构包含待发送数据包的首地址和长度,以及目的成员的IP地址和端口号;(7)TCP发送队列队列节点的数据结构:TCP发送队列节点的数据结构包含待发送数据包的首地址data和长度length,以及与目的成员的TCP连接套接字;TCP发送线程根据该队列节点中length字段取值的不同,区分数据包和不同的命令,具体如下:当length大于0时,为普通数据节点,发送之;当length为-1时,与所有的成员建立TCP连接;当length为-2时,与指定成员建立TCP连接;当length为-3时,关闭所有TCP连接;当length为-4时,关闭指定成员的TCP连接;当长度字段为_2或者_4时,首地址指针data指向成员列表的节点(8)输入队列和输出队列:输入队列和输出队列的节点包含对象号信息,存储被更新的对象的对象号。
7.根据权利要求6所述的一种在DM642型DSP内实现HIT-TENA中间件的方法,其特征在于,步骤二所涉及的线程是将接收和发送分离在不同的线程中,可以解除接收和发送的相互影响,实现数据接收和数据发送并发进行;中间件只需要向试验系统其他成员公布m)P接收套接字的端口号和tcp接收套接字的端口号,它通过系统建模服务的加入系统通知消息包,和系统运行服务的加入系统运行通知消息包向试验系统其他成员公布这些端口号,其所包含的网络线程如下:(1)中间件网络线程与NDK协议栈事件调度器线程的同步:中间件网络线程在NDK协议栈事件调度器线程启动后运行;利用NDK的NC_NetStart调用,该调用的参数中包含Start回调函数指针,调度器线程在协议栈准备就绪后调用该回调函数,因此可以在该回调函数实现中创建并启动需要的若干网络线程,达到所要求的同步关系;使用信号量SEMO,各网络线程需要等待SEMO有效才能开始进一步的流程;另一方面,在NC_NetStart的Start回调函数中,使信号量SEMO的计数加四;(2)UDP接收线程:UDP接收线程接收到数据后,首先进行嵌套字绑定,然后将数据添加到接收队列,并传递接收信号量,以激活UDP数据包解析与分发线程对数据包进行处理;(3)UDP发送线程:UDP发送线程等待信号量,当pend成功时,从发送队列中获取一则数据包并发送到目的成员;(4)TCP接收线程:TCP接收线程需要支持试验系统多个成员同时连接和发送数据,通过使用套接字select调用实现,TCP接收线程使用fdSelect监视监听套接字和连接套接字的活动,并进行处理,从而得到新的连接套接字,或者接收得TCP数据包,或者关闭断开的连接,接收到数据后,将数据添加到接收队列QUE_RcvTcp,并post信号量SEM_RcvTcp,激活TCP数据包处理线程对数据包进行处理;(5)TCP发送线程:该线程的设计需要支持与试验系统多个运行成员进行连接并发送数据;在资源接入设备中间件实现中,这通过在TCP数据发送队列的节点中集成数据和命令实现;TCP发送线程等待信号量SEM_SndTcp,当pend成功时,从发送队列QUE_SndTcp中获取一个节点,若为数据包,则将它发送到目的成`员;如果是命令,则新建或者关闭连接;新建连接得到的套接字存储在成员列表中相应成员节点的tcpsock字段中;在TCP发送线程中,若新建连接成功,则post信号量SEM_Connected ;而在关闭连接后,post 信号量 SEM_Done。
【文档编号】H04L29/08GK103677853SQ201310743600
【公开日】2014年3月26日 申请日期:2013年12月30日 优先权日:2013年12月30日
【发明者】魏长安, 徐鹏, 许永辉, 姜守达, 谢东周 申请人:哈尔滨工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1