陳家林,賈 濤
武漢工程大學電氣信息學院,湖北 武漢 430205
油田一般位于氣候惡劣、位置偏遠的地區,而且作業井口分布較為分散,不利于集中管理和監測.同時油田生產過程中經常會出現各種故障,如人為偷盜、油管泄漏等,若沒有及時發現類似情況,不僅會降低油井產量及產油質量,還會引起安全事故.因此設計一套性能成熟、功能完善的油井監測系統對當前油井生產和管理的意義越來越重要.
油井監測系統通常由井下壓力計、地面傳輸儀、數據遠傳單元與數據處理平臺4個部分組成.地面傳輸儀作為整個系統的數據樞紐,起著關鍵作用.地面傳輸儀通過電纜接頭和485總線接口將井下壓力計采集的實時數據進行傳輸和接收,并將接收的數據進行本地存儲的同時與遠程數據傳輸單元(Data Transfer Unit,以下簡稱:DTU)進行數據交互,即將本地采集的數據信息上傳至后臺服務器內進行分析和處理.目前油田上使用的數據傳輸儀都是基于工業計算機或者工控集成設備而實現,在體積、功耗以及成本上都超出了預期.因此當前需要設計一種能夠實現地面傳輸儀基本功能的同時在功耗、體積和成本上進行裁剪的新型地面傳輸儀.
地面傳輸儀的硬件組成如圖1所示.

圖1 傳輸儀硬件框架圖Fig.1 Ground transmission device hardware framework
本設計選擇STM32L152作為主控制器. STM32L152是意法半導體公司生產的STM32系列低功耗微控制器,控制器基于超低功耗、高數據安全性、高效能的ARM Cortex-M3內核,同時采用意法半導體獨有的兩大節能技術,使其具有多種低功耗模式選擇,低功耗運行模式電流為10.4 μA.該控制器能夠滿足實際的工業應用中低功耗的需求.
傳輸儀的串行通信接口采用了晶體管-晶體管邏輯(Transistor-Transistor Logic,簡稱:TTL)電路轉485電路進行設計.利用STM32L152提供的USART外設資源作為串行通信接口,還需要將其TTL電平信號轉為RS485接口標準的電平信號.為了降低通信時的功耗大小,通信模塊采用的是SP3072EEN接口芯片.SP3072EEN芯片工作電源電壓為3.3 V,電流為800 μA.SP3072EEN采用半雙工通訊方式,與單片機引腳連接簡單,其連接如圖2所示.

圖2 485接口轉換電路Fig.2 485 interface converter circuit diagram
為了滿足地面傳輸儀較大數據容量存儲、運行穩定性以及較低功耗等要求,設計時選擇Windbond公司的W25Q64串行Flash芯片作為傳輸儀的數據存儲單元.W25Q64提供了64 Mbytes的存儲空間,存儲空間由32 678頁每頁大小為256 bytes的空間組成,同一時刻最多可編寫256 bytes,同時W25Q64提供了4KB、32KB、64KB以及全部擦出共4種靈活的擦出方式.W25Q64提供SPI總線作為通信接口,其接線電路如圖3所示.

圖3 存儲器W25Q64連接電路Fig.3 Memory W25Q64 connection circuit
μC/OS-II[1]作為一款源碼開發的嵌入式操作系統,是由Labrosse Jean J于1992年編寫的一個嵌入式多任務操作系統,憑借其足夠的穩定性和安全性在數十年間得到了許多機構的標準認證.
STM32L152是基于Cortex-M3架構的新型ARM內核,通過其提供的systick中斷和PendSV中斷可以更方便的實現μC/OS-Ⅱ的移植工作.移植工作主要完成與CPU相關的源文件的改寫以及硬件的底層中斷的封裝處理,即os_cpu_c.c、os_cpu_a.asm和os_cpu.h源文件.os_cpu.h文件主要包含了與編譯器相關的數據類型定義和函數說明,需要根據編譯器環境進行修改.os_cpu_c.c文件主要是根據CPU的大小端存儲模式以及堆棧增長方向等與硬件密切相關的處理器要求來實現任務堆棧的初始化函數.os_cpu_a.asm文件包括了底層匯編代碼,需要根據具體的硬件匯編指令集以及系統中斷實現臨界區函數和任務上下文切換函數.
地面傳輸儀作為井下至地面數據有線傳輸的核心設備,在數據傳輸過程中的穩定性、實時性、正確率以及傳輸速度等指標都要具備一定的要求.考慮到傳輸儀與井下儀器通過電纜和RS485總線相連,其傳輸速度和穩定性有著一定保證.但是數據傳輸以及處理過程中的實時性和數據報錯率還需要進行軟件設計,盡可能提高實時性并降低報錯率.本設計基于μC/OS-II的平臺,利用系統調用接口提供的消息郵箱以及消息隊列共同實現數據傳輸的實時性.傳輸儀的通信系統邏輯結構如圖4所示.

