APP下载

武器模拟训练系统软件通信机制的设计

2010-03-10李国帅范惠林竹武林

关键词:间通信模拟训练线程

李国帅,范惠林,竹武林

(空军航空大学,长春 130022)

为满足某型飞机武器系统日常操作训练和技术培训的需要,解决实装训练中的矛盾,在充分考虑实际训练需要的基础上,运用计算机仿真等技术,开发了某型飞机武器模拟训练系统,其中软件系统的开发是武器模拟训练系统研制的核心,而软件系统的通信机制是连接软件各模块的纽带,本文在模拟训练系统硬件开发和软件总体设计的基础上,设计了软件系统的通信机制。

1 软件通信总体设计

在开发软件系统过程中,为了便于开发和维护,充分采用了模块化设计思想,针对模拟训练系统各种功能单元和训练科目,设计了主进程、导弹系统、轰炸系统、射击系统、多制式、指挥仪等功能模块,各模块之间高内聚、低耦合,它们之间通过一定的通信机制完成数据交换,实现武器模拟训练系统的训练功能,设计的软件系统通信关系如图1所示。

软件系统运行在主控机和从控机上,主控机上的导弹、轰炸和射击程序完成武器系统模拟训练的主要工作,主进程采集操作信号并将信号传给导弹等程序和从控机,接收其他系统的数据处理结果并发出响应;从控机上主要运行导弹系统指挥仪和多制式轰炸模拟程序,运行过程中,接收主控机主进程的命令和数据信号进行相应的信号处理,一部分处理结果在从控机上完成人机交互,另一部分处理结果传输给主控机进行响应;从控机调用模块、指挥仪和多制式各模块间相互通信完成模块间的调用,以配合主控机程序的运行,各程序内部的数据收发线程与数据处理线程之间进行通信完成各程序的实时运行。

图1 软件系统通信关系图Fig.1 The communication relationship of the software

2 主控机和从控机之间的通信

系统运行时,主控机和从控机要进行实时通信完成数据的交换,从控机要从主控机接收的数据有:观测角、瞄准角等20个模拟量,追赶手柄状态等35个开关量和三个功能模块调用指令,主控机接收从控机的数据有:投弹信号等17个开关量信号,瞄准具构成参数(模拟量)和 3个控制信号。

主控机和从控机之间通过基于Winsock的网络通信实现数据的传递,为简化程序的开发,采用MFC对套接字API函数封装得到的CSocket类进行编程,程序运行流程[1]图如图2所示。主控机作为客户机,从控机作为服务器,当需要运行指挥仪或多制式程序时,主控机向调用模块发出连接请求,从控机接收请求后,主控机再发出指令调用相应模块,并不断进行通信完成功能模块运行期间的数据交换,双方根据通信协议完成对交换数据的编码和解码。训练完成之后功能模块接收主控机的控制命令返回调用界面,等待下一次的程序调用。

图2 主控机和从控机通信流程Fig.2 The communication flow between master PC and assistant PC

3 主系统与训练子系统之间的通信

主系统与训练子系统之间的通信主要存在于主控机中,主控机中导弹系统等四个功能模块设计成了四个进程的形式,在通信过程中选用进程间通信机制来实现数据交换,进程间的通信机制包括管道、消息队列、共享内存、邮槽[2],结合实际需要和通信技术本身特点[3],选择消息队列来实现四个功能模块之间的通信。

利用消息实现进程间通信时,为保证数据交换的正常运行,制定了通信协议,主要包括两个方面,一个是主线程对训练子系统的信息格式,另一个是训练子系统发往主线的信息格式两种信息除了长度不同外,格式可以设为相同,格式如图 3所示。

图3 进程间通信协议Fig.3 The communication protocol between processes

信息标识字段占2个字节,在主进程向训练子进程传递数据时可以设为无效,也可以按照需要进行相应的设置,训练子系统和其他两个系统向主进程传递数据时标识信息的来源,00代表数据来自导弹系统,01代表数据来自轰炸系统,10代表数据来自射击系统。

