1 、引 言
在石油鉆井中,準確測量井眼姿態是進行井眼軌跡控制的前提。為此,本文充分結合單片機和MATLAB的優點,基于事件驅動的通信機制,提出了一種MATLAB環境下基于GUI的PC與片上系統C8051F060實時串行通信的可視化數據處理方法,并實現了對井眼姿態的監測。該方法極大地簡化了開發流程,提高了系統開發效率。更重要的是MATLAB的運算能力,為數據處理提供了保障。
2 、系統介紹
在本系統中,上位機是PC,下位機采用silabs公司推出的高速片上系統(SoC)C8051F060,使用三軸加速度計來敏感井眼姿態的變化。三軸加速度計兩兩正交,輸出正方向滿足右手螺旋法則,將三軸加速度的輸出值通過坐標間的相互轉換,利用三角關系式即可得到當前井眼空間姿態。由于PC串口與SoC的UART使用的是不同的電壓標準,所以兩者間通過電壓轉換芯片sp3223相連。三軸加速度敏感到的姿態信號經過調理電路和多路開關后,被SoC內部的A/D采樣,采集得到的數據存儲到片外存儲器。數據的存儲設備采用三星公司生產的超大容量存儲器K9K8G08U0M,滿足了系統長時間采集存儲的需要。
借助GUI開發的上位機軟件通過串口實現與下位機間的命令及數據傳輸,并對下位機采集的數據進行處理。
3 、硬件系統
C8051060是完全集成的混合信號片上系統型MCU,其內部CIP-51內核采用流水線結構,指令執行速度可達25 MIPS。使用如此高性能的單片機使得系統硬件電路設計大為簡化,單片機的UART、串口通過電壓轉換模塊SP3223與PC進行通信,而C8051060的雙串口為多系統的級聯提供了方便。數據采集功能由其內部的ADC完成,采集的數據通過口線存儲到片外的大容量存儲器K9K8G08U0M。
系統硬件框圖如圖1所示,其中實線為數據流,虛線為控制流。系統工作時,由上位機通過命令來控制下位機進行相應的操作。進行數據采集時,單片機控制電源給傳感器供電。各路信號經過各自的調理電路后被送入多路開關。單片機通過控制多路開關來選擇所要采樣的信號,并將其送入SoC內置的ADC進行采樣。采樣值被存儲后等待與上位機的通信。
4 、下位機軟件
下位機SoC接收到PC的下發消息后,通過串口中斷程序轉入相應的子程序,執行相應操作,最后返回一個握手信號做為狀態標志,確認命令是否被正確執行。
C8051060使用UART0與PC進行串行通信。將該串口的工作方式設置為方式3,具有硬件地址識別和多處理器通訊的功能,并且用定時器1作為波特率發生器,設定波特率為115 200 b/s,每幀數據占11位--1個起始位,8個數據位,1個可編程的第九位,1個結束位。
該軟件的子程序包括:清參數區、清數據區、發送參數、接收參數、開始采集、接收數據、復位等,各子程序的具體實現在此不進行詳細描述。軟件框圖如圖2所示。
5 、上位機軟件
本系統使用MATLAB提供的圖像用戶界面開發環境(GUIDE)完成界面設計及上位機軟件編制。GUI“所見即所得”的編程方式簡單明快,非常容易上手。本軟件借助MATLAB自帶的工具箱和系統中的Activex控件,編制了菜單欄和工具欄及各功能模塊,實現了命令、參數以及數據的雙向傳輸及顯示、數據的濾波處理及繪圖。
5.1 串行通信的實現
MATLAB本身是一個跨平臺的軟件,并不具備直接訪問硬件的能力,但是可以通過對serial類的操作,實現MATLAB對串口的支持。
要想在MATLAB中使用串行口,首先要借助serial類建立串口對象,并在使用前將該串口對象打開。數據傳輸完畢后,需關閉該串口對象,避免影響其他程序無法對該串口對象的使用。在系統不再使用該串口或者退出系統時,需要將該串口對象清除并從MATLAB工作空間清除,避免占用內存和影響其他系統使用。
在使用串口進行數據傳輸時,需要對串口進行讀寫操作。讀寫串口的方式分為二進制、文本兩種,類似于一般的文件操作。為了提高傳輸的速度,結合實際情況,本系統采用串口二進制異步讀寫方式。MATLAB程序通過串行口將命令發送到下位機,并通過串行口接收下位機上傳的握手信號及數據。
串行通信的部分源碼如下:
使用串口進行讀寫操作時,還需注意的一點就是對串口數據校驗方式屬性(Parity)的設置,如果該設置與下位機軟件不匹配,將造成讀寫錯誤而又難以查找原因。
5.2 GUI界面中activx控件的使用
在MATLAB的GUIDE中所提供的基本控件非常少,難以滿足本系統的需要。因此本系統調用系統中的Activex控件FlexArray、FlexGrid實現了數據在表格中的顯示,調用axes控件實現了數據圖形繪制。
本程序中用到的控件(包括Activex控件),在其創建及屬性設置過程中,使用了全程序法、GUIDE屬性法和兩者相結合的方法。全程序法是只借助MATLAB提供的句柄功能創建及設置控件。而GUIDE屬性法類似VB的設計風格,容易上手,但是這種方法使得m文件過于依賴fig文件。兩者結合的方法使得設計更加靈活。下面以GUIDE屬性法和全程序法相結合的方法創建、調用FlexArray控件為例,講解本系統中的數據顯示部分。基本控件的操作比較簡單,在此不進行詳述。
FlexArray控件的全稱是,該控件的文件即C:\WINDOWS\System32\VSFLEX3.OCX,如果本機上沒有的話,可以到網上下載,或到其他機子上復制,然后使用regsvr32.exe注冊即可。做好這些準備工作之后,點擊GUI左側的工具箱中的Activex按鈕后,在設計區拖拉,彈出“Select an Activex Control”對話框,對話框中的“Activex Control List”列表框列出了在當前計算機上注冊的所有Activex控件,在該列表框中選中 控件,單擊“Create”按鈕,該控件便在GUI的空白編輯區被創建。
創建成功后,GUI自動為該控件生成的句柄做為圖形窗口句柄handles的成員被存儲,對于第N個被創建的Activex控件,其句柄為handles.activexN,以后借用該句柄就可以通過函數來調用對應的Activex控件。控件的屬性設置可以通過雙擊控件或者右鍵菜單打開屬性設置窗口來進行,也可以通過在m文件中通過set命令設定。通過get可以獲取Activex控件的屬性。
要讀取或設定FlexArray控件表格中某單元格的內容時,首先通過handles.activexl.row=i;handles.activexl.col=j;語句指向目標單元格,然后通過fa=get(handles.activexl,′text′);fa=str2num(fa);語句將目標單元格中的內容轉換為數值賦給變量fa.通過set命令設置目標單元格中的內容,也可以設置固定欄標題,只是注意對于行固定欄的行號是0,列固定欄的列號是0。
5.3 濾波處理及圖形繪制
如果使用采集到的傳感器輸出數據直接計算井眼姿態,將會造成較大的誤差。主要原因是:(1)在鉆進中,由于鉆進環境惡劣,振動和旋轉都會對傳感器輸出造成較大影響;(2)電路本身的電氣噪聲,對采集數據存在一定的影響。
在消除旋轉對實驗數據的影響后,再借助MATLAB語言實現濾波功能,具體實現流程如下:根據實驗數據,在MATLAB的FDAtool工具箱中設計濾波器,濾波效果與實際情況吻合后,將該濾波器的傳遞函數使用MATLAB語言實現,添加到“數據處理”功能按鈕對應的程序中,完成數據處理的全部功能。
將濾波前后的數據借助axeS控件繪圖顯示,可以看到數據處理前后對真實井眼姿態描述的差異。
6 、應用實例
本系統已經應用于智能旋轉導向系統的室內實驗,圖3是在室內直井鉆井平臺上進行模擬鉆井實驗的鉆進過程中,利用本軟件進行操作的截圖。該圖較好地展示了該軟件的功能:數據、命令的雙向傳輸及顯示、數據的后續處理功能。圖中曲線顯示區域黑線代表的是采集到的y軸重量加速度的數值GY,紅線代表的是經過數據處理后的GY,不難發現,后者的波動范圍明顯縮小,曲線更為光滑。然后利用處理過的三軸加速度數值,對鉆井工具的空間姿態角進行計算,能夠得到與實際情況較為吻合的空間姿態,為礦井的鉆進中空間姿態的準確測量,提供了一個可供借鑒和參考的方法,能夠使鉆井過程中減少停鉆次數,為提高鉆井效率和鉆井安全增加了保證。
7 、結論
具有數據處理、串口操作控制功能和Activex控件合理調用功能的上位機軟件,再加上高性能片上系統C8051F060作為主芯片的井下電路,兩者組成了模擬鉆井姿態采集處理系統,在115200的串口波特率下,實現了對多路井下信號的采集、處理,從實驗結果來看,井斜角、工具面角等空間角度的計算結果與實際情況較為符合,完全適用于鉆井工具的空間姿態測量應用。強大的數據處理功能,再加上人機操作界面,這使得MATLAB在工業現場監控方面將獲得更廣闊的應用。
-
matlab
+關注
關注
185文章
2977瀏覽量
230582 -
存儲器
+關注
關注
38文章
7496瀏覽量
163926 -
soc
+關注
關注
38文章
4173瀏覽量
218404
發布評論請先 登錄
相關推薦
評論