基于HLA的分布式网络仿真组件的研究实现
时间:12-06
来源:互联网
点击:
3.2 通讯组件的实现
作为一种通信组件,他不仅需要完成上层HLA仿真主程序给他的发送报文的分发及从其他仿真节点收到的仿真数据报文的解析,还提供对外清晰的交互接口。同时作为仿真工作的一个部件,他需要工作在一个复杂的网络环境中,在不能很多程度上与占有宝贵的分布式处理机的处理时问,作为网络组件经常会在某些时间,等待连接、或者等待数据报文而发生严重的阻塞,以及需要不断的监听端口,从而耗费处理机时间,信号Windows提供了异步SOCKET的API接口使得组件设计能够一直以异步方式工作的应用层,不断向网络层接收和发送数据报文。但是单纯实用原始异步SOCKET的API接口仍然不能满足某些特定的要求,不能很好地融入HLA仿真应用系统中去。因此首先对Windows提供的异步SOCKET套接字CAsyncSocket进行特定封装。
下面给出部分封装代码:

在应用中申请一个组件的主构造类,在该类中去实例化经过封装的异步套接字来进行底层网络数据的收发,组件实例可以接收到初始化该组件的操作句柄,完成配合仿真节点完成仿真主题工作,数据的交互,数据的处理等。
下面是主题组件的实体类。

仿真节点只要向组件发送一启动命令(IniComponent(HWND m_hWnd))组件就将启动并完成组件的初始化,如组件全局SOCKET的版本请求、版本协商、经过封装后的异步套接字实例化、SOCKET通信API的实例初始化等。同时组件完成初始化以后,组件将一直开始监听本机指定端口、并等待接收本仿真节点的消息发送命令等。仿真节点在按照HLA仿真体系中规定的报文协议填写完成数据报文以后,只需要调用组件对外的接口函数:Send-Data(char *bur,char*pDataCode,char*pIDNode)即能完成把报文发送到指定目的仿真接点,协同完成仿真模拟任务。组件在接收到网络消息的时候调用OnReceive(intnErrorCode)进行报文的预处理,确定是否需要仿真节点处理该报文。如首先对接收到的报文进行长度分析如果长度很小为系统发送确认报文,就不需要仿真主程序进行处理,为仿真节点主处理器节省处理时间。如果长度超过一定长度,是仿真节点中协同报文的话,组件将首先对报文得到报文标识头(GetNodeByName(char*IdNode,CString strPeerAddress))然后进行报文解析,并向仿真主程序发送消息函数::PostMessage(…)到主程序中,进行最终的报文处理工作;如界面更新、数据交互处理等,同时组件线程在完成了对解析以后需要对发送方发送解析和成功解析报文,以确认发送方的发送报文别目的节点成功接受并成功解析。
4 结 语
基于HLA高层体系结构的分布式仿真系统中通过分布在不同物理点的分布式仿真节点,借助网络进行数据报文交互、仿真同步、仿真协同完成对真实世界的模拟。作为仿真系统在必备的通信模块,在频繁地设计和不断地重写,在一个特定的仿真领域中需不同的仿真网络通信模块,重复的开发和设计使得各个仿真节点之间的交互需要不断地协调协议接口;不统一的设计方案也同样让仿真开发人员陷入重复工作的泥潭中。本文针对以上的开发弊端,采用现代软件设计思想,组件的开发设计模式,使得代码得以最大程度上的共享,并易于调试。他使得仿真开发人员能够花最小的时间和代价协调网络通信模块,从而集中精力在仿真主题功能的设计和实现上。在实际应用中本仿真组件清晰、而又简单的对外接口,对基于HLA分布式仿真应用系统功能开发者基本上不需要了解他的设计和实现,就能很好地使用本组件完成通信要求,从而将最大程度上为开发者节省项目时间、项目花费。
组件采用异步SOCKET套接字进行自封装,隐藏了组件通信如何进行的过程,从而不必要求对HLA传真系统功能开发者关心底层网络通信是如何进行的。同时组件工作的异步模式下,对系统不会产生过大的资源浪费,同时也能很好地满足HLA分布式仿真节点的实时性要求。
作为一种通信组件,他不仅需要完成上层HLA仿真主程序给他的发送报文的分发及从其他仿真节点收到的仿真数据报文的解析,还提供对外清晰的交互接口。同时作为仿真工作的一个部件,他需要工作在一个复杂的网络环境中,在不能很多程度上与占有宝贵的分布式处理机的处理时问,作为网络组件经常会在某些时间,等待连接、或者等待数据报文而发生严重的阻塞,以及需要不断的监听端口,从而耗费处理机时间,信号Windows提供了异步SOCKET的API接口使得组件设计能够一直以异步方式工作的应用层,不断向网络层接收和发送数据报文。但是单纯实用原始异步SOCKET的API接口仍然不能满足某些特定的要求,不能很好地融入HLA仿真应用系统中去。因此首先对Windows提供的异步SOCKET套接字CAsyncSocket进行特定封装。
下面给出部分封装代码:

