单位文秘网 2021-10-16 08:13:25 点击: 次
摘 要 本文论述了一种实时可靠的网络通信解决方案,它能够满足磁浮仿真系统的体系架构中上层工作站、中间层服务器、底层管理计算机之间复杂多变的网络通信要求,降低仿真系统中应用层和通信层的耦合性。通信方案设计了统一的报文格式,采用UDP协议二次封装的办法兼顾网络通信的可靠性与实时性;选取共享内存技术实现仿真系统应用层和通信层之间的进层间通信,保证通信进程的独立性。此外,在通信层的构建中,辅以配置文件记录通信目的IP地址、本机绑定端口和通信对端接受端口号等信息,做到通信层的灵活可配置。
关键词 网络通信;UDP二次封装;共享内存;进程间通信
中图分类号TN92 文献标识码A 文章编号 1674-6708(2011)55-0181-02
1研究背景
磁浮仿真系统大致可以为分3个层次,底层是仿真子系统的仿真管理计算机,中间层是仿真支撑服务器,上层是工作站仿真计算机。所有外围环境仿真设备通过以太网与底层子系统的仿真管理计算机相连,仿真管理计算机对其仿真子系统进行统一管理,它将子系统外围仿真设备的工况信息实时向上推送。仿真支撑服务器与所有底层子系统管理计算机和上层工作站均有通信需求,是报文收发的中转站,它将、工作站及其执行结果的信息记入数据库备查,或用于数据分析。上层工作站用于集成管理底层的子系统,它注入故障下达测试命令到底层子系统管理计算机并等待应答。此外,底层子系统管理计算机之间也互相传递信息。这些计算机中仿真系统在处理接收和发送数据上的工作大多是相同的,如果能够简化它们在数据通信上的工作,将对系统的设计和效率有很大的提高作用。网络通信方案的设计,即可将系统中各模块处理网络通信的部分抽取出来,封装成一个相对独立的模块。
2影响因素分析
磁浮仿真系统中底层管理计算机上运行的仿真软件是不同编程语言实现的,各自重新构建通信接口有困难,底层、中层、上层不同计算机之间的通信要求也各异。通过对磁浮仿真系统中多个模块的通信要求分析,可以得到模块间的数据通信具有以下特点:
1)多点对多点传输数据。如果采用面向连接的方式进行通信,则需要每个模块都各自维护到其它模块的多个连接,处理起来很不方便,并且不利于扩充模块。因此适合无连接的通信;
2)模块间的数据通信具有突发性,通信数据量不规则、不连续。比较适合采用报文转发方式传输;
3)通信目的计算机的IP地址可能改变,需要可配置;
4)模块的数量可能扩充,也就是说,在同一台计算机上运行的不同模块的通信节点可能有多个,需要可配置;
5)模块间传输数据必须保证通信的可靠性和数据的正确性;
6)某些通信要求实时性,通信异常导致陈旧数据必须清除。
3方案设计
根据第2节的影响因素分析,了解到通信方案需要解决四个问题,即通信接口问题、实时性可靠性均衡问题、IP端口可配置问题。首先,解决通信接口问题,需要将系统的数据通信工作独立出来,与原本系统的其他应用隔离开。因此,引入这样两个概念——通信层进程和应用层进程。通信层进程负责为应用层提供通信服务和其他辅助服务,如通信日志记录、通信状态监控等;应用层进程即原本系统各模块运行的应用进程,两者间数据通信靠本机进程间通信维系。基于确保实时性和大数据量的通信要求,本机进程间通信选取的方法是共享内存,然后分别为通信层和应用层提供读写共享内存的接口,即使用DLL(动态链接库)的方式分别加载到通信层程序和应用层程序中。其次,解决实时性可靠性均衡问题,从多点通信和实时性的考虑出发,决定了选取无连接且传输更高效的UDP协议。然而,UDP协议不能保证可靠性,于是想到了对UDP协议进行二次封装,形成一种兼顾通信的可靠性与实时性的新协议——RUDP协议。最后,采用通信层进程读取.ini配置文件的配置信息的方法来解决IP端口可配置问题。
3.1 本机进程间通信
本机应用层与通信层之间的进程间通信需要借助共享内存技术、动态链接库技术来实现。
共享内存技术是通过内存映射文件的方式来实现的。内存映射文件是文件内容到进程虚拟地址空间的复制。文件的内容的拷贝称为文件映像,而操作系统用来维持该拷贝的内部结构称为文件映射对象。另一个进程通过使用第一个进程的文件映射对象建立映像,可以在它自己的虚拟地址空间建立完全一样的文件映像,这样就达到了进程间共享数据的目的。
设计方案将共享内存分为两种。一种发送报文时使用,应用层进程向此共享内存内写入报文,通信层进程分配线程采用轮循或接收消息通知的方式读取共享内存中的待发送报文,并通过套接字将其发送到目的计算机的通信层进程。这种共享内存可称之为发送结点共享内存。另一种与此相反,接收报文时使用,通信层进程接收到报文后,根据报文首部判断与之对应的目的应用层,并将报文写入对应的共享内存,应用层进程再读出并解封装报文。根据报文发送目的地址与源地址,可为每个源地址与目的地址分配对应的共享内存。每一块共享内存,有一个或几个写入线程,一个读出线程与其相对应。
动态链接库(DLL)技术用来提供读、写、清空共享内存的接口。在DLL完成相应共享内存的初始化工作后,发送接收双方进程通过调用该DLL中相应的写入读取共享内存的函数访问共享内存,从而实现双方的通信。双方进程启动后,用内存映射文件的方式把一块命名共享内存映射到DLL附加的各个进程地址空间。
共享内存的实现方式设计如图1所示。
3.2 UDP协议二次封装
RUDP就是在原TCP/IP协议的传输层的UDP协议和应用层之间加入了一层为保证可靠数据传送而实现的RUDP软件模块而形成的一个五层体系结构,即在原有TCP/IP模型的应用层和传输层之间加入一个定制的通信层(RUDP层),这样就可以利用UDP协议实现一种基于消息的面向连接的可靠数据传递机制。
为了保证数据传输的可靠性,可以借鉴TCP的三次握手原理,对UDP进行二次封装,形成了RUDP传输机制。报文发送方对传输的可靠性和实时性要求通过应用层与通信层的接口DLL,以出口函数的参数形式传递,然后再将这些信息封装到原报文首部。通信层中解封装报文首部,并根据这些信息灵活地选择通信方式用以提高传输效率和保证可靠。
3.3配置文件
.ini配置文件用来灵活配置系统中某台计算机需要通信的节点个数、通信目的地址、对端接收端口和本机绑定端口。.ini的读写通过调用api函数GetPrivateProfileInt();GetPrivateProfileString()和WritePrivateProfileString()来实现。
4测试验证
根据通信方案的设计,我们已经编码实现了一套通信中间件,包含单独的通信层程序、配套动态链接库通信接口及.ini配置文件,并在100Mbps传输速率的局域网中进行了一对一、多对一、多对多的测试验证,得到测试结果如下表:
5结论
文中论述的通信方案确保了整个仿真系统可以高频度大数据量地进行通信,实现了上层工作站、中层服务器与下层管理计算机之间的数据交互要求。在保证数据传输可靠性的的前提下,尽可能的满足了数据传输的实时性。通信层完全独立于需要通信的应用层,通信接口良好,可以做到灵活配置,极大地方便了应用层的调用,为今后整个仿真系统的扩展,通信需求的增加提供了良好保证。完善后的通信方案不仅适用于本仿真系统,还可以应用于类似需求的局域网多点通信中。
参考文献
[1]施炜,李峥,秦颖编著.Windows Sockets 规范及应用-Windows网络编程接口.
[2]周伟明.多核计算与程序设计.华中科技大学出版社,2009.
[3]汪翔,袁辉编著.Visual C++实践与提高.网络编程篇.中国铁道出版社,2001.
[4]郎锐,孙方编著.Visual C++网络通信程序开发基础及实例解析.2版.北京:机械工业出版社,2006.
[5]电脑编程技巧与维护杂志社编著.Visual C++编程技巧典型案例解析网络与通信及计算机安全与维护篇.北京:中国电力出版社,2005.
[6]刘化君编著.网络编程与计算技术.北京:机械工业出版社,2009.
[7]梁庚,白焰.Windows下进程间通信方式探讨.微型电脑应用,2006,22(12).
[8]马魁涛,蔡颖,郭宝峰.Win32进程间信息共享的实现方法研究.
[9]计算机应用与软件,2007,12,24(12).
(责任编辑:单位文秘网) )地址:https://www.kgf8887.com/show-156-96445-1.html
上一篇:浅谈大连地铁二号线DCS系统
版权声明:
本站由单位文秘网原创策划制作,欢迎订阅或转载,但请注明出处。违者必究。单位文秘网独家运营 版权所有 未经许可不得转载使用