劉哲延
(貴州省第一測繪院 貴州貴陽 550001)
20世紀90年代中期推出了GNSS OEM技術(當時主要是針對GPS系統),該技術將GPS接收機的主要部件做成大規模集成電路芯片,并與其他配套功能部件集成在一塊電路板上。BD970為一款多系統多頻點GNSS OEM板卡,支持GPS、GLONASS、Galileo、北斗二代全頻點信號接收,具有最高可達50Hz測量頻率及RTK等功能[1]。BD970 OEM板以其性能優良、價格低廉、輕巧靈便、易于開發等優點,被廣泛用于運動載體的導航、授時和高精度定位等領域。
RAWDATA[3]是Trimble BD970 OEM板卡輸出的一種天寶公司自定義的二進制數據格式,該二進制數據格式分為三個部分:數據頭、數據內容和數據校驗三部分。其中數據頭部分包括:數據頭標志和信息數據長度等信息,而數據內容部分是可變的,它的長度由待傳送的信息來具體確定,其基本結構如表1。

表1 RAWDATA二進制數據結構
這種原始衛星測量數據輸出速率通常超出了RS-232串口的字節限定。為了克服數據包尺寸限制的缺點,這些數據被分成了若干分包。這些分包的第4字節定義了該分包在整個數據包內的索引和該數據包所包含的測量歷元的最大分包索引數。每個分包最大由248個字節組成,其中有4個字節是分包索引,另外244個字節存儲衛星原始觀測數據。
通常GPS原始數據解碼總的來說要經過以下步驟:
(1)將原始二進制讀入之后開始查找數據標識頭;
(2)逐字段對數據進行解析;
(3)根據變量的單位進行轉換。由于各個生產商的板卡有著自己特有的二進制數據格式,在步驟(3)上要注意閱讀產品說明書。
圖1為RAWDATA格式文件具體內容:

圖1 RAWDATA數據實例
在解析的時候,我們先查找字頭02h,然后在讀取第1字節關于接收機狀的數據,并對第2字節是否是57h進行驗證,以確定字頭02h是分包開始的標志。第3位數據塊決定了需要讀取的字節最大數量。第5字節的信息是將各分散的數據進行重組的唯一標志。而第7字節,則決定了該數據塊的數據類型。在對RAWDATA數據進行解碼的時候,需要對每段數據用取模的方式進行校檢[3],如果出現錯誤,則丟棄這段數據。校檢無誤之后,則可作為有效數據部分,之后再用于重組完整數據。
RAWDATA解碼程序流程圖如圖2。

圖2 解碼程序流程圖
另外,在BD970OEM數據解碼單位換算時,有幾點需要注意:①載波相位尺度因子為1/1024,單位是半周,讀取相位數據時需將其先換算為整周,然后根據C/A碼的說明進行提取;②多普勒值可在RAWDATA數據中直接讀取,但需乘以常數1000[5]。此次在編碼過程中,使用了.NETFramework中的一個串口通信控件,名為SerialPort[2],其功能類似于MSComm[3]。在該控件整合了串口操作中數據整理、奇偶校驗以及從緩沖區讀取數據等功能[4],極大提高了開發效率。
本人選取了2013年1月22日下午14點一段觀測原始數據進行解碼,結果如下:
轉碼后的結果:

圖3 正確解碼的RINEX格式
經過與正確數據比對,該解碼算法可靠。通過本文介紹的OEM板卡二進制文件數據解析的基本方法和思路,可以實現絕大部分二進制GNSS觀測數據的解析。而對于GPS接收機的其他一些二進制數據,比如RTCM、CMR等,向文本文件的轉化方法與此相似。隨著GNSS接收模塊小型化,基于GNSS OEM板的二次開發將成為GNSS產品民用化的一個重要方向。
[1]Trimble Company.Trimble BD970 OEM UserGuide[S].2010.
[2]徐蕾璐,俞子榮.NET環境下基于SerialPort實現SR23與PC機的通信[J].計算機與現代化,2011,5:029.
[3]李立早.基于MSComm控件的GPS接收機數據終端接口設計[J].現代電子技術,2006,29(20):97~98.
[4]康筱鋒,吳瓊,張建生.基于PDA和GPSOEM板的GPS信息解碼[J].安徽工業大學學報,2007,24(1).
[5]孟祥廣,郭際明.GPS接收機(OEM)二進制文件向RINEX文件的轉換[J].測繪工程,2009,18(5):18~21.