在应用中申请一个组件的主构造类,在该类中去实例化经过封装的异步套接字来进行底层网络数据的收发,组件实例可以接收到初始化该组件的操作句柄,完成配合仿真节点完成仿真主题工作,数据的交互,数据的处理等。
下面是主题组件的实体类。

仿真节点只要向组件发送一启动命令(IniComponent(HWND m_hWnd))组件就将启动并完成组件的初始化,如组件全局SOCKET的版本请求、版本协商、经过封装后的异步套接字实例化、SOCKET通信API的实例初始化等。同时组件完成初始化以后,组件将一直开始监听本机指定端口、并等待接收本仿真节点的消息发送命令等。仿真节点在按照HLA仿真体系中规定的报文协议填写完成数据报文以后,只需要调用组件对外的接口函数:Send-Data(char *bur,char*pDataCode,char*pIDNode)即能完成把报文发送到指定目的仿真接点,协同完成仿真模拟任务。组件在接收到网络消息的时候调用OnReceive(intnErrorCode)进行报文的预处理,确定是否需要仿真节点处理该报文。如首先对接收到的报文进行长度分析如果长度很小为系统发送确认报文,就不需要仿真主程序进行处理,为仿真节点主处理器节省处理时间。如果长度超过一定长度,是仿真节点中协同报文的话,组件将首先对报文得到报文标识头(GetNodeByName(char*IdNode,CString strPeerAddress))然后进行报文解析,并向仿真主程序发送消息函数::PostMessage(…)到主程序中,进行最终的报文处理工作;如界面更新、数据交互处理等,同时组件线程在完成了对解析以后需要对发送方发送解析和成功解析报文,以确认发送方的发送报文别目的节点成功接受并成功解析。
4 结 语
基于HLA高层体系结构的分布式仿真系统中通过分布在不同物理点的分布式仿真节点,借助网络进行数据报文交互、仿真同步、仿真协同完成对真实世界的模拟。作为仿真系统在必备的通信模块,在频繁地设计和不断地重写,在一个特定的仿真领域中需不同的仿真网络通信模块,重复的开发和设计使得各个仿真节点之间的交互需要不断地协调协议接口;不统一的设计方案也同样让仿真开发人员陷入重复工作的泥潭中。本文针对以上的开发弊端,采用现代软件设计思想,组件的开发设计模式,使得代码得以最大程度上的共享,并易于调试。他使得仿真开发人员能够花最小的时间和代价协调网络通信模块,从而集中精力在仿真主题功能的设计和实现上。在实际应用中本仿真组件清晰、而又简单的对外接口,对基于HLA分布式仿真应用系统功能开发者基本上不需要了解他的设计和实现,就能很好地使用本组件完成通信要求,从而将最大程度上为开发者节省项目时间、项目花费。
组件采用异步SOCKET套接字进行自封装,隐藏了组件通信如何进行的过程,从而不必要求对HLA传真系统功能开发者关心底层网络通信是如何进行的。同时组件工作的异步模式下,对系统不会产生过大的资源浪费,同时也能很好地满足HLA分布式仿真节点的实时性要求。
仿真 相关文章:
- ARM在数字化远程视频监控系统的应用(05-20)
- FPGA在弹上信息处理机中的应用(04-15)
- 与MSP430 USI端口配合使用ADS8361(06-18)
- 基于ARM的I2C设备控制方法的实现(06-11)
- 辰汉电子推出低成本快速量产视频监控方案+4路输入方案(06-24)
- 无线IP视频监控应用即将井喷,Blackfin助您赢得先机(07-23)