圖4 系統邏輯結構圖Fig.4 Structure diagram of system on Modbus protocol
與一般單片機系統的軟件設計的不同在于本設計基于多任務多線程的方式[2].傳輸儀的功能由多個用戶任務通過OS內核調度而實現,其中作為實現數據傳輸的功能,本設計使用了2個用戶任務來實現:①從站輪詢任務,主要負責Modbus從站的數據包接收、處理以及回復;②主站管理任務,負責將系統內主站請求進行封裝、發送以及接收.同時底層串口和定時器(TIM)中斷函數作為執行機構,實現具體的數據發送和接收以及數據幀識別,通過使用消息郵箱機制實時將數據接收和發送情況反映到OS內核和用戶任務中,并通過實時操作系統內核調度和中斷響應來提高系統的實時性能.
在主站工作過程中,為了提高數據的實時發送和處理,本設計采用了消息隊列機制作為發送幀緩沖區.由各個主站請求的任務發送消息至隊列中,任務本身則繼續執行自身代碼,而不是等待結果.消息最終通過隊列傳遞到主站管理任務中進行集中處理和發送.有主站請求的任務就不必在死循環中等待結果,而可以執行自身剩下代碼完成其他工作.
與DTU和上位機服務器通信過程中,地面傳輸儀作為Modbus從站.地面傳輸儀需要實時響應來自總線上主站的數據請求信息,并將收集的數據通過DTU 傳遞給后臺服務器.上電后首先需要初始化Modbus協議通信中使用到的串口和定時器驅動,同時還需要配置設備ID、端口以及啟動從站功能,最后進入狀態輪詢階段,等待來自主站的請求[3].
Modbus從站基于μC/OS-II的平臺而設計,使用一個μC/OS-II的用戶任務完成從站輪詢和處理工作[4].通過使用μC/OS-II內的消息郵箱作為從站的事件機制,將從站中的事件消息EXECUTE、RECEIVED、SEND以及READY作為一個的郵箱信息,利用μC/OS-II提供的請求郵箱信號函數OSMboxPend和發送郵箱信號函數OSMboxPost實現,并最終通過內核的多任務管理調度對從站進行狀態輪詢以及通過底層中斷進行實際的數據幀接收和發送操作共同實現從站功能.從站輪詢處理的程序流程如圖5所示.
地面傳輸儀作為Modbus主站,需要與多個井下儀器進行數據傳輸并對其進行功能設置.在基于Modbus協議的通信過程中,主站每次發出的數據幀在請求時間周期、數據幀內容以及處理要求上都不太一致,每一請求的數據幀都需要根據具體從站設備的參數信息以及協議規定的寄存器地址和內容來制定[5].
主站設計時使用μC/OS-II平臺上的一個用戶任務完成Modbus主站功能.考慮到系統整體實時性和傳輸效率,利用μC/OS-II提供的消息隊列作為任務間數據共享機制,將主站請求幀的緩沖區地址作為共享數據傳遞給主站任務中,從而實現主站請求的集中管理、實時發送和有序處理.主站任務流程如圖6所示.

圖5 從站輪詢處理流程圖Fig.5 Slave polling process flowchart

圖6 主站任務流程圖Fig.6 Task of master flowchart
主站請求流程如圖7所示,首先調用OSMemGet()函數向系統內存管理申請一塊用來放置Modbus請求幀的臨時緩沖區,其次按照具體功能碼和寄存器地址等信息填充和封裝Modbus請求幀.最后通過消息隊列機制將緩沖區地址傳遞給主站任務完成請求幀的發送與接收[6].

圖7 主站請求流程圖Fig.7 Request of master flowchart
地面傳輸儀需要及時將接收到的井下數據進行本地存儲,并通過按鍵和顯示屏提供現場的數據訪問.數據存儲占用一個用戶任務,通過建立一個臨時內存緩沖塊暫時存放實時接收的數據,待緩沖塊被填滿后則進行一次本地數據寫入存儲器的操作[7].利用μC/OS-II提供的消息郵箱以及資源互斥信號量功能實現本地存儲器的讀寫互斥處理,本地數據存儲流程如圖8所示.

