导航信号模拟器上位机软件设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上位机软件通过读 NMEA_0183 格式的数据 解算出卫星的星号、仰角、方位角、载噪比,并 将其在星空图中显示出来,其中红色“+”代表可见 的北斗卫星,黄色“+”代表可见的 GPS 卫星,绿 色“+”代表 GLONASS 卫星。点击起飞按钮,可以 看到载体(绿色的菱形图标)可以按照预设轨道完 成模拟仿真的飞行过程。
图 2 模拟器上位机界面
工具栏中可以实现与串口的连接,加载任务 完成向模拟器 DSP 下发场景文件,并将模拟的弹 道轨迹数据通过 TeeChart 控件画出,即界面中的 飞行轨迹图红色曲线。点击“开始”按钮后,DSP 开始回传重组的导航电文。
一般预设的载体轨迹,加载时得到的是 ENU(东北高)坐标系,需要将转换为地心地固坐
2 场景设置
场景设置的主要功能是设置载体初始位置, 初始速度、设置电离层误差,对流层误差,仰角 门限、选择合适的弹道轨迹、选择各系统的星历 Rinex 文件,设置模拟器信号仿真的起始时间, 最后以.tsk 形式保存场景文件(如图 1 所示)。
图 1 模拟器场景设置图
星历数据的来源一般有两个:一个是从计算 机串口读入的 GPS 接收机的输出信号,主要用于 实时地获取定位信息;另一个就是已有的星历文 件,主要用于测试该软件的性能。文中提到的数 据来源属于后者,使用商务接收机接收到的天上 星的信号用存储文件或者使用从官方网站下载的 星历文件,测试自己研制的模拟器的可行性。
第4期
机电技术
69
导航信号模拟器上位机软件设计
王晓倩1 焦国太1 王建平1 耿生群2
(1.中北大学机电工程学院 山西 太原 030051;2.北京航空航天大学电子信息工程学院 北京 100191)
摘 要:文章介绍了基于 vc++的模拟器上位机软件的操作与实现。简要阐述了串口通信的方法,以 NMEA_0183 数据格式完成对北斗、GPS、GLONASS 各系统信号的采集与处理,结合 DSP+FPGA 构建模拟器的上位机软件平台。上 位机软件可以模拟载体轨迹数据,进行星座仿真。实践证明软件开发的模拟器能够有效地辅助接收机测试信号的稳定性, 并可以直观的反应出卫星定位状态,从而证明了该软件的可行性。
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;
2) 添加 MSComm 控件 ID 的控制变量(或者 对象);
3) 对串口进行初始化,设置 MSComm 控件 的属性;
4) 添加串口事件的消息处理函数 OnComm() 函数,在函数中根据应用需要,编写数据处理代 码。
通过以上可完成数据传输的端口号、端口的 波特率,数据位,停止位,奇偶校验的设置。
关键词:vc++;串口通信;NMEA_0183;上位机 中图分类号:TP311 文献标识码:A 文章编号:1672-4801(2013)04-069-04
卫星导航定位系统是目前在军用和民用载体 中普遍使用的一种导航定位方式,其中高动态接 收机一般应用于导弹、飞机等运动载体上,其试 验条件和环境的建立受到成本、周期等诸多因素 的制约[1]。实验设计的高动态卫星信号的模拟器 通过模拟产生高动态载体接收到的卫星导航信 号,可以在实验室环境中,并且在接收机静止的 条件下测试其动态性能,是高动态接收机参数测 量、测试、性能评估与数据分析的有效手段,从 而成为精密制导武器中必不可少的关键技术。
文中设计的上位机软件涉及到的语句包括 GGA、GSA 和 GSV 语句。这些语句的定义如下 解析。
GGA:是指输出协调世界时和卫星定位三维 位置;
GSA:是指输出伪随机噪声码,PDOP 位置 精度因子、HDOP 水平精度因子、
VDOP 垂直精度因子; GSV:是指输出可视卫星总数,卫星号,卫 星仰角,方位角及信噪比。每条 GSV 语句最多可 以显示 4 颗卫星的信息。
{ 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);
3.2 软件实现数据采集
从串口中接受的数据存放于缓存中,通过以 下程序将将各个字段的信息从缓存字节流中提取 出来,将其转换为有实际意义的定位信息数据。 下面以提取 GPGGA 语句为例。 if(msg.Left(6).Compare(_T("$GPGGA"))==0)
{ fuhao$ = msg.Find('$'); if (fuhao$ == 0) { msg.Delete(0,1); fuhao$1 = msg.Find('$'); }
4 图形显示主界面
图形显示主界面用来显示模拟的飞行轨迹 图,星空图,NMEA_0183 格式的卫星数据等。 该软件主要按照思博伦公司的 SimGEN 软件简单 的设计[5](如图 2 所示)。
标(Earth-Centered, Earth-Fixed,ECEF)经纬高显 示在界面上。
加 载 任 务 时 , 上 位 机 直 接 读 取 GPS , GLONASS 的 Rinex 文件,获得电离层延迟改正 参数、与 UTC 时间同步参数、卫星钟差参数以及 星历参数等,将获得的这些数据组帧下发。但是 由于目前缺乏 BD 的 Rinex 文件,所以按照 BD 的 ICD 将星历状态参数写进 DSP 导航电文重组模 块。
{ msg.Delete(0,fuhao$1);
} } 说明:对 GPGGA 语句正确性的判断是根据其逗 号个数来判断的。虽然 GPGGA 语句中的所有参 数都是用逗号分隔的,但每条语句的参数个数是 固定的,所以正确的 GPGGA 语句的逗号个数也 是固定的。这样在该语句中我们就提取到了时间、 经度、纬度和高度。 对 GPGSA、GPGSV 语句的提取也是按照逗 号分隔的方式,虽然方法过于繁琐,但是可以很 容易的理解并得到可见卫星的仰角,方位角,信 噪比。
第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
5 商用接收机验证
验证开始时,在上位机新建场景文件中设置 好信号的仿真时间,载体的起始位置。模拟器仿 真过程中,上位机程序不断将计算出导航卫星的 观测数据发送给中频信号,产生电路,中频电路 输出中频信号,由射频电路相继产生射频信号, 射频信号经过电缆输入给卫星信号接收机[6],观 察载体的定位精度。利用 Novatal 接收机验证的 整体的界面定位显示情况(如图 3 所示)。
3 卫星信号数据提取及处理
上位机向模拟器下发保存的场景文件,通过 DSP 解算形成新的导航电文通过串口回传给上位 机。回传的数据包括卫星的位置,用户的位置, 通过卫星的位置解析出卫星的仰角方位角,伪距 等参数。回传的数据格式遵守 NMEA_0183 标准 协议格式。
作者简介:王晓倩(1987-),女,硕士研究生,研究方向:卫星导航信号模拟器技术。
CString sec1=msg.Mid(4,2); sSimulatorUser.ReceiverGPSec = atof(sec1);
if(sSimulatorUser.ReceiverGPHour<24)// 提 取 的 ReceiverGPHour 小于 24 的话正常显示,不需 要处理
{ sSimulatorUser.ReceiverGPHour= sSimulatorUser.ReceiverGPHour;
} 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);
70
机电技术
2013 年 8 月
3.1 NMEA_0183 数据格式简介
NMEA_0183 通信标准的输出数据包含了纬 度,经度、高度、速度、日期、时间、航向以及 卫星状况等信息[3]。NMEA 语句包含 6 种,分别 为 GGA、GLL、GSA、GSV、RMC 和 VTG,根 据不同的情况通过端口截取需要的个别语句。“$” 为语句起始标志;“,”为域分隔符;“*”为校验和识 别符,其后面的两位数为校验和;“<CR>/<LF>” 为终止符,表示回车、换行[4]。
图 3 Novatal 接收机界面
对比分析,当模拟器模拟的载体 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。以上 信息与模拟器的设定参数基本相符。
高动态卫星信号模拟器分为软件和硬件两部 分,软件部分为硬件部分提供了发射信号的状态 参数,从而控制硬件来仿真相应的卫星信号,文 中给出了软件部分的构成及实现。
1 串口通信
模拟器使用 RS232 串口实现上位机软件与硬 件的通信。利用 MSCOmm 控件串口编程[2],其 基本步骤如下:
1) 在 建 立 的 程 序 工 程 中 插 入 Microsoft Communication Control 控件;
tempGGA = msg.Mid(0,fuhao$1); while (tempGGA .Find(',')!=-1)
{ douhao = tempGGA .Find(','); numdouhao+wenku.baidu.com; tempGGA.Delete(0,douhao+1);
} if (numdouhao ==14)
图 2 模拟器上位机界面
工具栏中可以实现与串口的连接,加载任务 完成向模拟器 DSP 下发场景文件,并将模拟的弹 道轨迹数据通过 TeeChart 控件画出,即界面中的 飞行轨迹图红色曲线。点击“开始”按钮后,DSP 开始回传重组的导航电文。
一般预设的载体轨迹,加载时得到的是 ENU(东北高)坐标系,需要将转换为地心地固坐
2 场景设置
场景设置的主要功能是设置载体初始位置, 初始速度、设置电离层误差,对流层误差,仰角 门限、选择合适的弹道轨迹、选择各系统的星历 Rinex 文件,设置模拟器信号仿真的起始时间, 最后以.tsk 形式保存场景文件(如图 1 所示)。
图 1 模拟器场景设置图
星历数据的来源一般有两个:一个是从计算 机串口读入的 GPS 接收机的输出信号,主要用于 实时地获取定位信息;另一个就是已有的星历文 件,主要用于测试该软件的性能。文中提到的数 据来源属于后者,使用商务接收机接收到的天上 星的信号用存储文件或者使用从官方网站下载的 星历文件,测试自己研制的模拟器的可行性。
第4期
机电技术
69
导航信号模拟器上位机软件设计
王晓倩1 焦国太1 王建平1 耿生群2
(1.中北大学机电工程学院 山西 太原 030051;2.北京航空航天大学电子信息工程学院 北京 100191)
摘 要:文章介绍了基于 vc++的模拟器上位机软件的操作与实现。简要阐述了串口通信的方法,以 NMEA_0183 数据格式完成对北斗、GPS、GLONASS 各系统信号的采集与处理,结合 DSP+FPGA 构建模拟器的上位机软件平台。上 位机软件可以模拟载体轨迹数据,进行星座仿真。实践证明软件开发的模拟器能够有效地辅助接收机测试信号的稳定性, 并可以直观的反应出卫星定位状态,从而证明了该软件的可行性。
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;
2) 添加 MSComm 控件 ID 的控制变量(或者 对象);
3) 对串口进行初始化,设置 MSComm 控件 的属性;
4) 添加串口事件的消息处理函数 OnComm() 函数,在函数中根据应用需要,编写数据处理代 码。
通过以上可完成数据传输的端口号、端口的 波特率,数据位,停止位,奇偶校验的设置。
关键词:vc++;串口通信;NMEA_0183;上位机 中图分类号:TP311 文献标识码:A 文章编号:1672-4801(2013)04-069-04
卫星导航定位系统是目前在军用和民用载体 中普遍使用的一种导航定位方式,其中高动态接 收机一般应用于导弹、飞机等运动载体上,其试 验条件和环境的建立受到成本、周期等诸多因素 的制约[1]。实验设计的高动态卫星信号的模拟器 通过模拟产生高动态载体接收到的卫星导航信 号,可以在实验室环境中,并且在接收机静止的 条件下测试其动态性能,是高动态接收机参数测 量、测试、性能评估与数据分析的有效手段,从 而成为精密制导武器中必不可少的关键技术。
文中设计的上位机软件涉及到的语句包括 GGA、GSA 和 GSV 语句。这些语句的定义如下 解析。
GGA:是指输出协调世界时和卫星定位三维 位置;
GSA:是指输出伪随机噪声码,PDOP 位置 精度因子、HDOP 水平精度因子、
VDOP 垂直精度因子; GSV:是指输出可视卫星总数,卫星号,卫 星仰角,方位角及信噪比。每条 GSV 语句最多可 以显示 4 颗卫星的信息。
{ 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);
3.2 软件实现数据采集
从串口中接受的数据存放于缓存中,通过以 下程序将将各个字段的信息从缓存字节流中提取 出来,将其转换为有实际意义的定位信息数据。 下面以提取 GPGGA 语句为例。 if(msg.Left(6).Compare(_T("$GPGGA"))==0)
{ fuhao$ = msg.Find('$'); if (fuhao$ == 0) { msg.Delete(0,1); fuhao$1 = msg.Find('$'); }
4 图形显示主界面
图形显示主界面用来显示模拟的飞行轨迹 图,星空图,NMEA_0183 格式的卫星数据等。 该软件主要按照思博伦公司的 SimGEN 软件简单 的设计[5](如图 2 所示)。
标(Earth-Centered, Earth-Fixed,ECEF)经纬高显 示在界面上。
加 载 任 务 时 , 上 位 机 直 接 读 取 GPS , GLONASS 的 Rinex 文件,获得电离层延迟改正 参数、与 UTC 时间同步参数、卫星钟差参数以及 星历参数等,将获得的这些数据组帧下发。但是 由于目前缺乏 BD 的 Rinex 文件,所以按照 BD 的 ICD 将星历状态参数写进 DSP 导航电文重组模 块。
{ msg.Delete(0,fuhao$1);
} } 说明:对 GPGGA 语句正确性的判断是根据其逗 号个数来判断的。虽然 GPGGA 语句中的所有参 数都是用逗号分隔的,但每条语句的参数个数是 固定的,所以正确的 GPGGA 语句的逗号个数也 是固定的。这样在该语句中我们就提取到了时间、 经度、纬度和高度。 对 GPGSA、GPGSV 语句的提取也是按照逗 号分隔的方式,虽然方法过于繁琐,但是可以很 容易的理解并得到可见卫星的仰角,方位角,信 噪比。
第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
5 商用接收机验证
验证开始时,在上位机新建场景文件中设置 好信号的仿真时间,载体的起始位置。模拟器仿 真过程中,上位机程序不断将计算出导航卫星的 观测数据发送给中频信号,产生电路,中频电路 输出中频信号,由射频电路相继产生射频信号, 射频信号经过电缆输入给卫星信号接收机[6],观 察载体的定位精度。利用 Novatal 接收机验证的 整体的界面定位显示情况(如图 3 所示)。
3 卫星信号数据提取及处理
上位机向模拟器下发保存的场景文件,通过 DSP 解算形成新的导航电文通过串口回传给上位 机。回传的数据包括卫星的位置,用户的位置, 通过卫星的位置解析出卫星的仰角方位角,伪距 等参数。回传的数据格式遵守 NMEA_0183 标准 协议格式。
作者简介:王晓倩(1987-),女,硕士研究生,研究方向:卫星导航信号模拟器技术。
CString sec1=msg.Mid(4,2); sSimulatorUser.ReceiverGPSec = atof(sec1);
if(sSimulatorUser.ReceiverGPHour<24)// 提 取 的 ReceiverGPHour 小于 24 的话正常显示,不需 要处理
{ sSimulatorUser.ReceiverGPHour= sSimulatorUser.ReceiverGPHour;
} 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);
70
机电技术
2013 年 8 月
3.1 NMEA_0183 数据格式简介
NMEA_0183 通信标准的输出数据包含了纬 度,经度、高度、速度、日期、时间、航向以及 卫星状况等信息[3]。NMEA 语句包含 6 种,分别 为 GGA、GLL、GSA、GSV、RMC 和 VTG,根 据不同的情况通过端口截取需要的个别语句。“$” 为语句起始标志;“,”为域分隔符;“*”为校验和识 别符,其后面的两位数为校验和;“<CR>/<LF>” 为终止符,表示回车、换行[4]。
图 3 Novatal 接收机界面
对比分析,当模拟器模拟的载体 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。以上 信息与模拟器的设定参数基本相符。
高动态卫星信号模拟器分为软件和硬件两部 分,软件部分为硬件部分提供了发射信号的状态 参数,从而控制硬件来仿真相应的卫星信号,文 中给出了软件部分的构成及实现。
1 串口通信
模拟器使用 RS232 串口实现上位机软件与硬 件的通信。利用 MSCOmm 控件串口编程[2],其 基本步骤如下:
1) 在 建 立 的 程 序 工 程 中 插 入 Microsoft Communication Control 控件;
tempGGA = msg.Mid(0,fuhao$1); while (tempGGA .Find(',')!=-1)
{ douhao = tempGGA .Find(','); numdouhao+wenku.baidu.com; tempGGA.Delete(0,douhao+1);
} if (numdouhao ==14)