控制数据和模拟数据字段包含了通信中的有效信息,由主系统发至子系统的控制数据字段占187字节,用于存放操作过程中产生的各种控制信号,模拟数据字段占80字节,以字符的形式存放采集的模拟信号,每个模拟信号占4个字节,训练子系统发至主系统的数据,根据子系统的不同发送数据的大小也各异,控制数据字段,导弹系统占31字节,轰炸系统占24字节,射击系统占5个字节,模拟数据字段导弹系统为0字节,轰炸系统占2字节,射击系统占0字节。

校验位占一个字节,对数据传递进行奇校验,结束标识占一个字节,它标识一次传递数据的结束。

图4 训练系统进逞间通信流程Fig.4 The communication flow among processes of the training system

主系统与训练子系统之间通信流程如图 4所示。主进程中的数据收发线程首先采集操作者发出的各种控制信号,根据通信协议将这些信号进行封装;然后主进程搜索接收数据的训练子系统进程,若未找到则发出语音提示,接着进行下一次的搜索,直至找到指定的训练子系统进程,将封装好的数据写入缓冲区,向训练子系统进程发出接收数据消息,训练子系统在接到通知后,根据消息内指向缓冲区的指针等参数读取数据[4]。对数据进行解析和处理,处理结果一方面通过自身实现人机交互,另一方面传送到主进程中,由主进程进行相应的响应,根据这一流程,主进程与其他进程不断地进行通信,完成各进程间的数据交换。

4 各系统内部线程间通信

软件系统是基于Windows非实时性操作系统开发的,为了实现模拟训练的实时运行,软件系统选用Windows操作系统提供的主要是多线程技术来满足训练系统的要求,主控机上的主进程和从控机上运行的指挥仪、多制式模块创建两个线程,一个用于收发数据,另一个用于运行训练程序;在导弹系统等子训练程序中多建一个线程用于声音提示,根据数据交换需要采用全局变量法建立起线程间的通信机制。

线程是按操作系统分配的时间片运行的,同一进程的所有线程共享进程资源,在多线程程序中,每个线程都要对进程中的一些数据不断地进行读写操作,线程之间的运行只按系统分配的时间片运行,当一个线程的运行时间到期,该线程暂停所有操作,另一个等待线程开始运行,如此不断进行下去,使系统数据得以持续地交换和处理。

图5 线程间通信原理Fig.5 The communication schematic diagram between threads

线程间通信时,如果数据收发线程正在获取某一信号时,该线程刚好用完此次运行的时间片,程序切换到数据处理线程运行,此线程读取的信号可能是数据收发线程获取信号过程中的不稳定值,导致程序运行出错。为了避免这种情况的发生,保证线程间通信的正确性,采用互斥对象技术实现线程间同步运行,互斥对象属于系统内核对象,拥有互斥对象的线程能够独占某个系统资源,其他线程无法对这个系统资源进行访问,可以避免多个线程同时访问同一个全局变量的情况[5]。软件系统的线程间通信流程原理如图5所示。

5 结论

在某型飞机武器模拟训练系统的研制过程中,软件系统通信机制在各模块之间和模块内部线程之间起到桥梁作用。经过实际调试,设计的通信机制可以保证软件系统数据交换得以较好地实现,满足了武器模拟训练系统软件对通信实时、可靠和高效的要求。

[1]朱辉生.VC中基于SOCKET的网络编程[J].计算机应用与软件,2004,21(4):118-119.

[2]郭克新.VisualC++代码参考与技巧大全[M].北京:电子工业出版社,2008:393-407.

[3]陆静,胡明庆.几种进程通信方法的研究和比较[J].福建电脑,2007(2):60-61.

[4]孙皓.Visual C++范例大全[M].北京:机械工业出版社,2009:431-432.

[5]明日科技,宋坤,刘锐宁,等.MFC程序开发参考大全[M].北京:人民邮电出版社,2007:470-489.

猜你喜欢

间通信模拟训练线程
基于C#线程实验探究
基于国产化环境的线程池模型研究与实现
综合航电分区间通信元模型设计研究
模拟训练(二)
浅谈linux多线程协作
模拟训练(十一)
模拟训练(十)
工信部:未来1到2年增设七个国家级骨干直联点
基于核间寄存器的多核虚拟机系统中虚拟机间通信研究
Java的多线程技术探讨