圖8 本地數據存儲流程圖Fig.8 Local data storage flowchart
為了驗證地面傳輸儀的性能,以傳輸儀作為中間設備通過485總線與前端采集設備和后臺處理平臺連接,以PC機上Modbus slave軟件作為數據傳輸的從設備,模擬井下儀器,同時以DTU遠程模塊和組態軟件作為數據傳輸的主設備,分別作為遠程單元和后臺服務器進行測試.地面傳輸儀與slave的串行通信方式設置為:波特率9 600 bits/s,無校驗,1位停止位.并按照Modbus協議的規定進行主站數據幀發送,具體按照表1參數設置.傳輸儀讀取從設備的周期為8 s,按照Modbus協議中的0x03讀寫功能進行數據讀取,其通信過程如圖9所示.

表1 從設備實驗參數Table 1 Measuring data

圖9 傳輸儀與從站通信過程Fig.9 Communication process between master and slave
地面傳輸儀同時還與DTU數據遠程傳輸單元進行數據傳輸,實現數據的服務器上傳.在此通信過程中,地面傳輸儀作為Modbus從站, DTU與后臺服務器作為Modbus主站,雙方波特率為9 600 bits/s.主站通過發送讀取命令進行實時數據交互,最終將傳輸儀上的本地數據存儲至后臺服務器內的數據庫中,接收數據如圖10所示.

圖10 服務器實時接收數據顯示Fig.10 Display of real-time data received
油井數據地面傳輸儀通過模擬油井自動監測系統的實驗,很好地完成了井內數據參數(壓力、溫度)從井內到后臺服務器的傳輸功能,實現了Modbus主從站同時工作,實時進行數據傳輸與存儲.傳輸儀可以同時在總線中連接多個采集儀器,進行實時有序的數據傳輸且讀取數據的速度和準確性都有保證,可以滿足油井自動監控系統的要求,達到了設計的目的.
致 謝
感謝武漢益控科技有限公司對本研究提供的資金支持.
[1] [美]拉伯羅斯.嵌入式實時操作系統μC/OS-II[M].2版.邵貝貝,譯.北京:北京航空航天大學出版社,2003.
LABROSSE Jean J.MicroC/OS-II the real time kernel[M].2nd Edition.SHAO Beibei.Beijing:Beijing University of Aeronautics and Astronautics Press,2003.(in Chinese)
[2] 方羽,梁廣瑞,羅覃東.基于μC/OS-II的Modbus協議的實現[J].裝備制造技術,2009(1):83-84,94.
FANG Yu, LIANG Guang-rui, LUO Qin-dong.The implementation of Modbus protocol based on μC/OS-II[J].Equipment Manufacturing Technology,2009(1):83-84,94.(in Chinese)
[3] 李振東.Modbus協議的工業PLC監控儀表設計[J].單片機與嵌入式系統應用, 2012,12(4):5-8.
LI Zhendong.Modbus protocol monitoring in strument for industrial PLC[J].Microcontroller and Embedded Systems,2012,12(4):5-8.(in Chinese)
[4] 羅湘,余臻.基于Modbus協議的單片機數據采集[J].工業控制計算機,2009,22(6):75-76.
LUO Xiang,YU Zhen.Microcomputer’s data acquisition based on Modbus protocol[J].Industrial Control Computer,2009,22(6):75-76.(in Chinese)
[5] 王家國,田芮.基于Modbus總線協議的工業鍋爐監控系統設計[J].化工自動化及儀表,2013,40(1):70-71,93.
WANG Jia-guo, TIAN Rui.Design of boiler monitoring system based on Modbus protocol[J].Control and Instruments in Chemical Industry,2013,40(1):70-71,93.(in Chinese)
[6] 李祁,王鳳芹,張燕紅.嵌入式實時操作系統μC/OS-Ⅱ在STM32開發板上的應用[J].計算機與數字工程,2014,42(1):164-168.
LI Qi,WANG Fengqin,ZHANG Yanhong.Application of real-time embeddedμC/OS-II on STM32[J].Computer and Digital Engineering,2014,42(1):164-168.(in Chinese)
[7] 任哲.嵌入式實時操作系統μC/OS-II原理及應用[M].北京:北京航空航天大學出版社,2005.