胡廣浩,張昊楠,阮福明
(中海油田服務股份有限公司 物探事業(yè)部,天津 300450)
中國海油開展自主海上地震勘探裝備研發(fā)[1- 2],實現(xiàn)海洋地震拖纜采集裝備產(chǎn)業(yè)化應用并躋身國際先進行列。拖纜綜合導航系統(tǒng)是物探船的“大腦”,負責指揮和控制地震勘探作業(yè)過程?!昂M尽蓖侠|綜合導航系統(tǒng)由綜合導航系統(tǒng)軟件和導航數(shù)據(jù)采集平臺組成,導航數(shù)據(jù)采集平臺為船載各系統(tǒng)提供時間服務、采集外部設備數(shù)據(jù)并進行時間戳標定、根據(jù)導航算法計算的響炮時間實時同步觸發(fā)外部設備等,可見具備內(nèi)部時鐘并給數(shù)據(jù)時間戳標定(數(shù)據(jù)授時)是拖纜綜合導航系統(tǒng)工作的前提,而時間同步(時間授時)又是船載外部系統(tǒng)能與拖纜綜合導航系統(tǒng)協(xié)同工作的前提。
實現(xiàn)時間同步通常采用授時系統(tǒng)(時間服務器)的方式,目前市場上常見授時系統(tǒng)分為兩種,一種為通用設備,常用于Internet上提供用戶計算機時間的同步,受Internet網(wǎng)絡環(huán)境影響,同步實時性、精度通常不高;另一種是專用設備,通常作為專業(yè)組件內(nèi)置于專業(yè)設備之中,不能被其他系統(tǒng)所利用。針對物探船相對封閉的的局域網(wǎng)環(huán)境,本文基于VxWorks和現(xiàn)場可編程陣列(FPGA,field-programmable gate array)設計并實現(xiàn)了一套授時系統(tǒng),該系統(tǒng)既能作為時鐘基準用于內(nèi)部數(shù)據(jù)授時,又能作為時間服務器用于同步局域網(wǎng)系統(tǒng)時間。在本授時系統(tǒng)之上擴展的導航數(shù)據(jù)采集平臺,是“海途”拖纜綜合導航系統(tǒng)[3]的核心單元。
本系統(tǒng)采用歐式通用計算機總線(VME,versamodule eurocard)工控機箱作為授時系統(tǒng)各模塊搭載箱體,前插版和后插板基于VME背板總線互通互連,如圖1所示。其中,前插版為系統(tǒng)主控板,采用GE公司VG5單板計算機和VxWorks實時操作系統(tǒng);后插板為時鐘守護板,主要包括FPGA模塊、授時模塊及外部天線插座和網(wǎng)絡插座等。前插板和后插板采用通用型輸入輸出(GPIO,general purpose IO)組件接口進行通訊,物理上采用P2接插件連接。
圖1 授時系統(tǒng)結構框圖
全球定位系統(tǒng)(GPS,global positioning system)提供了全球、全天候、實時的精密導航和定位能力,同時提供了協(xié)調(diào)世界時(UTC,coordinate universal time)作為時間系統(tǒng),它是目前應用最為廣泛的主動式衛(wèi)星授時手段[4- 8]。
本文選用i-Lotus公司的M12M Timing GPS為授時模塊,為本授時系統(tǒng)提供時間參考基準。物探船的速度一般不超過8 m/s, M12M Timing GPS基于GPS衛(wèi)星C/A Code工作,最大能捕獲12顆GPS衛(wèi)星,動態(tài)速度達到515 m/s,秒脈沖(1 PPS,one pulse per second)定時精度達到12 ns@6-sigma,通訊協(xié)議支持NMEA 0183 v3.0,能極大地滿足海洋地震勘探的時間精度需要。M12M Timing GPS授時模塊以標準的晶體管-晶體管邏輯集成電路(TTL,transistor-transistor logic)電平形式每秒產(chǎn)生1 PPS信號的同時,會以RS232串口形式同步輸出一個與1 PPS相對應的整數(shù)秒UTC時間信息,串口UTC時間信息與TTL電平信號延遲在50 ms之內(nèi),時序如圖2所示。
圖2 輸出信號時序圖
通過主控板捕獲授時模塊輸出的UTC時間信息,將解析后的年月日時間信息交由系統(tǒng)主控板實時時鐘(RTC,real-time clock)維護,時分秒信息通過GPIO組件接口交由FPGA模塊維護,如圖3所示。
圖3 時間下行流程圖
在以太網(wǎng)局域網(wǎng)環(huán)境中,網(wǎng)絡時間協(xié)議(NTP,network time protocal)[9]是當前最常用的計算機系統(tǒng)時間同步協(xié)議。NTP時間同步協(xié)議基于復雜的最優(yōu)主時鐘選擇算法實現(xiàn),帶來的結果是時間同步收斂較慢,同時在同步過程中占用較多的系統(tǒng)資源[10-12],不能很好應對地震勘探中的實時性要求。簡單網(wǎng)絡時間協(xié)議(SNTP,simple network time protocal)在NTP基礎上做了優(yōu)化和改進,簡化了復雜的時間同步計算過程,輕量級設計使得其在保證同步精度的前提下,更加適合于局域網(wǎng)內(nèi)需要時間同步的計算機系統(tǒng)數(shù)量不是很多、單個時鐘源情形,SNTP在局域網(wǎng)范圍內(nèi)時間同步精度可以達到0.1 ms的精度[13-14],能滿足地震勘探做時間同步的精度需求。地震勘探中各系統(tǒng)處于相對封閉的局域網(wǎng)環(huán)境中,各系統(tǒng)構成相對比較固定,采用SNTP協(xié)議能簡化協(xié)議實現(xiàn)的復雜度,降低資源占用率和提升運行效率,可為其他應用最大留出系統(tǒng)資源。本系統(tǒng)(運行于系統(tǒng)主控板的應用軟件)為SNTP的服務端,其他系統(tǒng)為客戶端,如圖4所示。
圖4 時間上行流程圖
GPIO為作為通用輸入輸出接口,計算機通過對它的控制實現(xiàn)與外部設備通訊的目的,使用時可以直接根據(jù)外部設備的數(shù)據(jù)傳輸需要,通過對其進行軟件編程達到傳輸數(shù)據(jù)的目的[15]。本文GPIO組件的設計采用自定義的通信協(xié)議,讀數(shù)據(jù)、寫數(shù)據(jù)、地址等總線寬度均是8位,讀控制、寫控制等總線寬度均是1位,引腳定義如表1所示。在本系統(tǒng)中系統(tǒng)主控板為主設備,時鐘守護板上的FPGA模塊為從設備。
表1 GPIO物理引腳定義
1)GPIO讀數(shù)據(jù)時序:系統(tǒng)主控板通過GPIO從FPGA模塊獲取時間,通過25 引腳作為控制線,拉低電平的同時送出地址,延遲1 μs,延遲期間FPGA根據(jù)地址將相應的數(shù)據(jù)送到數(shù)據(jù)總線GPIO[16∶9],系統(tǒng)主控板讀取GPIO獲取數(shù)據(jù),最后將電平拉高,完成讀數(shù)據(jù)過程,時序如圖5所示。
圖5 GPIO讀數(shù)據(jù)時序
2)GPIO寫數(shù)據(jù)時序:系統(tǒng)主控板通過GPIO發(fā)送GPS時間(時分秒)數(shù)據(jù)給FPGA模塊,通過26 引腳作為控制線,拉低電平的同時送出地址和數(shù)據(jù),延遲1 μs,延遲期間時鐘守護板完成數(shù)據(jù)接收和處理,最后將電平拉高,完成寫數(shù)據(jù)過程,時序如圖6所示。
圖6 GPIO寫數(shù)據(jù)時序
隨著可編程技術的不斷發(fā)展和進步,F(xiàn)PGA被廣泛應用于各類電子設計領域。作為授時系統(tǒng)的核心,時鐘守護板FPGA模塊選用ALTERA公司的EP3C25F256芯片,它內(nèi)置50 MHz的晶振。作為時鐘守護板的核心部件,F(xiàn)PGA模塊采用模塊化設計思路[16],劃分為GPIO接口模塊、命令處理模塊、1 PPS監(jiān)測模塊和時鐘守護模塊,其功能如圖7所示。
圖7 FPGA功能框圖
1 PPS監(jiān)測用于對連續(xù)相鄰的1 PPS信號之間的時間間隔進行監(jiān)測,當連續(xù)一段時間內(nèi)相鄰1 PPS信號時間間隔都穩(wěn)定在正常閾值范圍內(nèi),則認為1 PPS為穩(wěn)定的有效信號,輸出給時鐘守護模塊,否則不輸出。1 PPS模塊通過邊沿檢測模塊、間隔計時器模塊、穩(wěn)定監(jiān)測模塊、開窗計時器模塊等組合設計,為時鐘守護模塊提供穩(wěn)定的1 PPS信號輸入。
1)邊沿檢測模塊:該模塊工作狀態(tài)分為檢測狀態(tài)和空閑狀態(tài)。令輸入信號為IPL,其延遲一個時鐘周期信號為DPL。系統(tǒng)開啟或復位后,進入檢測狀態(tài),若“IPL == 1 且DPL == 0”表示檢測到脈沖上升沿,輸出一個1 PPS信號給間隔計時器模塊和開窗計時器模塊,并跳轉(zhuǎn)到空閑狀態(tài)。在空閑狀態(tài)下,若“IPL == 0 且DPL == 1”表示檢測到脈沖下降沿,跳轉(zhuǎn)到檢測狀態(tài)。若檢測“IPL == DPL”超出500 ms,強制跳轉(zhuǎn)到檢測狀態(tài),以應對異常情況。
2)間隔計時器模塊:跟蹤連續(xù)1 PPS信號并計算相鄰兩個的時間間隔,輸出給穩(wěn)定監(jiān)測模塊,同時清空計時器開始下一輪間隔統(tǒng)計。
3)穩(wěn)定監(jiān)測模塊:連續(xù)跟蹤60 s時間內(nèi)相鄰1 PPS的間隔計時值都穩(wěn)定在正常閾值范圍內(nèi),認為1 PPS為穩(wěn)定的有效信號,輸出間隔計時的間隔平均值AVG和一個使能信號給開窗計時模塊。
4)開窗計時器模塊:檢測到使能信號有效時開始計時,當邊沿檢測模塊的1 PPS信號到來時,清空計時值。計時值為間隔平均值加1時,強制計時值減掉間隔平均值,同時繼續(xù)計時。當計時時間處于[AVG-5 μs∶AVG+5 μs]時,同時在此時間段內(nèi)由邊沿檢測模塊輸入的1 PPS信號有效時,則輸出1 PPS信號給時鐘守護模塊。
時鐘守護模塊是FPGA模塊的工作核心,包括GPS計時器、秒計時器、25 μs計時器、系統(tǒng)時鐘計時器。時鐘守護模塊以授時模塊為時鐘源,通過25 μs計時器、秒計時器、GPS計時器三級時間步進與外部授時模塊的時鐘對齊,設計如圖8所示。
圖8 時鐘守護模塊結構圖
1)25 μs計時器:每20 ns(50 MHz晶振)增加1計數(shù),每1 250計數(shù)清零并且秒計時器增加1計數(shù),當1 PPS信號到來時強制清零。
2)秒計時器:每25 μs計數(shù)周期增加1計數(shù),當1 PPS信號到來時清零。當1 PPS到來時候,理論計數(shù)應該為40 000,考慮到1 PPS信號丟失和本地系統(tǒng)時鐘偏差,設計上每到達40 002計數(shù)強制清零并且GPS計時器增加1,這樣把最大時間偏差控制在50 μs。
3)GPS計時器:當1 PPS信號到來增加1計數(shù),當1 PPS失效時,給出計數(shù)增加信號。當收到系統(tǒng)主控板發(fā)過來的GPS時間信息后,將此計數(shù)器值更新。
4)系統(tǒng)時鐘計時器:通過25 μs計時器、秒計時器、GPS計時器的組合,采用系統(tǒng)時鐘計時器維護當前系統(tǒng)時間。系統(tǒng)時鐘計時器= GPS計時器×40 000+秒計時器(單位25 μs)。
本系統(tǒng)作為物探船的唯一時間服務源,必須實時響應各客戶端的時間請求并具備能長時間穩(wěn)定的提供時間服務能力。VxWorks嵌入式實時操作系統(tǒng)[17]具有中斷延遲短、任務切換快、優(yōu)先級搶占等優(yōu)點,以其良好的可靠性和卓越的實時性被廣泛地應用在通信、航空航天、地球物理勘探[18]等高精尖技術及實時性要求極高的領域中,滿足物探船對時間服務實時性和可靠性的要求。
NTP和SNTP 協(xié)議支持主從、廣播模式。主從模式下,用戶向服務器提出服務請求根據(jù)所交換的信息計算兩地時間偏差和網(wǎng)絡延遲從中選擇認為最準確的時間偏差并調(diào)整本地的時鐘。廣播模式適用于高速的局域網(wǎng)中局域網(wǎng)中一個或多個服務器以固定的時間周期向某個多播地址廣播自己的時標客戶端,不計算時間偏差和網(wǎng)絡延遲直接用接收到的時標修正自己的時鐘忽略各種誤差[9,13]??紤]到物探船局域網(wǎng)環(huán)境中各個系統(tǒng)相對穩(wěn)定,本文采用主從模式,簡化服務端軟件設計,提高時間服務效率。
基于軟件工程模塊化設計思想,主控板軟件由GPIO協(xié)議驅(qū)動、授時卡控制任務、SNTP服務任務及時間服務鉤子(函數(shù))等組成,如圖9所示。GPIO協(xié)議驅(qū)動進行GPIO總線協(xié)議的實現(xiàn),提供上層應用與FPGA模塊通訊應用程序編程接口(API,application programming interface),授時卡控制任務對授時卡工作參數(shù)配置、工作狀態(tài)監(jiān)控、數(shù)據(jù)解析和時間分發(fā)等;SNTP服務任務及時間服務鉤子為外部系統(tǒng)提供時間服務。授時卡控制任務和SNTP服務任務需要訪問GPIO共享資源,設計互斥型信號量進行保護。
圖9 軟件模塊劃分圖
VxWorks通過板級支持包(BSP,board support package)[19-21]提供了底層GPIO的驅(qū)動,本系統(tǒng)通過實現(xiàn)自定義軟總線協(xié)議,為授時卡控制任務和SNTP服務任務提供操作FPGA模塊的API。
1)初始化過程GPIO_Init()關鍵代碼如下:
/* 創(chuàng)建VxWorks互斥型信號量,實現(xiàn)GPS時間分派任務和時間服務任務的對GPIO操作的互斥 */
semMID =
semMCreate(SEM_Q_PRIORITY|SEM_INVERSION_SAFE|SEM_DELETE_SAFE);
/* 設置GPIO工作方向,[9∶16]-in,other-out */
sysGpioDirSet(0x0000FF00);
2)讀GPIO過程關鍵代碼如下:
GPIO_Read(UINT8 addr, UINT8 *pData):
/* 加鎖 */
semTake(semMID,WAIT_FOREVER);
/* 配置地址 */
GPIOValue = (GPIOValue & 0xFF00FFFF) | ((addr<<16)&0x00FF0000);
/* 拉低GPIO 25 引腳 */
GPIOValue = GPIOValue & 0xEFFFFFFF;
sysGpioWrite(GPIOValue);
/* 延遲1us,在此期間FPGA模塊完成數(shù)據(jù)準備 */
sysUsDelay(1);
/* 獲取1Byte數(shù)據(jù) */
*pData = (sysGpioRead()>>8) & 0xFF;
/* 拉高GPIO 25 引腳(復位)*/
GPIOValue = GPIOValue | 0x10000000;
sysGpioWrite(GPIOValue);
/* 釋放鎖 */
semGive(semMID);
3)寫GPIO過程同讀GPIO過程類似,不再詳述。
VxWorks的網(wǎng)絡組件提供了基礎SNTP服務的框架支持,本文無需關注協(xié)議本身的具體實現(xiàn)過程,只需實現(xiàn)框架開放的用戶接口實現(xiàn)。首先通過配置VxWorks的操作系統(tǒng)映像,使SNTP服務以系統(tǒng)任務的形式運行[19-20]。VxWorks提供的SNTP服務是以鉤子(回調(diào))函數(shù)的形式支持用戶自定義的時間服務實現(xiàn),鉤子函數(shù)設置入口為sntpsClockSet(),鉤子函數(shù)需具備sntpsClockHook(int request, void *pBuffer)接口方式,其中參數(shù)request為請求的代碼,SNTP協(xié)議規(guī)定需要實現(xiàn)SNTPS_ID、SNTPS_RESOLUTION、SNPTS_REALTIME等3項,實現(xiàn)流程如圖10所示。
圖10 時間服務流程圖
實現(xiàn)SNTP服務端核心代碼如下:
/* 參考標識符 */
if(SNTPS_ID == request){
strcpy(pBuffer, "pps");
}
/* 時間精度 */
else if(SNTPS_RESOLUTION == request){
/* 由FPGA模塊維護的時鐘精度50000(ns) */
*((ULONG *)buffer) = (ULONG)50000;
}
/* 時間戳 */
else if(SNPTS_REALTIME == request){
/* 復位RTC的時分秒 */
rtcSetTime(0,0,0);
/* 通過RTC提供的API實現(xiàn)由RTC時間設置計算機系統(tǒng)時鐘 */
rtc_SetSysTimeFromRTC();
/* 獲取計算機系統(tǒng)時間,從1970年1月1日0時0分0秒至今經(jīng)歷時間 */
/* 其中,timeval為struct timespec類型 */
clock_gettime(CLOCK_REALTIME, &timeval));
/* 獲取FPGA時間(時分秒) */
/* FPGAClockTimeGet封裝了對GPIO_Read的調(diào)用 */
FPGAClockTimeGet(&clockTime);
/* FPGA秒部分 */
clockTimeSec = clockTime/40000;
/* FPGA納秒部分(FPGA計時單位25us,乘以40000為1秒) */
clockTimeNano = (clockTime -
clockTimeSec*40000)*25000;
/* SNTP服務器發(fā)送的時間需轉(zhuǎn)化為格林尼治標準時間 */
/* 即1970年1月1日0時0分0秒以來所經(jīng)過的時間,所以加上 */
/* 時間偏移常量SNTP_UNIX_OFFSET */
time = timeval.tv_sec +
SNTP_UNIX_OFFSET + clockTimeSec;
pTime = (ULONG *)buffer;
/* 封裝SNTP時間幀秒部分 */
*pTime++ = time;
/* 封裝SNTP時間幀納秒部分 */
*pTime =
sntpsNsecToFraction(clockTimeNano);
} else {...}
FPGA模塊以授時模塊為時鐘源,通過25 μs計時器、秒計時器、GPS計時器三級時間步進進行時鐘守護,軟件模塊實現(xiàn)SNTP服務端協(xié)議,根據(jù)SNTP協(xié)議特點,局域網(wǎng)內(nèi)系統(tǒng)同步的精度跟系統(tǒng)處理延遲無關,僅跟局域網(wǎng)環(huán)境有關。因此,本系統(tǒng)對授時系統(tǒng)的驗證只需要測試授時系統(tǒng)的時間守護精度,因此本系統(tǒng)的授時精度完全取決于FPGA模塊時鐘守護精度,跟軟件SNTP協(xié)議模塊無關。
授時模塊輸出的秒脈沖TTL電平直接傳遞給FPGA模塊,標記時間為TOD,輸出的串口UTC時間信息SOD經(jīng)由軟件模塊傳遞給FPGA模塊,F(xiàn)PGA模塊計算兩個信號時間差Delta,Delta的計時刻度為1 μs。 FPGA模塊在收到UTC時間信息后,將依據(jù)TOD和時間差Delta維護內(nèi)部時鐘。 從三層授時模型看,影響授時精度的是秒計時器精度,因此測量秒計時器精度即可得到授時精度。
M12M Timing GPS授時模塊以TTL電平形式每秒產(chǎn)生1 PPS信號的同時,會以RS232串口形式同步輸出一個與1 PPS相對應的整數(shù)秒UTC時間信息,串口UTC時間信息與TTL電平信號延遲在50 ms之內(nèi),時序如圖2所示。
將授時模塊以TTL電平形式每秒產(chǎn)生1 PPS信號、與1 PPS相對應的整數(shù)秒UTC時間信息接入到FPGA模塊,每來一個1 PPS則秒計時器清零,并上傳當前1 PPS到達時間,發(fā)送給軟件模塊進行記錄,最后分析1 PPS達到時間的數(shù)據(jù),連續(xù)運行4個小時左右。按照1 PPS達到時間幀的格式,提取微秒數(shù)據(jù),將微秒數(shù)據(jù)做直方圖統(tǒng)計,如圖11所示。
圖11 統(tǒng)計圖
根據(jù)直方圖統(tǒng)計的數(shù)據(jù),計算出微秒數(shù)據(jù)的標準差,標準差在概率統(tǒng)計中,反映組內(nèi)個體間的離散程度,計算所得平均值為999 999.005 5,計算所得標準差為0.074 116,數(shù)據(jù)離散程度低,靠近中心平均值,所以認為對于時間精度的截取,可以達到百納秒級,滿足自主海上地震勘探裝備授時精度不低于50 μs的精度要求。
在本授時系統(tǒng)之上擴展的導航數(shù)據(jù)采集平臺,是“海途”拖纜綜合導航系統(tǒng)[3]的核心單元,順利完成海上三維地震采集作業(yè),它的成功應用表明,該授時系統(tǒng)從時間授時精度、穩(wěn)定性上都能滿足海上地震勘探生產(chǎn)作業(yè)要求。
本文開發(fā)了基于VxWorks實時操作系統(tǒng)和FPGA的授時系統(tǒng),授時精度優(yōu)于50 μs,成功應用到海上拖纜地震勘探生產(chǎn)作業(yè)中,滿足物探船上對時間同步的精度要求和實時性要求。在不失實時性和精度的前提下,該系統(tǒng)采用了模塊塊化設計,良好的擴展能力,使之易于擴展出具有時間標定或時間服務的應用系統(tǒng)。