




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、高級嵌入式項目設計摘要:本文是基于PC-Linux開源的IEEE1588V2源碼,以及外接GPS作為時間源, PC-Linux平臺上GPS時間信息的輸入,實現NEMA碼格式的時間數據解析,通過以太網傳輸數據,并測試其與傳感器端的時間同步性能。關鍵字:IEEE1588V2;GPS;Linux;NEMA1 概述橋梁檢測就是要根據實際情況對橋梁進行評估,因此前期的主要工作就是從既有的現狀與特性著手,對要檢測的實體有一個總體把握,并且明確后面工作的方向。外觀檢查是橋梁檢測中一項非常重要的工作,通常如果產生了病害會有一些表象,我們通過外觀的檢查可以分析判斷這些病害產生的原因,提出整治措施并且有利于明確接
2、下來工作的重點。外觀檢查要求做到抓住重點,力求全面。一座橋梁相對每個人來說都是非常的龐大的,橋梁的細微的變化,人通過肉眼是很難察覺的。因此設計一套橋梁檢測系統是非常有必要,并且非常有意義的事情。在一座橋梁上可以通過在關鍵點安放傳感器,來獲取橋梁細微變化的數據,再上傳到PC機上,進行數據分析,根據分析的結果對橋梁做出相應的維護和整修。只有這樣才能確保橋梁安全,確保通行人員的生命安全。為了能從傳感器端獲取到的準確的數據,保證數據的有效性,需要的對各傳感器進行時間同步。本文主要是在服務端進行時間同步設計。設計思路是通過GPS獲取具有時間值的數據,在linux下對獲取到的數據按NEMA格式進行數據解析
3、,解析出時間值。再將解析出的時間值更新到linux系統,在linux下對PTP協議進行相關配置,通過以太網連接到傳感器端,進行時間同步。2 GPS數據NEMA解析本文設計采用的GPS型號是GY-GPS6MV1,供電3.3V,波特率9600bit/s,數據為8位,停止位1位,無奇偶校驗。linux下可以通過minicom來接受串口數據。minicom安裝步驟如下: # tar zxf minicom-2.2.tar.gz # cd minicom-2.2 # ./configure # make # make install minicom-2.2.tar.gz安裝包可以到網上下載到。按照上面的
4、命令進行一步一步操作,安裝minicom。安裝完成后通過指令"rpm -qa | grep minicom"來確認是否安裝了minicom,回車后會顯示minicom 的版本信息第一次運行minicom時需要輸入指令 minicom -s,對minicom中的參數進行設值。 啟動后,出現配置菜單:選serial port setup進入串口配置。輸入A配置串口驅動為/dev/ttyUSB*。因為GPS模塊采用的是USB轉串口,因此配置串口驅動是選擇ttyUSB*。通過ll /dev/ttyUSB*命令查看具體采用的哪個USB驅動。 輸入E配置速率為9600 8N1輸入F將
5、Hardware Flow Control 設為NO,回車退出。設置完成后選擇Save setup as dfl將當前設置保存為默認設置。在輸入minicon 即可直接進入,Minicom是基于窗口的。要彈出所需功能的窗口,可按下Ctrl-A,然后再按各功能鍵(a-z或A-Z)。例如:功能鍵X代表退出minicom。上圖為minicom配置串口參數的界面。 在PC機串口插入連接GPS的USB轉串口,通過minicom接收數據。接受到的數據如下圖。 下面對NEMA協議作簡要的介紹。 NMEA0183的GPS常用標準語句有很多種: $GPGGA,它的語句格式如:$GPGGA,092204.999,
6、4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,0000*1FGPGGA 包含14個字段,字段0為語句ID,字段1為UTC時間,時分秒格式為hhmmss.sss,字段13為校驗值,別的字段為經緯度,海拔等等。如果GPS輸出的幀結構為GPGGA格式時,就需要通過代碼獲得字段一的值,在編程的思路中按照逗號“,”來區分每一個字段,從而獲取需要的字段。 $GPGLL,它的語句格式為:$GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2DGPGLL包含8字段,其中時間字段處在字段5,格式為hhmmss.sss。$GPRMC,RM
7、C(Recommended Minimum Specific)推薦最小定位信息,語句格式為:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,A*50GPRMA包含17個字段,其中字段1為UTC時間,hhmmss.sss格式,字段9為UTC日期,格式為DDMMYY。 $GPZDA,UTC時間/日期及本地時區偏移量$GPZDA,<1>,<2>,<3>,<4>,*<5>CRLF <1>UTC 時間,格式hhmmss.ss(前導位數不足則補0) &l
8、t;2>UTC日期,01到31 <3>UTC月份,02到12 <4>UTC 年,格式yyyy <5>校驗和代碼編寫分析:linux C 代碼通過串口讀取gps數據,主要目的是獲取GPS基本信息,精度達到5位秒位,主要是獲取日期,時間。采用方法讀取當前100字節數據,分析GPRMC幀結構,獲得時間和年月日數據。由于NAME該協議采用ASCII 碼,其串行通信默認參數為:波特率9600bps,數據位8bit,開始位=1bit,停止位1bit,無奇偶校驗。在程序中對這些參數進行了相關的編寫。在GPS NEAM解析程序中采用void set_speed(int
9、 fd,int speed);設計波特率,對奇偶校驗位,數據位的設計采用的是int set_Parity(int fd,int databits,int stopbits,int parity);代碼中采用設計OpenDev函數,打開串口設備,int fd = open (Dev, O_RDWR |O_NONBLOCK );再打開數據的時候一定要加上O_NONBLOCK非阻塞狀態,不加上非阻塞狀態就收不到數據,在編寫代碼是的時候開始沒有加上非阻塞狀態,可以成功打開設備,但是不能從串口中讀取數據。 int OpenDev (char *Dev)int fd = open (Dev, O_RDWR
10、 |O_NONBLOCK );if (-1=fd) perror("Can't Open Serial Port"); return -1;elsereturn fd;代碼中采用的是解析$GPRMC數據格式通過 if(0x24=gpsdatai)&&(0x43=gpsdatai+5) ,語句來得到GPRMC數據串,其中ox24為$ ASCII 碼,0x43 為C ASCII 碼。下圖為NEMA協議解析后得到的數據。 通過linux下的date命令可以將時間值更新到linux系統中去。3 PTP協議IEEE1588簡稱PTP(Precision Tim
11、e Synchronization Protocol)精準時間同步協議。PTP同步原理PTP同步的基本原理如下:主、從時鐘之間交互同步報文并記錄報文的收發時間,通過計算報文往返的時間差來計算主、從時鐘之間的往返總延時,如果網絡是對稱的(即兩個方向的傳輸延時相同),則往返總延時的一半就是單向延時,這個單向延時便是主、從時鐘之間的時鐘偏差,從時鐘按照該偏差來調整本地時間,就可以實現其與主時鐘的同步。PTP協議定義了兩種傳播延時測量機制:請求應答(Requset_Response)機制和端延時(Peer Delay)機制,且這兩種機制都以網絡對稱為前提。請求應答機制下圖 請求應答機制實現過程 請求應
12、答方式用于端到端的延時測量。如上圖所示,其實現過程如下:(1) 主時鐘向從時鐘發送Sync報文,并記錄發送時間t1;從時鐘收到該報文后,記錄接收時間t2。(2) 主時鐘發送Sync報文之后,緊接著發送一個攜帶有t1的Follow_Up報文。(3) 從時鐘向主時鐘發送Delay_Req報文,用于發起反向傳輸延時的計算,并記錄發送時間t3;主時鐘收到該報文后,記錄接收時間t4。(4) 主時鐘收到Delay_Req報文之后,回復一個攜帶有t4的Delay_Resp報文。此時,從時鐘便擁有了t1t4這四個時間戳,由此可計算出主、從時鐘間的往返總延時為(t2 t1) + (t4 t3),由于網絡是對稱的
13、,所以主、從時鐘間的單向delay為(t2 t1) + (t4 t3) / 2。因此,從時鐘相對于主時鐘的時鐘偏差為:Offset = (t2 t1) - (t2 t1) + (t4 t3) / 2 = (t2 t1) - (t4 t3) / 2。 配置PTP協議將時鐘狀態設置成PTP_MASTER狀態本地時鐘通過BMC算法來決策哪個時鐘是最好的,并據此來決定端口的下一個狀態值。在PTP子域中每個時鐘獨立運行BMC算法。BMC算法應包含兩部分算法構成,即數據集比較算法和端口狀態決策算法。數據集比較算法中會比較到Ptpclock中的priority1和priority2。Priority 1:
14、絕對優先級;BMC可以根據該字段判斷GM選取順序;該字段為可配置。取值范圍0255;值越小,優先級越高。Prioirty 2: 用于微調的時鐘優先級;在不同鐘情況下的數據集比較中為倒數第二項;該字段也為可配置,取值范圍0255;值越小,優先級越高。為了是本地時鐘最有最高權限,將prioirty1和priority2都設置0.配置GM時鐘等級clockclass,將其值設置為6,表示同步于主參考定時源,不能成為從設備。下圖是將PTPclock初始化后,調用void displayRunTimeOpts(RunTimeOpts* rtOpts)函數,打印初始化值信息,其中可以clockclass設
15、置為6,priority1和priority2都設置為0.在狀態引擎函數protocol(RunTimeOpts *rtOpts, PtpClock *ptpClock)中默認是將時鐘進入初始化狀態中,為了使時鐘運行在主時鐘狀態,使用函數 toState(PTP_MASTER, rtOpts, ptpClock)進入狀態PTP_MASTER。 ptp協議獲取系統時間和發送Sync數據包流程ptpClock = ptpdStartup(argc, argv, &ret, &rtOpts) protocol(&rtOpts, ptpClock)toState(PTP_MAS
16、TER, rtOpts, ptpClock) doState(rtOpts, ptpClock)timerExpired(SYNC_INTERVAL_TIMER, ptpClock->itimer)issueSync(rtOpts, ptpClock)getTime(&internalTime)fromInternalTime(&internalTime,&originTimestamp)msgPackSync(ptpClock->msgObuf,&originTimestamp,ptpClock)其中getTime函數是獲取系統時間點,包括秒和納秒
17、,fromInternalTime函數是將獲取到的時間點裝入originTimestamp量種中,再通過msgPackSync函數發送出去。因為服務端沒有與傳感器端進行連接測試,無法看出效果。為了看出PTP所獲取的時間值,我根據PTP協議編寫了PTP所獲得系統的時間值Demo。主程序如下:typedef struct int seconds; int nanoseconds;TimeInternal;TimeInternal time;struct timeval tv;gettimeofday(&tv,0);time.seconds = tv.tv_sec;time.nanoseconds =tv.t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 彈簧銷售員崗位面試問題及答案
- 保險銷售主管崗位面試問題及答案
- 版權登記專員崗位面試問題及答案
- 數據標注質檢員崗位面試問題及答案
- 2025屆江蘇省睢寧縣高級中學化學高二下期末復習檢測試題含解析
- 山東省普通高中2025屆高一下化學期末考試模擬試題含解析
- 江西省八所重點中學2025屆化學高一下期末達標檢測試題含解析
- 內蒙獻血休假管理辦法
- 查賬專業團隊管理辦法
- 促進農業資金管理辦法
- 2025春季學期國開電大專科《管理學基礎》期末紙質考試總題庫
- 2025年浙江寧波華生國際家居廣場有限公司招聘筆試參考題庫含答案解析
- 自由搏擊培訓方案
- 防火門安裝工程操作管理規程
- (2025)全國交管12123學法減分考試題庫附答案
- 虛擬現實行業標準-深度研究
- T-ZHCA 025-2023 化妝品抗氧化人體測試方法
- 包皮環切術的健康宣教
- 班級優化大師使用培訓
- 醫院后勤保障與傳染病防控
- 北師版五年級下冊數學30道說理題
評論
0/150
提交評論