陳家林,賈 濤
武漢工程大學電氣信息學院,湖北 武漢 430205
油田一般位于氣候惡劣、位置偏遠的地區(qū),而且作業(yè)井口分布較為分散,不利于集中管理和監(jiān)測.同時油田生產(chǎn)過程中經(jīng)常會出現(xiàn)各種故障,如人為偷盜、油管泄漏等,若沒有及時發(fā)現(xiàn)類似情況,不僅會降低油井產(chǎn)量及產(chǎn)油質(zhì)量,還會引起安全事故.因此設計一套性能成熟、功能完善的油井監(jiān)測系統(tǒng)對當前油井生產(chǎn)和管理的意義越來越重要.
油井監(jiān)測系統(tǒng)通常由井下壓力計、地面?zhèn)鬏攦x、數(shù)據(jù)遠傳單元與數(shù)據(jù)處理平臺4個部分組成.地面?zhèn)鬏攦x作為整個系統(tǒng)的數(shù)據(jù)樞紐,起著關鍵作用.地面?zhèn)鬏攦x通過電纜接頭和485總線接口將井下壓力計采集的實時數(shù)據(jù)進行傳輸和接收,并將接收的數(shù)據(jù)進行本地存儲的同時與遠程數(shù)據(jù)傳輸單元(Data Transfer Unit,以下簡稱:DTU)進行數(shù)據(jù)交互,即將本地采集的數(shù)據(jù)信息上傳至后臺服務器內(nèi)進行分析和處理.目前油田上使用的數(shù)據(jù)傳輸儀都是基于工業(yè)計算機或者工控集成設備而實現(xiàn),在體積、功耗以及成本上都超出了預期.因此當前需要設計一種能夠?qū)崿F(xiàn)地面?zhèn)鬏攦x基本功能的同時在功耗、體積和成本上進行裁剪的新型地面?zhèn)鬏攦x.
地面?zhèn)鬏攦x的硬件組成如圖1所示.
圖1 傳輸儀硬件框架圖Fig.1 Ground transmission device hardware framework
本設計選擇STM32L152作為主控制器. STM32L152是意法半導體公司生產(chǎn)的STM32系列低功耗微控制器,控制器基于超低功耗、高數(shù)據(jù)安全性、高效能的ARM Cortex-M3內(nèi)核,同時采用意法半導體獨有的兩大節(jié)能技術(shù),使其具有多種低功耗模式選擇,低功耗運行模式電流為10.4 μA.該控制器能夠滿足實際的工業(yè)應用中低功耗的需求.
傳輸儀的串行通信接口采用了晶體管-晶體管邏輯(Transistor-Transistor Logic,簡稱:TTL)電路轉(zhuǎn)485電路進行設計.利用STM32L152提供的USART外設資源作為串行通信接口,還需要將其TTL電平信號轉(zhuǎn)為RS485接口標準的電平信號.為了降低通信時的功耗大小,通信模塊采用的是SP3072EEN接口芯片.SP3072EEN芯片工作電源電壓為3.3 V,電流為800 μA.SP3072EEN采用半雙工通訊方式,與單片機引腳連接簡單,其連接如圖2所示.
圖2 485接口轉(zhuǎn)換電路Fig.2 485 interface converter circuit diagram
為了滿足地面?zhèn)鬏攦x較大數(shù)據(jù)容量存儲、運行穩(wěn)定性以及較低功耗等要求,設計時選擇Windbond公司的W25Q64串行Flash芯片作為傳輸儀的數(shù)據(jù)存儲單元.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]作為一款源碼開發(fā)的嵌入式操作系統(tǒng),是由Labrosse Jean J于1992年編寫的一個嵌入式多任務操作系統(tǒng),憑借其足夠的穩(wěn)定性和安全性在數(shù)十年間得到了許多機構(gòu)的標準認證.
STM32L152是基于Cortex-M3架構(gòu)的新型ARM內(nèi)核,通過其提供的systick中斷和PendSV中斷可以更方便的實現(xiàn)μC/OS-Ⅱ的移植工作.移植工作主要完成與CPU相關的源文件的改寫以及硬件的底層中斷的封裝處理,即os_cpu_c.c、os_cpu_a.asm和os_cpu.h源文件.os_cpu.h文件主要包含了與編譯器相關的數(shù)據(jù)類型定義和函數(shù)說明,需要根據(jù)編譯器環(huán)境進行修改.os_cpu_c.c文件主要是根據(jù)CPU的大小端存儲模式以及堆棧增長方向等與硬件密切相關的處理器要求來實現(xiàn)任務堆棧的初始化函數(shù).os_cpu_a.asm文件包括了底層匯編代碼,需要根據(jù)具體的硬件匯編指令集以及系統(tǒng)中斷實現(xiàn)臨界區(qū)函數(shù)和任務上下文切換函數(shù).
地面?zhèn)鬏攦x作為井下至地面數(shù)據(jù)有線傳輸?shù)暮诵脑O備,在數(shù)據(jù)傳輸過程中的穩(wěn)定性、實時性、正確率以及傳輸速度等指標都要具備一定的要求.考慮到傳輸儀與井下儀器通過電纜和RS485總線相連,其傳輸速度和穩(wěn)定性有著一定保證.但是數(shù)據(jù)傳輸以及處理過程中的實時性和數(shù)據(jù)報錯率還需要進行軟件設計,盡可能提高實時性并降低報錯率.本設計基于μC/OS-II的平臺,利用系統(tǒng)調(diào)用接口提供的消息郵箱以及消息隊列共同實現(xiàn)數(shù)據(jù)傳輸?shù)膶崟r性.傳輸儀的通信系統(tǒng)邏輯結(jié)構(gòu)如圖4所示.
圖4 系統(tǒng)邏輯結(jié)構(gòu)圖Fig.4 Structure diagram of system on Modbus protocol
與一般單片機系統(tǒng)的軟件設計的不同在于本設計基于多任務多線程的方式[2].傳輸儀的功能由多個用戶任務通過OS內(nèi)核調(diào)度而實現(xiàn),其中作為實現(xiàn)數(shù)據(jù)傳輸?shù)墓δ埽驹O計使用了2個用戶任務來實現(xiàn):①從站輪詢?nèi)蝿?,主要負責Modbus從站的數(shù)據(jù)包接收、處理以及回復;②主站管理任務,負責將系統(tǒng)內(nèi)主站請求進行封裝、發(fā)送以及接收.同時底層串口和定時器(TIM)中斷函數(shù)作為執(zhí)行機構(gòu),實現(xiàn)具體的數(shù)據(jù)發(fā)送和接收以及數(shù)據(jù)幀識別,通過使用消息郵箱機制實時將數(shù)據(jù)接收和發(fā)送情況反映到OS內(nèi)核和用戶任務中,并通過實時操作系統(tǒng)內(nèi)核調(diào)度和中斷響應來提高系統(tǒng)的實時性能.
在主站工作過程中,為了提高數(shù)據(jù)的實時發(fā)送和處理,本設計采用了消息隊列機制作為發(fā)送幀緩沖區(qū).由各個主站請求的任務發(fā)送消息至隊列中,任務本身則繼續(xù)執(zhí)行自身代碼,而不是等待結(jié)果.消息最終通過隊列傳遞到主站管理任務中進行集中處理和發(fā)送.有主站請求的任務就不必在死循環(huán)中等待結(jié)果,而可以執(zhí)行自身剩下代碼完成其他工作.
與DTU和上位機服務器通信過程中,地面?zhèn)鬏攦x作為Modbus從站.地面?zhèn)鬏攦x需要實時響應來自總線上主站的數(shù)據(jù)請求信息,并將收集的數(shù)據(jù)通過DTU 傳遞給后臺服務器.上電后首先需要初始化Modbus協(xié)議通信中使用到的串口和定時器驅(qū)動,同時還需要配置設備ID、端口以及啟動從站功能,最后進入狀態(tài)輪詢階段,等待來自主站的請求[3].
Modbus從站基于μC/OS-II的平臺而設計,使用一個μC/OS-II的用戶任務完成從站輪詢和處理工作[4].通過使用μC/OS-II內(nèi)的消息郵箱作為從站的事件機制,將從站中的事件消息EXECUTE、RECEIVED、SEND以及READY作為一個的郵箱信息,利用μC/OS-II提供的請求郵箱信號函數(shù)OSMboxPend和發(fā)送郵箱信號函數(shù)OSMboxPost實現(xiàn),并最終通過內(nèi)核的多任務管理調(diào)度對從站進行狀態(tài)輪詢以及通過底層中斷進行實際的數(shù)據(jù)幀接收和發(fā)送操作共同實現(xiàn)從站功能.從站輪詢處理的程序流程如圖5所示.
地面?zhèn)鬏攦x作為Modbus主站,需要與多個井下儀器進行數(shù)據(jù)傳輸并對其進行功能設置.在基于Modbus協(xié)議的通信過程中,主站每次發(fā)出的數(shù)據(jù)幀在請求時間周期、數(shù)據(jù)幀內(nèi)容以及處理要求上都不太一致,每一請求的數(shù)據(jù)幀都需要根據(jù)具體從站設備的參數(shù)信息以及協(xié)議規(guī)定的寄存器地址和內(nèi)容來制定[5].
主站設計時使用μC/OS-II平臺上的一個用戶任務完成Modbus主站功能.考慮到系統(tǒng)整體實時性和傳輸效率,利用μC/OS-II提供的消息隊列作為任務間數(shù)據(jù)共享機制,將主站請求幀的緩沖區(qū)地址作為共享數(shù)據(jù)傳遞給主站任務中,從而實現(xiàn)主站請求的集中管理、實時發(fā)送和有序處理.主站任務流程如圖6所示.
圖5 從站輪詢處理流程圖Fig.5 Slave polling process flowchart
圖6 主站任務流程圖Fig.6 Task of master flowchart
主站請求流程如圖7所示,首先調(diào)用OSMemGet()函數(shù)向系統(tǒng)內(nèi)存管理申請一塊用來放置Modbus請求幀的臨時緩沖區(qū),其次按照具體功能碼和寄存器地址等信息填充和封裝Modbus請求幀.最后通過消息隊列機制將緩沖區(qū)地址傳遞給主站任務完成請求幀的發(fā)送與接收[6].
圖7 主站請求流程圖Fig.7 Request of master flowchart
地面?zhèn)鬏攦x需要及時將接收到的井下數(shù)據(jù)進行本地存儲,并通過按鍵和顯示屏提供現(xiàn)場的數(shù)據(jù)訪問.數(shù)據(jù)存儲占用一個用戶任務,通過建立一個臨時內(nèi)存緩沖塊暫時存放實時接收的數(shù)據(jù),待緩沖塊被填滿后則進行一次本地數(shù)據(jù)寫入存儲器的操作[7].利用μC/OS-II提供的消息郵箱以及資源互斥信號量功能實現(xiàn)本地存儲器的讀寫互斥處理,本地數(shù)據(jù)存儲流程如圖8所示.
圖8 本地數(shù)據(jù)存儲流程圖Fig.8 Local data storage flowchart
為了驗證地面?zhèn)鬏攦x的性能,以傳輸儀作為中間設備通過485總線與前端采集設備和后臺處理平臺連接,以PC機上Modbus slave軟件作為數(shù)據(jù)傳輸?shù)膹脑O備,模擬井下儀器,同時以DTU遠程模塊和組態(tài)軟件作為數(shù)據(jù)傳輸?shù)闹髟O備,分別作為遠程單元和后臺服務器進行測試.地面?zhèn)鬏攦x與slave的串行通信方式設置為:波特率9 600 bits/s,無校驗,1位停止位.并按照Modbus協(xié)議的規(guī)定進行主站數(shù)據(jù)幀發(fā)送,具體按照表1參數(shù)設置.傳輸儀讀取從設備的周期為8 s,按照Modbus協(xié)議中的0x03讀寫功能進行數(shù)據(jù)讀取,其通信過程如圖9所示.
表1 從設備實驗參數(shù)Table 1 Measuring data
圖9 傳輸儀與從站通信過程Fig.9 Communication process between master and slave
地面?zhèn)鬏攦x同時還與DTU數(shù)據(jù)遠程傳輸單元進行數(shù)據(jù)傳輸,實現(xiàn)數(shù)據(jù)的服務器上傳.在此通信過程中,地面?zhèn)鬏攦x作為Modbus從站, DTU與后臺服務器作為Modbus主站,雙方波特率為9 600 bits/s.主站通過發(fā)送讀取命令進行實時數(shù)據(jù)交互,最終將傳輸儀上的本地數(shù)據(jù)存儲至后臺服務器內(nèi)的數(shù)據(jù)庫中,接收數(shù)據(jù)如圖10所示.
圖10 服務器實時接收數(shù)據(jù)顯示Fig.10 Display of real-time data received
油井數(shù)據(jù)地面?zhèn)鬏攦x通過模擬油井自動監(jiān)測系統(tǒng)的實驗,很好地完成了井內(nèi)數(shù)據(jù)參數(shù)(壓力、溫度)從井內(nèi)到后臺服務器的傳輸功能,實現(xiàn)了Modbus主從站同時工作,實時進行數(shù)據(jù)傳輸與存儲.傳輸儀可以同時在總線中連接多個采集儀器,進行實時有序的數(shù)據(jù)傳輸且讀取數(shù)據(jù)的速度和準確性都有保證,可以滿足油井自動監(jiān)控系統(tǒng)的要求,達到了設計的目的.
致 謝
感謝武漢益控科技有限公司對本研究提供的資金支持.
[1] [美]拉伯羅斯.嵌入式實時操作系統(tǒng)μ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協(xié)議的實現(xiàn)[J].裝備制造技術(shù),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協(xié)議的工業(yè)PLC監(jiān)控儀表設計[J].單片機與嵌入式系統(tǒng)應用, 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協(xié)議的單片機數(shù)據(jù)采集[J].工業(yè)控制計算機,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總線協(xié)議的工業(yè)鍋爐監(jiān)控系統(tǒng)設計[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] 李祁,王鳳芹,張燕紅.嵌入式實時操作系統(tǒng)μC/OS-Ⅱ在STM32開發(fā)板上的應用[J].計算機與數(shù)字工程,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] 任哲.嵌入式實時操作系統(tǒng)μC/OS-II原理及應用[M].北京:北京航空航天大學出版社,2005.