当前位置:文档之家› 导航信号模拟器上位机软件设计

导航信号模拟器上位机软件设计


第4期
王晓倩 等:导航信号模拟器上位机软件设计
71
msg.Delete(0,msg.Find(',')+1); msg.Delete(0,msg.Find(',')+1); msg.Delete(0,msg.Find(',')+1); msg.Delete(0,msg.Find(',')+1); msg.Delete(0,msg.Find(startLF)+1); } else
{ msg.Delete(0,msg.Find(',')+1);
CString gphour =msg.Left(2);//获取时间信息 sSimulatorUser.ReceiverGPHour=atof(gphour)+ 8;// 加 8 是因为北京时间比世界协调时快 8 个小时
CString min1=msg.Mid(2,2); sSimulatorUser.ReceiverGPMin = atof(min1);
图 2 模拟器上位机界面
工具栏中可以实现与串口的连接,加载任务 完成向模拟器 DSP 下发场景文件,并将模拟的弹 道轨迹数据通过 TeeChart 控件画出,即界面中的 飞行轨迹图红色曲线。点击“开始”按钮后,DSP 开始回传重组的导航电文。
一般预设的载体轨迹,加载时得到的是 ENU(东北高)坐标系,需要将转换为地心地固坐
3 卫星信号数据提取及处理
上位机向模拟器下发保存的场景文件,通过 DSP 解算形成新的导航电文通过串口回传给上位 机。回传的数据包括卫星的位置,用户的位置, 通过卫星的位置解析出卫星的仰角方位角,伪距 等参数。回传的数据格式遵守 NMEA_0183 标准 协议格式。
作者简介:王晓倩(1987-),女,硕士研究生,研究方向:卫星导航信号模拟器技术。
} else
{ sSimulatorUser.ReceiverGPHour= sSimulatorUser.ReceiverGPHour - 24; // 提 取 的 ReceiverGPHour 大于 24 的话就得减去 24
} msg.Delete(0,msg.Find(',')+1); CString latidegree1=msg.Left(2); //获取纬度消息 CString laticent1= msg.Mid(2,7); //mid 表 示 从 CString 中第二个字符开始 copy7 double latitude1 =(atof(latidegree1)+(atof(laticent1)/60.0)); sSimulatorUser.ReceiverGPLAT = latitude1; msg.Delete(0,msg.Find(',')+1); msg.Delete(0,msg.Find(',')+1); CString longidegree1 =msg.Left(3); //获取经度消息 CString longicent1 = msg.Mid(3,7);
CString sec1=msg.Mid(4,2); sSimulatorUser.ReceiverGPSec = atof(sec1);
if(sSimulatorUser.ReceiverGPHour<24)// 提 取 的 ReceiverGPHour 小于 24 的话正常显示,不需 要处理
{ sSimulatorUser.ReceiverGPHour= sSimulatorUser.ReceiverGPHour;
上位机软件通过读 NMEA_0183 格式的数据 解算出卫星的星号、仰角、方位角、载噪比,并 将其在星空图中显示出来,其中红色“+”代表可见 的北斗卫星,黄色“+”代表可见的 GPS 卫星,绿 色“+”代表 GLONASS 卫星。点击起飞按钮,可以 看到载体(绿色的菱形图标)可以按照预设轨道完 成模拟仿真的飞行过程。
2) 添加 MSComm 控件 ID 的控制变量(或者 对象);
3) 对串口进行初始化,设置 MSComm 控件 的属性;
4) 添加串口事件的消息处理函数 OnComm() 函数,在函数中根据应用需要,编写数据处理代 码。
通过以上可完成数据传输的端口号、端口的 波特率,数据位vatal 接收机界面
对比分析,当模拟器模拟的载体 2012 年 11 月 24 日 02:10 的经纬高分别为:120.21389°, 30.32000°,50 m 时,Novatal 接收机显示的当前 UTC 时刻为 02:15:36,载体定位结果为东经: 120.213780605°±3.31 m,北纬:30.319994962° ±3.49 m,高度:58.224 m±5.86 m,可见的卫星号 为 1、4、8、9、10、11、17、20、28、32。以上 信息与模拟器的设定参数基本相符。
第4期
机电技术
69
导航信号模拟器上位机软件设计
王晓倩1 焦国太1 王建平1 耿生群2
(1.中北大学机电工程学院 山西 太原 030051;2.北京航空航天大学电子信息工程学院 北京 100191)
摘 要:文章介绍了基于 vc++的模拟器上位机软件的操作与实现。简要阐述了串口通信的方法,以 NMEA_0183 数据格式完成对北斗、GPS、GLONASS 各系统信号的采集与处理,结合 DSP+FPGA 构建模拟器的上位机软件平台。上 位机软件可以模拟载体轨迹数据,进行星座仿真。实践证明软件开发的模拟器能够有效地辅助接收机测试信号的稳定性, 并可以直观的反应出卫星定位状态,从而证明了该软件的可行性。
4 图形显示主界面
图形显示主界面用来显示模拟的飞行轨迹 图,星空图,NMEA_0183 格式的卫星数据等。 该软件主要按照思博伦公司的 SimGEN 软件简单 的设计[5](如图 2 所示)。
标(Earth-Centered, Earth-Fixed,ECEF)经纬高显 示在界面上。
加 载 任 务 时 , 上 位 机 直 接 读 取 GPS , GLONASS 的 Rinex 文件,获得电离层延迟改正 参数、与 UTC 时间同步参数、卫星钟差参数以及 星历参数等,将获得的这些数据组帧下发。但是 由于目前缺乏 BD 的 Rinex 文件,所以按照 BD 的 ICD 将星历状态参数写进 DSP 导航电文重组模 块。
double longitude1 =(atof(longidegree1)+(atof(longicent1)/60.0)); sSimulatorUser.ReceiverGPLON = longitude1; msg.Delete(0,msg.Find(',')+1); //find 是找到“,”所 在的位置 n,delete 从位置 0 开始删去 n+1 个字符 msg.Delete(0,msg.Find(',')+1); //返回修改后的字符串长度 msg.Delete(0,msg.Find(',')+1); msg.Delete(0,msg.Find(',')+1); msg.Delete(0,msg.Find(',')+1); CString height1=msg.Left(7); //获取高度信息 double high1= atof(height1); sSimulatorUser.ReceiverGPHEIGHT = high1;
关键词:vc++;串口通信;NMEA_0183;上位机 中图分类号:TP311 文献标识码:A 文章编号:1672-4801(2013)04-069-04
卫星导航定位系统是目前在军用和民用载体 中普遍使用的一种导航定位方式,其中高动态接 收机一般应用于导弹、飞机等运动载体上,其试 验条件和环境的建立受到成本、周期等诸多因素 的制约[1]。实验设计的高动态卫星信号的模拟器 通过模拟产生高动态载体接收到的卫星导航信 号,可以在实验室环境中,并且在接收机静止的 条件下测试其动态性能,是高动态接收机参数测 量、测试、性能评估与数据分析的有效手段,从 而成为精密制导武器中必不可少的关键技术。
5 商用接收机验证
验证开始时,在上位机新建场景文件中设置 好信号的仿真时间,载体的起始位置。模拟器仿 真过程中,上位机程序不断将计算出导航卫星的 观测数据发送给中频信号,产生电路,中频电路 输出中频信号,由射频电路相继产生射频信号, 射频信号经过电缆输入给卫星信号接收机[6],观 察载体的定位精度。利用 Novatal 接收机验证的 整体的界面定位显示情况(如图 3 所示)。
tempGGA = msg.Mid(0,fuhao$1); while (tempGGA .Find(',')!=-1)
{ douhao = tempGGA .Find(','); numdouhao++; tempGGA.Delete(0,douhao+1);
} if (numdouhao ==14)
{ msg.Delete(0,fuhao$1);
} } 说明:对 GPGGA 语句正确性的判断是根据其逗 号个数来判断的。虽然 GPGGA 语句中的所有参 数都是用逗号分隔的,但每条语句的参数个数是 固定的,所以正确的 GPGGA 语句的逗号个数也 是固定的。这样在该语句中我们就提取到了时间、 经度、纬度和高度。 对 GPGSA、GPGSV 语句的提取也是按照逗 号分隔的方式,虽然方法过于繁琐,但是可以很 容易的理解并得到可见卫星的仰角,方位角,信 噪比。
3.2 软件实现数据采集
从串口中接受的数据存放于缓存中,通过以 下程序将将各个字段的信息从缓存字节流中提取 出来,将其转换为有实际意义的定位信息数据。 下面以提取 GPGGA 语句为例。 if(msg.Left(6).Compare(_T("$GPGGA"))==0)
相关主题