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