倪萍
南京信息工程大学滨江学院通信工程 南京 210044
摘要:针对目前我国气象测量数据无法实时传输的现状,采用我国自主研发的北斗卫星导航系统为无线信道单元,结合数据
压缩及长报文通信协议短信息数据传输等技术,设计基于北斗卫星的气象测量数据传输系统,解决移动气象站上测量数据实时传输的问题。
关键词:北斗导航系统;数据采集和传输;移动气象站;
1.绪论 ....................................................................................3
1.1北斗导航系统的必要性 ..............................................................3 1.2建设原则 ..........................................................................3 2.北斗导航系统的发展现状与应用领域 .......................................................4
2.1北斗卫星导航系统的简介 ............................................................4 2.2文件范畴 ..........................................................................5 2.3空间星座 ..........................................................................5 2.4坐标系统 ..........................................................................5 3.系统方案与硬件设计 ......................................................................6
3.1系统组成 ..........................................................................6 3.2系统的原理 ........................................................................6 3.3定位系统的原理和方案 ..............................................................7 3.4软件方案 ..........................................................................8 3.5硬件方案 ..........................................................................9 4. 数据的接收和发送 ......................................................................10
4.1计算定位数据 .....................................................................10 4.2计算时间差 .......................................................................14 4.3错误代码测试 .....................................................................15 4.4消息的类型定义 ...................................................................16 4.5常量相关表 .......................................................................23 5. 运行结果 .............................................................................25
5.1运行软件画面 .....................................................................25 6. 结束语 ...............................................................................25
1.绪论
1.1北斗导航系统的必要性
约四十年前,美国军方开始了被称作“全球定位系统”(GPS)的研制。现在,在我们头顶上空约2万公里处的中地球轨道,GPS系统部署了24颗卫星,地面站对这些卫星的信息数据进行捕捉、处理、解码,并将有关信息发至用户终端机—这样,GPS给全球提供准确的定位、测速和高精度的时间标准。如今,GPS在我们生活中已然不可或缺—飞机、汽车、船舶用它来导航;公安、金融、消防部门用它来监控、报警;而不少路痴朋友们驾车出行,也往往得有它来壮胆伴行„„[1]
卫星导航系统是重要的空间信息基础设施。中国高度重视卫星导航系统的建设,一直在努力探索和发展拥有自主知识产权的卫星导航系统。2000年,首先建成北斗导航试验系统,使我国成为继美、俄之后的世界上第三个拥有自主卫星导航系统的国家。该系统已成功应用于测绘、电信、水利、渔业、交通运输、森林防火、减灾救灾和公共安全等诸多领域,产生显著的经济效益和社会效益。特别是在2008年北京奥运会、汶川抗震救灾中发挥了重要作用。为更好地服务于国家建设与发展,满足全球应用需求,我国启动实施了北斗卫星导航系统建设。
在目前的移动气象试验中,测量设备的状态对于试验进程的决策具有重要意义,如果测量设备的状态不好,则试验有可能推迟或取消。同时,测量设备获取的测量结果也是试验结果判定的重要依据。因此,准确、快速地将测量信息回传到指挥中心,对于移动气象试验而言关系重大。但现有的数传电台、GSM及无线网络等常用的数据传输方式因其传输距离、保密等因素无法满足移动气象测量信息传输的要求。
北斗系统的建成使用及其特有的短消息通信功能,为解决问题开辟了一个崭新的途径。2006年,吴允平利用北斗系统设计了航标遥测遥控信息系统[2]; 2009年,黄丽卿提出利用北斗短信功能进行航标状态检测[3];彭杰提出利用北斗进行海洋环境检测数据的传输,都取得较好的效果[4]。在借鉴上述研究成果的基础上,设计了适用于移动气象试验的北斗数据传输系统,较好的解决了移动气象试验信息传输的问题。为此,本文在简单介绍北斗系统工作原理的基础上,重点论述利用北斗短信功能实现移动气象试验信息的回传。
1.2建设原则
北斗卫星导航系统的建设与发展,以应用推广和产业发展为根本目标,不仅要建成系统,更要用好系统,强调质量、安全、应用、效益,遵循以下建设原则:
(1)开放性。北斗卫星导航系统的建设、发展和应用将对全世界开放,为全球用户提供高质量的免费服务,积极与世界各国开展广泛而深入的交流与合作,促进各卫星导航系统间的兼容与互操作,推动卫星导航技术与产业的发展。
(2)自主性。中国将自主建设和运行北斗卫星导航系统,北斗卫星导航系统可独立为全球用户提供服务。 (3)兼容性。在全球卫星导航系统国际委员会(ICG)和国际电联(ITU)框架下,使北斗卫星导航系统
与世界各卫星导航系统实现兼容与互操作,使所有用户都能享受到卫星导航发展的成果。
(4)渐进性。中国将积极稳妥地推进北斗卫星导航系统的建设与发展,不断完善服务质量,并实现各阶段的无缝衔接。
2.北斗导航系统的发展现状与应用领域
目前世界上只有少数国家具备自主建设全球卫星导航系统的能力,正在运行的有美国的GPS系统和俄罗斯的GLONASS系统,欧洲的伽利略全球卫星定位计划也在紧锣密鼓地进行。近年来,中国的卫星导航产业及应用发展迅速,但95%的应用都是建立在美国GPS之上。而由于北斗导航是我国自主创新的产品,且该系统运行以来,系统运行稳定,可靠性达到100%,是我国卫星导航事业摆脱受制于人的重要基础设施,,也是打破GPS独占我国卫星定位导航应用市场局面的根本手段。
而其中北斗导航系统的数据传输和采集在交通运输[5]、海洋观测[6-7]、水文监测[8]、抗险防灾[9]及国防安全等众多领域有着广泛的应用
[10]
,而其在移动气象站数据采集与传输方面的应用还鲜有报道,在此背
景下提出“北斗移动气象站数据采集与传输系统”的构建,我们有必要去进一步去了解和研究它。
2.1北斗卫星导航系统的简介
北斗卫星导航系统﹝BeiDou(COMPASS)Navigation Satellite System﹞是中国正在实施的自主发展、独立运行的全球卫星导航系统。系统建设目标是:建成独立自主、开放兼容、技术先进、稳定可靠的覆盖全球的北斗卫星导航系统,促进卫星导航产业链形成,形成完善的国家卫星导航应用产业支撑、推广和保障体系,推动卫星导航在国民经济社会各行业的广泛应用。
北斗卫星导航系统由空间段、地面段和用户段三部分组成,空间段包括5颗静止轨道卫星和30颗非静止轨道卫星,地面段包括主控站、注入站和监测站等若干个地面站,用户段包括北斗用户终端以及与其他卫星导航系统兼容的终端。采用双星有源导航定位体制,只能提供低动态和静态导航定位服务,可以全天候、全天时提供区域卫星导航信息。服务范围包括中国大陆、台湾、南沙及其它岛屿、中国海、日本海、太平洋部分海域及我国部分周边地区。系统为用户提供快速导航定位、简短数字报文通信和授时服务。系统的主要功能体现在三个方面:(1)定位:快速确定用户所在地的地理位置、向用户及主管部门提供导航信息;(2)通讯:用户间、用户与中心控制系统间均可实现双向简短数字报文通信;(3)授时:中心控制系统定时播发授时信息,为定时用户提供时延修正值。“北斗一号”采用双星定位体制,由2颗地球静止卫星对用户双向测距,由1个配有电子高程图库的地面中心站进行位置解算。定位由用户终端向中心站发出请求,中心站对其进行位置解算后将定位信息发送给该用户。采用的定位原理是基于三球交会原理,即以2颗卫星的已知坐标为圆心,各以测定的本星至用户机距离为半径,形成2个球面,用户机必然位于这2
个球面交线的圆弧上。中心站电子高程地图库提供的是一个以地心为球心、以球心至地球表面高度为半径的非均匀球面。求解圆弧线与地球表面交点,并已知目标在赤道平面北侧,即可获得用户的二维位置。具体定位解算工作过程是:(1)首先由中心控制系统向两颗卫星同时发送询问信号,经卫星转发器向服务区内的用户广播。(2)用户响应任一卫星的询问信号,并同时向两颗卫星发送响应信号,经卫星转发回中心控制系统。(3)中心控制系统接收并解调用户发来的信号,然后根据用户的申请服务内容进行相应的数据处理(定位或授时)。如图1。
图1、北斗卫星通信组网图
2.2文件范畴
北斗卫星导航系统建设按照“先区域、后全球”的总体思路分步实施,采取“三步走”的发展战略。第一步,2000年初步建成北斗卫星导航试验系统;第二步,2012年北斗卫星导航(区域)系统将为中国及周边地区提供服务;第三步,2020年全面建成北斗卫星导航系统。 本接口文件定义了北斗卫星导航(区域)系统空间星座和用户终端之间B1频点空间信号相关内容。
2.3空间星座
北斗卫星导航(区域)系统空间星座由14颗组网卫星组成,其中包括5颗地球静止轨道(GEO)和9颗非地球静止轨道(Non-GEO)卫星组成。其中,Non-GEO卫星包括4颗中圆地球轨道(MEO)卫星和5颗倾斜地球同步轨道(IGSO)卫星。GEO卫星分别定点于东经58.75度、80度、110.5 度、140度和160度。
2.4坐标系统
北斗卫星导航系统采用2000 中国大地坐标系(CGCS2000)。CGCS2000大地坐标系的定义如下:原点位于地球质心;Z轴指向国际地球自转服务组织(IERS)定义的参考极(IRP)方向;X轴为IERS定义的参考子午面(IRM)与通过原点且同Z轴正交的赤道面的交线; Y轴与Z、X轴构成右手直角坐标系。CGCS2000原点也用作CGCS2000椭球的几何中心,Z轴用作该旋转椭球的旋转轴。CGCS2000参考椭球定义的基本常数为:
长半轴:a = 6378137.0 m ,
地球(包含大气层)引力常数:GM = 398600.4418*10m/s, 扁率:f = 1/298.257222101 ,
地球自转角速度:w = 7.2921150*10rad/s。
-5
93
2
3.系统方案与硬件设计
系统的方案与硬件的设计的合理性是是否能完成本次设计的前提条件,以下就关于这两方面进行详细的介绍。
3.1系统组成
系统除了编制北斗系统用户机数字图格式文件外,主要是建立一个基于北斗卫星系统短报文通信链路的供图与传输系统,该系统由指挥中心、移动用户两部分组成。
指挥中心由计算机、北斗用户机及软件系统构成。软件系统包括相应的功能模块和移动户数据库、数据库,完成对所属移动气象站的监控,发送、接收简短报文,对数据进行抽取简化、压缩,向移动气象站传输经抽取简化、压缩的数据,接收标图信息,对信息进行更新标绘和显示。移动气象站主要包括个人数字助理(PDA)、北斗用户机两套设备,完成数据的接收、解压缩、显示、导航、定位、位置报告、图上标注、信息反馈等功能。
3.2系统的原理
移动气象站装载显示终端,可以装载、显示数字地图,实时接收北斗用户机的定位结果并在数字地图上显示,并为移动气象站提供导航信息;移动气象站通过北斗卫星系统的短报文通信链路,按照一定的通信协议向指挥中心上报位置、实时气象信息等,申请指定区域的数字气象数据,接收指挥中心下达的命令和传输的经抽取、简化和压缩的数字气象信息,并在显示终端上对气象数据解压缩并显示;指挥中心通过北斗卫星系统的短报文通信链路接收移动气象站上报的位置和实时气象信息并匹配到数字地图上,存储气
象信息;接收到移动气象站上报的供图申请后,按照申请的图幅号将指定区域的气象数据进行抽取、简化、压缩、打包,按照确定的协议分多包发送到移动气象站。
3.3定位系统的原理和方案
北斗卫星系统采用三球交会测量原理进行定位。如图2所示。
(I)分别以两颗同步卫星为球心,以卫星到用户接收天线距离为半径.构成两个球面; (2)两球面相交得一圆,该圆垂直于赤道平面;
(3)在地球不规则球面的基础上增加用户高程,获得个“加大”的不规则球面;
(4)圆与不规则球面相交,得两个点,分别位于南北半球,取北半球的点即为移动气象站的位置。其系统结构图如图2。
图2、北斗卫星系统的“三球交会”定位原理
该导航定位终端针对移动式应用而开发,具有重量轻、体积小、交互友好、安全性高等特点,具有独立的操作系统和图形化的人机界面,可以进行全天候的准确定位和安全通信。其系统结构图如图3。
图3、移动导航定位终端系统结构图
(1)用户界面:此模块以表单或字符输入方式接收用户指令,并以图形或文字方式返回数据。 (2)通信:向总部发送信息,接收卫星信号。 (3)定位:根据用户选择的定位方式得到当前坐标。
(4)地图显示:显示区域地图、用户当前所在位置。当用户进行方向选择、动态移动、拉近拉远等动作时,进行相应的变化。
(5)地图搜索:根据用户输入的某一地点的信息,找到该点并将显示其出来,或者在用户输入出发地和目的地后,通过路由算法找到最短路径,并在地图上显示。 (6)电子地图:存储地图文件。
(7)加密:使用AES算法对发送数据进行加密。
(8)系统维护:对导航终端所进行总体设置,定期备份、更新地图数据,提供所有的地图文件下载接口,设置用户各种操作权限,在软件出现新版本时出现版本更新提示。
3.4软件方案
主要是在移动气象站测量设备的遥控站点架设一台北斗用户机,当测量设备信息回传到遥控站点后(目前,主要利用数传电台实现该项功能,在通视条件下,作用距离可达到80km),利用串口数据线将信息写入北斗用户机,利用短信功能回传给指挥中心,系统组成框图,如图4。 移动气象站
遥控站点 北斗用
户机 遥控笔记本 数传 电台 移动气象站测 量设备信息 数传 电台 指挥中心 北斗指挥机 指挥中心 图4、软件方案原理图
该方案需要在遥控笔记本上开发串口读写软件,根据北斗通信频率,监视串口状态,当测量设备信息通
过数传电台反馈到遥控笔记本时,该软件将串口内的信息读出来并对其重新编码,通过另外一路串口将其传送到北斗用户机,并利用短信功能传给架设在指挥中心的北斗指挥机。
3.5硬件方案
硬件方案是指测量设备利用串口将原始信息传给额外加载的单片机,单片机对信息进行编码,符合北斗发送短信的格式,然后再传给北斗用户机,利用北斗短信将之发送给指挥中心的北斗指挥机,并将测量设备信息投射到大屏幕上,供指挥员进行决策。系统组成见图5。
大屏幕 数据处理机 单片机 指挥中心北斗指挥机 北斗指挥机 卫星 存储器 打印机 测量设备 测量设备 测量设备 测量设备 图5、系统组成及流程图
板卡用于连接北斗用户机,电源和各种传感器,集数据采集、存储、传输于一体,可控制加电时间,以保障系统工作中可以尽量保持在低功耗工作状态,能完成信息自动采集、固态存储、远近距离传输和设备参数控制等功能,其具备的具体功能有:①板卡通过标有电源入字样的接入端接入电源,整板透传衰减不超过最大0.5V直流输出;②板卡通过标有电源出字样的输出电源,输出电源端可接到北斗用户机供电;③板卡通过标有北斗字样的串口与北斗用户机串口连接,可控制北斗用户机的开关机,通讯工作方式;同时可通过串口接收来自北斗链路的时间校准指令和指控中心遥控指令;④板卡可通过标有采集口字样的串口与传感器连接,可按照约定方式接收来自传感器的数据驱动。
该方案的优点在于系统自动化程度较高,当事件变化或定时时间到时,板卡自动采集数据,经计算处理后,自动启动通信链路,将数据传输至中心站。如果在设定的定时时段内,数据的变化量大于某一设定值时,则自动启动通信链路,按设定的路径将数据传输到中心站。
同时,由于板卡及北斗用户机的功耗都很小,可与海上测量设备统一供电,不增加电源供电负担,因此,,方案十分适用于需要长期工作无需人工值守的岗位。缺点在于人工干预能力较差,一旦发生故障不能及时维修,需要改动测量设备硬件,在一定程度上降低了测量设备的可靠性。
4.数据的接收和发送
4.1计算定位数据
Interface uses Windows, SysUtils, Math; type
TOrientationData_Calc = class protected
FCalcTotalNum: dword; FCalcNowNum: dword;
FLongitude: array[1..4] of byte; FAltitude: array[1..4] of byte; FLongSum: Extended; FLatSum: Extended; FLongSquareSum: Extended; FLatSquareSum: Extended; FLongAverage: Double; FLongFangCha: Double;
FLatAverage: Double; FLatFangCha: Double;
procedure GetDataShow(pData: pByte; Value: Double); public
// 初始化数据 每次统计前调用 procedure SetTotal(dwNum: DWORD); procedure InitalData(); // 只有在统计状态下才调用
procedure SetData(pLong, pLat: pByte); // 只有在统计次数到达时调用 获取计算值
procedure GetData(pLongAverage, pLatAverage: pByte; var LongFangCha, LatFangCha: Double); function GetNowNum(): DWORD; function GetTotalNum(): DWORD; end; implementation
{ TOrientationData_Calc }
procedure TOrientationData_Calc.GetData(pLongAverage, pLatAverage: pByte; var LongFangCha, LatFangCha: Double); begin
GetDataShow(pLongAverage, FLongAverage); GetDataShow(pLatAverage, FLatAverage); LongFangCha:= FLongFangCha; LatFangCha:= FLatFangCha; end;
procedure TOrientationData_Calc.GetDataShow(pData: pByte; Value: Double); var
byTemp: byte; begin
byTemp:= Trunc(Value / 3600); pData^:= byTemp;
inc(pData);
Value:= Value - byTemp * 3600; byTemp:= Trunc(Value / 60); pData^:= byTemp; inc(pData);
Value:= Value - byTemp * 60; byTemp:= Trunc(Value); pData^:= byTemp; inc(pData);
Value:= (Value - byTemp) * 10; byTemp:= Trunc(Value); pData^:= byTemp; end;
function TOrientationData_Calc.GetNowNum: DWORD; begin
Result:= FCalcNowNum; end;
function TOrientationData_Calc.GetTotalNum: DWORD; begin
Result:= FCalcTotalNum; end;
procedure TOrientationData_Calc.InitalData(); begin
FCalcNowNum:= 0;
ZeroMemory(@FLongitude[1], sizeof(FLongitude)); ZeroMemory(@FAltitude[1], sizeof(FAltitude)); FLongSum:= 0; FLatSum:= 0; FLongSquareSum:= 0; FLatSquareSum:= 0;
FLongAverage:= 0; FLongFangCha:= 0; FLatAverage:= 0; FLatFangCha:= 0; end;
procedure TOrientationData_Calc.SetData(pLong, pLat: pByte); var
dbLong, dbLat: Double; begin
Inc(FCalcNowNum);
CopyMemory(@FLongitude[1], pLong, sizeof(FLongitude)); CopyMemory(@FAltitude[1], pLat, sizeof(FAltitude));
dbLong:= FLongitude[1] * 3600 + FLongitude[2] * 60 + FLongitude[3] + FLongitude[4] / 10;
FLongSum:= FLongSum + dbLong;
FLongSquareSum:= FLongSquareSum + sqr(dbLong);
dbLat:= FAltitude[1] * 3600 + FAltitude[2] * 60 + FAltitude[3] + FAltitude[4] / 10;
FLatSum:= FLatSum + dbLat;
FLatSquareSum:= FLatSquareSum + sqr(dbLat); // if FCalcNowNum = FCalcTotalNum then // begin
FLongAverage:= FLongSum / FCalcNowNum;
FLongFangCha:= sqrt( abs(FLongSquareSum) / FCalcNowNum - sqr(FLongAverage) ); // FLongFangCha:= sqrt( abs(FLongSquareSum / sqr(3600)) / FCalcNowNum - sqr(FLongAverage / 3600) );
FLatAverage:= FLatSum / FCalcNowNum;
FLatFangCha:= sqrt( abs(FLatSquareSum) / FCalcNowNum - sqr(FLatAverage) ); // FLatFangCha:= sqrt( abs(FLatSquareSum / sqr(3600)) / FCalcNowNum - sqr(FLatAverage / 3600) );
// end; end;
procedure TOrientationData_Calc.SetTotal(dwNum: DWORD); begin
FCalcTotalNum:= dwNum; end; End.
4.2计算时间差
uses IdGlobal;
{ TTimeDifferenceData_Calc }
procedure TTimeDifferenceData_Calc.GetData(var AverageData, StandardData: double); begin
AverageData:= FAverageData; StandardData:= FStandardData; end;
function TTimeDifferenceData_Calc.GetNowNum: DWORD; begin
Result:= FCalcNowNum; end;
function TTimeDifferenceData_Calc.GetTotalNum: DWORD; begin
Result:= FCalcTotalNum; end;
procedure TTimeDifferenceData_Calc.InitalData; begin
FCalcNowNum:= 0; FData:= 0;
FSumData:= 0; FSquareSumData:= 0; FAverageData:= 0; FStandardData:= 0; end;
procedure TTimeDifferenceData_Calc.SetData(nData: integer); begin
inc(FCalcNowNum); FData:= nData * 1.0; FSumData:= FSumData + FData;
FSquareSumData:= FSquareSumData + sqr(FData); FAverageData:= FSumData / FCalcNowNum;
FStandardData:= sqrt( abs( FSquareSumData / FCalcNowNum - sqr(FAverageData) ) ); // debugoutput(format('均值 %f, 标准差 %f, 当前样本值 %f, 累积和 %f, 累积平方和 %f, 当前次数 %d', [FAverageData, FStandardData, FData, FSumData, FSquareSumData, FCalcNowNum])); end;
procedure TTimeDifferenceData_Calc.SetTotal(dwNum: DWORD); begin
FCalcTotalNum:= dwNum; end; End.
4.3错误代码测试
procedure TErrorCode_Calc.SetLastFrameID(wFrameID: word); begin
FLastFreamID:= wFrameID; end;
procedure TErrorCode_Calc.SetTestFlag;
begin
FAlreadyTest:= true; end;
procedure TErrorCode_Calc.SetTotal(dwNum: DWORD); begin
FCalcTotalNum:= dwNum; end; End.
4.4消息的类型定义
interface uses Windows; // 消息类型定义 // 功率状况 type
TPowerStatus = packed record
PowerNum: array[1..6] of byte; // 对应通道0-5 end;
PPowerStatus = ^TPowerStatus; const
PowerStatus_Length = sizeof(TPowerStatus); // 定位信息 type
TOrientationInfo_Common = packed record InfoType: byte;
QueryAddr: array[1..3] of byte;
TimeInfo: array[1..4] of byte; // 时:分:秒.0.01秒 LongitudeInfo: array[1..4] of byte; // 度:分:秒.0.1秒
LatitudeInfo: array[1..4] of byte; // 度:分:秒.0.1秒 AltitudeInfo: array[1..2] of byte; // 2bit 符号 14bit值 AltAbnormityInfo: array[1..2] of byte; // 2bit 符号 14bit值 end;
POrientationInfo_Common = ^TOrientationInfo_Common; const
OrientationInfo_Common_Length = sizeof(TOrientationInfo_Common); type
TOrientationInfo_UpperAir = packed record InfoType: byte;
QueryAddr: array[1..3] of byte;
TimeInfo: array[1..4] of byte; // 时:分:秒.0.01秒 LongitudeInfo: array[1..4] of byte; // 度:分:秒.0.1秒 LatitudeInfo: array[1..4] of byte; // 度:分:秒.0.1秒 AltitudeInfo: array[1..3] of byte; // 无符号 24bit值 end;
POrientationInfo_UpperAir = ^TOrientationInfo_UpperAir; const
OrientationInfo_UpperAir_Length = sizeof(TOrientationInfo_UpperAir); // 反馈信息 type
TFeedBackInfo = packed record Flag: byte;
AppendInfo: array[1..4] of byte; end;
PFeedBackInfo = ^TFeedBackInfo; const
FeedBackInfo_Length = sizeof(TFeedBackInfo); // 功率检测4.0 type
TPowerDetect_BD4 = packed record OutputFreq: byte; // 单位秒 end;
PPowerDetect_BD4 = ^TPowerDetect_BD4; const
PowerDetect_BD4_Length = sizeof(TPowerDetect_BD4); // 定位申请4.0 type
TOrientationApp_Common_BD4 = packed record TypeInfo: byte;
HeightInfo: array[1..2] of byte; // 符号数 AntennaHeightInfo: array[1..2] of byte;
AirPressureInfo: array[1..4] of byte; // 前20bit为气压 后12bit为温度 InStageFreq: array[1..2] of byte; end;
POrientationApp_Common_BD4 = ^TOrientationApp_Common_BD4; const
OrientationApp_Common_BD4_Length = sizeof(TOrientationApp_Common_BD4); type
TOrientationApp_UpperAir_BD4 = packed record TypeInfo: byte;
HeightInfo: array[1..4] of byte;
AirPressureInfo: array[1..4] of byte; // 前20bit为气压 后12bit为温度 InStageFreq: array[1..2] of byte; end;
POrientationApp_UpperAir_BD4 = ^TOrientationApp_UpperAir_BD4; const
OrientationApp_UpperAir_BD4_Length = sizeof(TOrientationApp_UpperAir_BD4); // 通信申请4.0 const
MaxMessageLen = 210; type
TMessageCommunicationsApp = packed record
InfoType: byte; // 010 0 2bit 通信类别 1bit 传输方式 1bit 口令识别 UserAddr: array[1..3] of byte; MessageLen: array[1..2] of byte; ResponseFlag: byte;
Content: array[1..MaxMessageLen] of byte; end;
PMessageCommunicationsApp = ^TMessageCommunicationsApp; const
MessageCommunicationsApp_Length = sizeof(TMessageCommunicationsApp); type
TQueryCommunicationsApp = packed record
InfoType: byte; // 011 1bit 查询类别 2bit 查询方式 00 UserAddr: array[1..3] of byte; end;
PQueryCommunicationsApp = ^TQueryCommunicationsApp; const
QueryCommunicationsApp_Length = sizeof(TQueryCommunicationsApp); // 通信信息 4.0 type
TCommunicationsInfo_BD4 = packed record InfoType: byte;
UserAddr: array[1..3] of byte; TimeInfo: array[1..2] of byte; MessageLen: array[1..2] of byte;
Content: array[1..MaxMessageLen + 1] of byte; // 考虑CRC字段 end;
PCommunicationsInfo_BD4 = ^TCommunicationsInfo_BD4;
const
CommunicationsInfo_BD4_Length = sizeof(TCommunicationsInfo_BD4);
// 通信回执 4.0 const
MaxReceiptNum = 5; type
TCommunReturnReceipt_BD4 = packed record ReceiptAddr: array[1..3] of byte; ReceiptTimes: byte;
ReceiptInfo: array[1..MaxReceiptNum, 1..4] of byte; end;
PCommunReturnReceipt_BD4 = ^TCommunReturnReceipt_BD4; const
CommunReturnReceipt_BD4_Length = sizeof(TCommunReturnReceipt_BD4); // 结束指令4.0 type
TFinishOrder_BD4 = packed record
//OrderCode: array[1..3] of byte; CorrespondOrder: array[1..4] of byte; end;
PFinishOrder_BD4 = ^TFinishOrder_BD4; const
FinishOrder_BD4_Length = sizeof(TFinishOrder_BD4); type
TFinishAllOrder_BD4 = packed record OrderCode: array[1..3] of byte; //CorrespondOrder: array[1..4] of byte; end;
PFinishAllOrder_BD4 = ^TFinishAllOrder_BD4;
const
FinishAllOrder_BD4_Length = sizeof(TFinishAllOrder_BD4); // IC卡检测4.0 type
TICCardDetect_BD4 = packed record FrameID: byte; end;
PICCardDetect_BD4 = ^TICCardDetect_BD4; const
ICCardDetect_BD4_Length = sizeof(TICCardDetect_BD4); // IC卡信息4.0 type
TICCardInfo_Local_BD4 = packed record FrameID: byte;
UserAddr: array[1..3] of byte; UserMark: byte;
ServiceFreq: array[1..2] of byte; CommunicationLv: byte; EncryptFlag: byte;
IncludeUserNum: array[1..2] of byte; end;
PICCardInfo_Local_BD4 = ^TICCardInfo_Local_BD4; const
ICCardInfo_Local_BD4_Length = sizeof(TICCardInfo_Local_BD4); const
MaxIncludeUserNum = 100; type
TICCardInfo_Underling_BD4 = packed record FrameID: byte;
UserAddrs: array[1..MaxIncludeUserNum, 1..3] of byte;
end;
PICCardInfo_Underling_BD4 = ^TICCardInfo_Underling_BD4; const
ICCardInfo_Underling_BD4_Length = sizeof(TICCardInfo_Underling_BD4); // 系统自检4.0 type
TSystemDetect_BD4 = packed record DetectFreq: array[1..2] of byte; end;
PSystemDetect_BD4 = ^TSystemDetect_BD4; const
SystemDetect_BD4_Length = sizeof(TSystemDetect_BD4); // 自检信息4.0 type
TSystemDetectInfo_BD4 = packed record ICCardState: byte; HardwareState: byte; BatteryPower: byte; InStageState: byte;
PowerNum: array[1..6] of byte; end;
PSystemDetectInfo_BD4 = ^TSystemDetectInfo_BD4; const
TSystemDetectInfo_BD4_Length = sizeof(TSystemDetectInfo_BD4); // 时间输出4.0 type
TTimeOutput_BD4 = packed record OutputFreq: array[1..2] of byte; end;
PTimeOutput_BD4 = ^TTimeOutput_BD4;
const
TimeOutput_BD4_Length = sizeof(TTimeOutput_BD4); // 时间信息4.0 type
TTimeOutput_Resp_BD4 = packed record AYear: array[1..2] of byte; AMonth: byte; ADay: byte; AHour: byte; AMinute: byte; ASecond: byte; end;
PTimeOutput_Resp_BD4 = ^TTimeOutput_Resp_BD4; const
TimeOutput_Resp_BD4_Length = sizeof(TTimeOutput_Resp_BD4); implementation End.
4.5常量相关表
unit Const_AssociateTable; interface uses Windows; const
MaxTestPageNum = 7;
Define_AllTestPage: array[1..MaxTestPageNum] of string = (
'功率检测', '定位申请', '通信申请', '结束指令', 'IC卡检测', '系统自检',
'时间输出' );
Define_GBSCPage: string = '广播信息';
Define_AssociateTable: array[1..MaxTestPageNum, 1..2] of string = (
('功率检测', 'tabs_GLJC'), ('定位申请', 'tabs_DWSQ'), ('通信申请', 'tabs_TXSQ'), ('结束指令', 'tabs_JSZL'), ('IC卡检测', 'tabs_ICJC'), ('系统自检', 'tabs_XTZJ'), ('时间输出', 'tabs_SJSC') );
function GetTabSheetName(s: string):string; implementation
function GetTabSheetName(s: string):string; var
i: integer; begin
Result:= '';
for i:= 1 to MaxTestPageNum do begin
if Define_AssociateTable[i][1] = s then begin
Result:= Define_AssociateTable[i][2]; Break end; end; end;
End.
5.运行结果
5.1运行软件画面
运行软件,如图6:
图6.软件界面
6.结束语
北斗系统的建成使用及其特有的短信息通信功能,为解决移动气象站测量设备状态信息回传这一难题开辟了崭新的途径。本文提出的方案能较好地适用于移动气象站试验,从而很好地解决了移动气象站设备信息回传的问题,拥有十分广阔的应用前景。一些对遥控频率要求不高的测量设备,还可以考虑利用北斗系统的短信功能进行遥控,从而使设备遥控不再受通视条件下遥控距离最大80km的限制,可使遥控站点的布设更加灵活、方便,这也有待于开展进一步的研究。
参考文献
[1]彭辉,杨时旸.北斗记—探索中国北斗卫星导航定位系统。中国新闻周刊,2011.1.3
[2]吴允平,蔡声镇,刘华松,等.航标遥测遥控信息系统的设计与实现[J].计算机工程,2006(12):253-254. [3]彭伟,徐俊臣,杜玉杰,等.基于北斗系统的海洋环境监测数据传输系统设计[J].海洋技术,2009,28(3):13-15.
[4]黄丽卿,张杏谷,郑佳春,等.北斗终端数据处理与应用[J].集美大学学报·自然科学版,2009,14(3):256-259.
[6]高迪驹.基于北斗卫星通信系统的船载终端串口通信[J]。上海海事大学学报,2008,29(4):10-14. [7]谢文宁,刘晋川,张同戌等。基于北斗卫星定位技术的海上溢油跟踪监测系统研究[J].水运科学研究,2008,21(3):14-19.
[8]摇彭伟,徐俊臣,杜玉杰等。基于北斗系统的海洋环境监测数据传输系统设计[J].海洋技术,2009,28(3):13-15.
[9]胡翔.北斗在水文监测系统中的应用[J]。无线电工程,2009,39(10):62-64.
[10]朱永辉,白征东,过静珺等.基于北斗一号的地质灾害自动监测系统[J]。测绘通报,2010,56(2):5-7.
[11]V.K.Bhargava,et a1.Digital Communications by Satellite—Modulation,MultipleAccess and Coding.John Willy&Sons,Ine.1981
Beidou navigation based mobile weather data collection and
transmission
倪萍 滨江学院
Abstract: In light of China's meteorological measurement data can not be real-time transmission of the status quo,
using China's own Beidou satellite navigation system developed for the wireless channel unit, combined with data compression and a long SMS message communication protocol and data transmission technology, design is based on Beidou satellite meteorology measurement data transmission system, to address the mobile weather station to measure real-time data transmission problems.
Key words: Beidou navigation system; data acquisition and transmission; mobile weather station;
因篇幅问题不能全部显示,请点此查看更多更全内容