4 模块功能
4.1 发送命令、数据接收模块
发送命令是中心控制站向监测站(可无人值守)发送包含目标发射源的频率、带宽等参数的测向命令的过程。整个系统的命令的发送和数据的接收显示是通过基于Delphi消息系统的消息模块来实现的。在实现交会定位任务时,由消息模块把由界面窗口发出的命令以消息转发到相应的服务模块,同时,在数据返回时,消息模块把底层服务模块处理的结果以消息返回到请求方,进而实现消息和数据的交换,也即是完成用户的请求。为了方便系统消息的管理和设计,在用户请求服务时创建消息,而在用户要求停止服务时释放消息,为了将请求服务的消息和停止服务的消息关联起来,需要设置相应的数据结构来保存消息、设备编号、操作等信息,以便在停止服务时查找到相应的启动服务。 4.1.1 创建消息函数
成功后返回一个TMessage对象,否则为nil。同时,界面窗口需要保存消息的标志(每个新建的消息都有一个惟一的ID标志,用以区分不同的消息)。
4.1.2 发送消息函数
成功后返回1,其他返回表示失败。该函数根据msg中的dest判断是本地设备还是远程设备,若是本地设备则发送到底层驱动,若是远程设备,则向网络发送。
function BSSendMessage(msg:TBSMessage):TBSType;
4.1.3 界面窗口接收消息
消息模块收到底层服务模块发送回的数据后,将数据转化为消息转发给相应的界面窗口。界面窗口只处理自己发送出的消息,也就是该消息ID与在本窗体中产生的消息的ID一致,该检查机制是通过TBSWindowSessionIDInfo类的CheckSessionId方法完成的。消息传递的是数据的地址和长度信息,所以界面窗口收到响应的消息后,需要对消息进行解析来获取数据信息,以进行处理与显示。
4.2 测向、频谱数据显示模块和语音模块
在进行多站交会定位时,为了克服相近频率的干扰,保证各个测向站监测的是同个发射源,系统加入了实时频谱显示和对比实时电台声音两个功能。
在交会中,主控站发送交会命令mMeasuring(True,DeviceId,FLeftId,FRightld,mfDirectionCross)到各监测站。各监测站收到命令后,分别向底层发送测向命令mMeasuring(True,DeviceId,FLeftId,FRightId,mfDirectionFind)和频谱命令mMeasuring(True,Deviceld,FLeftId,FRightId,mfSpectrum),并将被监测信号的测向和频谱数据均返回给主控方,主控方通过对比频谱图来确定目标信号的一致性和准确性。语音模块中,系统提供了左右两个独立的声道,分别由mMeasuring命令中的FLeftId,FRightId标志。Win32 APIs中有一组被称成多媒体控制接口(即MCI)的函数,该接口提供了多媒体编程所需的系统级APIs,这些函数也就是Windows多媒体编程的最低层接口,由这些代码直接操作真实的音频设备。该模块采用线程技术,利用Windows API函数,将音频操作做成一个服务AudioServer。从网络接收或本地采集得到音频数据,放入开辟的缓冲区内,通过加入时间标签来保证声音播放时的连续性和左右一致性。该缓冲区采用循环存储和播放的技术,用户可以通过左右两个声道来同时对比不同监测站的目标电台的声音,以保证目标源的一致性。