張海忠,曹解放,劉雪瑞,韓雪峰,段自立
(61365部隊(duì),天津 300140)
GNSS接收機(jī)接口語(yǔ)言(GRIL)是一種特定的接口語(yǔ)言,它具有獨(dú)立于接收機(jī)的語(yǔ)言結(jié)構(gòu),同時(shí)定義了豐富的命令、消息和字段[1]。利用這些元素的有機(jī)組合,通過(guò)串口、并口、USB、藍(lán)牙及以太網(wǎng)等通信模式可以實(shí)現(xiàn)與Topcon GNSS接收機(jī)的交互,以達(dá)到操控接收機(jī)的目的,并獲取接收機(jī)的狀態(tài)參數(shù)和功能。
目前TONCON GNSS接收機(jī)主要通信工具為PCCDU,可以完成接收機(jī)參數(shù)的讀取和設(shè)置及觀測(cè)數(shù)據(jù)的下載[2-3],但其不具備人機(jī)交互界面,用戶無(wú)法實(shí)時(shí)了解衛(wèi)星分布等信息,對(duì)一些特殊功能只能通過(guò)發(fā)送GRIL命令的方法實(shí)現(xiàn),對(duì)于不熟悉GRIL命令的作業(yè)人員難度較大。本文簡(jiǎn)要介紹GRIL命令,并通過(guò)串行模式使用C#編程實(shí)現(xiàn)Topcon GNSS接受機(jī)通信控制,為不同的GNSS野外測(cè)量需要提供參考[4]。
GRIL的功能涵蓋面十分廣,涉及接收機(jī)的每個(gè)操作和參數(shù)。它靈活的語(yǔ)言方式可以實(shí)現(xiàn)對(duì)接收機(jī)的自動(dòng)及手動(dòng)控制。通過(guò)編輯命令列表,并指定接收機(jī)在指定的時(shí)間運(yùn)行這個(gè)列表就可以實(shí)現(xiàn)接收機(jī)的自動(dòng)控制功能;手動(dòng)控制則是通過(guò)控制終端把相應(yīng)命令發(fā)送到接收機(jī)就能完成。GRIL包括以下七項(xiàng)主要功能,如表1所示。
表1 GRIL主要功能
GRIL共定義12種命令,通過(guò)向接收機(jī)發(fā)送不同命令,可以實(shí)現(xiàn)從接收機(jī)主板信息到衛(wèi)星狀態(tài)查詢,以及對(duì)測(cè)量狀態(tài)完全控制,如表2所示。
表2 GRIL的12種命令語(yǔ)句
(續(xù)表)
GRIL命令語(yǔ)句格式如下:
[%ID%][COMMAND][@CS]
其中,方括號(hào)表示可選字段,各字段之間允許存在空格,一條命令最長(zhǎng)支持高達(dá)256個(gè)字符長(zhǎng)度。
%ID%:聲明的標(biāo)識(shí)符,其中ID表示任意字符串,也可以為空。響應(yīng)消息中的完全拷貝此標(biāo)識(shí)符,語(yǔ)句僅包含一個(gè)標(biāo)識(shí)符也是允許的,在這種情況下只生成一個(gè)響應(yīng)消息。
COMMAND:執(zhí)行命令的參數(shù)列表,第一個(gè)元素被稱為命令名(可以為空),它表示要執(zhí)行的動(dòng)作;中間的元素是命令參數(shù);最后是參數(shù)的值(可缺省)。命令參數(shù)為單個(gè)根節(jié)點(diǎn)逐級(jí)向上的樹(shù)形層次結(jié)構(gòu),中間用反斜杠(/)用做節(jié)點(diǎn)間的分隔符,這種組合方式與電腦中文件夾存放文件的形式相似。
@CS:校驗(yàn)為了確保發(fā)送和接收的數(shù)據(jù)正確,它進(jìn)行CRC8或CRC16校驗(yàn)。
EOC:命令終止符,由回車(chē)(CR)、換行(LF)或兩者結(jié)合使用。
示例:
發(fā)送:%RAM%print,/par/rcv/mem
接收:RE00C%RAM% 4096
在C#中使用timer及serialPort控件,timer控件提供Tick事件用于發(fā)送GRIL命令,SerialPort類(lèi)提供的DataReceived事件用于接收數(shù)據(jù)。當(dāng)SerialPort對(duì)象接收緩沖區(qū)有數(shù)據(jù)時(shí),將在輔助線程上引發(fā)DataReceived事件[5-6]。
不同的操作對(duì)應(yīng)GRIL命令及返回?cái)?shù)據(jù)不同,需要編寫(xiě)對(duì)應(yīng)的DataReceived事件及數(shù)據(jù)處理方法。當(dāng)進(jìn)行新的操作時(shí),采取事件輪轉(zhuǎn)的方式通過(guò)注銷(xiāo)舊事件,注冊(cè)相應(yīng)操作的新事件進(jìn)行通信控制。流程圖如圖1所示。
圖1 通信控制流程圖
//發(fā)送GRIL命令
private void timer_base_Tick(object sender,EventArgs e)
{
//發(fā)送GRIL命令
//判斷是否接收發(fā)送
//發(fā)送異常處理
}
//接收數(shù)據(jù)并處理
private void serialPort_base(object sender,
SerialDataReceivedEventArgs e)
{
//接收數(shù)據(jù)
//數(shù)據(jù)檢查處理
//超時(shí)異常處理
}
//用戶新操作
privatevoid tabControlSelectedIndexChanged (object sender,EventArgs e)
{
//注銷(xiāo)舊事件、注冊(cè)新事件
//發(fā)送命令
}
通過(guò)串口向Topcon NET-G3A接收機(jī)發(fā)送命令,獲取國(guó)際海事電子協(xié)會(huì)(NMEA)數(shù)據(jù)信息,實(shí)現(xiàn)衛(wèi)星狀態(tài)的圖形化顯示。如圖2所示。
圖2 星空?qǐng)D
Topcon NET_G3A接收機(jī)為用戶提供了兩種測(cè)量模式:常規(guī)測(cè)量和預(yù)約測(cè)量。常規(guī)測(cè)量是指通過(guò)手動(dòng)操控讓接收機(jī)執(zhí)行開(kāi)關(guān)機(jī)和記錄觀測(cè)數(shù)據(jù);預(yù)約測(cè)量是通過(guò)發(fā)送GRIL命令列表,讓接收機(jī)在指定的時(shí)間執(zhí)行指定的操作。預(yù)約測(cè)量可以實(shí)現(xiàn)接收機(jī)無(wú)人值守自動(dòng)控制,特別適用于多時(shí)段觀測(cè)。預(yù)約測(cè)量模式如圖3所示。
圖3 測(cè)量控制
使用GRIL命令通過(guò)C#編程可以開(kāi)發(fā)專(zhuān)用的Topcon接收機(jī)控制程序。程序搭載在電腦等設(shè)備上,實(shí)現(xiàn)與接收機(jī)的接口通訊,能夠執(zhí)行參數(shù)設(shè)置、開(kāi)關(guān)機(jī)等任務(wù),針對(duì)高等級(jí)GNSS測(cè)量任務(wù)進(jìn)行預(yù)約測(cè)量,可以實(shí)現(xiàn)GNSS接收機(jī)無(wú)人值守自動(dòng)觀測(cè),有效地提高野外數(shù)據(jù)采集效率,為用戶提供了更高效便捷的解決方案,滿足不同測(cè)量任務(wù)的需要。
[1]TOPCON.TOPCON GRIL reference manual[EB/OL].http://www. topconpositioning.com.
[2]TOPCON.PC_CDU 參考手冊(cè)[EB/OL].http://www.topcon.com.cn.
[3]TOPCON.NET_G3A 使用手冊(cè)[EB/OL].http://www.topcon.com.cn.
[4]地殼運(yùn)動(dòng)監(jiān)測(cè)工程研究中心.地殼運(yùn)動(dòng)監(jiān)測(cè)技術(shù)規(guī)程[M]. 北京: 中國(guó)環(huán)境出版社,2014.
[5]NAGEL C,EVYEN B,GLYNN J. Professional C# 4 and.NET 4; C#高級(jí)編程[M].7 ed.李銘譯,北京:清華大學(xué)出版社,2010.
[6]王小科,王 軍. C# 開(kāi)發(fā)實(shí)戰(zhàn)1200例(第Ⅱ卷)[M].北京:清華大學(xué)出版社,2011.