楊 京,梁華慶,曹旭東,艾毅然,孫云龍
(中國石油大學(北京)地球物理與信息工程學院,北京102249)
抽油機井大多都分布在地理位置偏遠、環境惡劣的地區,給工作人員對抽油機井的管理與維護工作造成困難。隨著信息技術在石油工業領域的大量應用,抽油機井的實時監控系統大大改善了這一現狀。采用低成本、高性能、低功耗的微控制器以及無線傳感技術來研制抽油機井實時監控系統,可以使系統具有更佳的性能。該系統能夠讓原油的開采更加便捷安全和穩定高效。本系統能夠實時地反應抽油機井的工作狀況,及時發現并解決抽油機井在工作中出現的故障。采用該系統,可以有效提高設備的可靠性、減輕工作人員的工作量、降低采油成本,極大地提高了生產效率。
系統總體結構如圖1所示,由6部分組成:現場傳感器(壓力傳感器、溫度傳感器等)、傳感器信號采集板、互感器模塊、電量參數采集板、示功圖采集模塊、ZigBee通信模塊和上位機。

圖1 系統總體結構圖Fig.1 The overall block diagram of the system
油壓、油溫、示功圖以及電機的電力參數是抽油機井工作的重要參數,是抽油機井工況判斷的依據。現場傳感器將油溫、油壓等物理量轉換成4~20 mA的電流信號后,輸出給傳感器信號采集板。示功圖采集模塊內部有加速度傳感器和負荷傳感器,采集的數據通過ZigBee無線方式,發送到傳感器信號采集板。信號采集板通過繼電器來控制抽油機啟停。三相電壓電流經過電壓互感器模塊后,由電量采集模塊來采集。上位機使用Modbus通信協議,采用RS485總線與電量采集板和傳感器信號采集板進行通信,以獲取采集的數據和發送控制命令。Modbus是工業控制系統通信中最普遍的協議,它具有兼容性好,可靠性高等優勢[1]。上位機軟件能夠顯示電量參數、各個傳感器的數據以及示功圖;更改采集參數和控制抽油機的啟停。
主控芯片選擇嵌入式處理器STM32F103RC,這是一款Cortex M3內核的 32位單片機,有 48KB SRAM、256KB FLASH,片上集成 6個定時器、3個 12位 ADC、3個 SPI、2個IIC、5個串口等豐富的外設,主頻最快可以達到72 MHz。相比于其他的單片機,STM32系列具有更強大的運算處理能力,更快的速度,使用起來更加靈活方便[2]。
圖2為傳感器信號采集板框圖,由電源電路、信號調理電路、STM32及其外圍電路、繼電器及其驅動電路、RS485以及RS232通信接口電路組成。

圖2 傳感器信號采集板框圖Fig.2 Block diagram of the sensor signal acquisition board
由于現場的環境惡劣,在傳感器調理電路前端增加了起限流保護作用的保險絲,以及起靜電保護作用的TVS管。采樣電阻將傳感器輸出的4~20 mA的標準電流信號轉換成STM32內部AD可以采集的電壓信號。
開關信號的調理電路與電流信號調理電路相似,采用光耦隔離進行電壓隔離保護,同時將外部開關信號的電壓轉換為芯片內部可以測量的電壓。
圖3為STM32電路原理圖,包括:復位電路、供電電路、啟動模式選擇電路、濾波電容等。 PA4(20)、PA5(21)為引腳為內部 ADC 的輸入通道。 PC10(51)、PC11(52)引腳為內部USART4的輸入輸出通道,用來實現RS485通信。PC12(53)、PD2(54)引腳為內部USART5的輸入輸出通道,用來實現與ZigBee通信模塊之間的RS232通信。PC14(3)、PC15(4)引腳用來輸出開關信號。

圖3 STM32F103RC電路原理圖Fig.3 STM32F103RCcircuit schematics
采用繼電器來控制抽油機啟停,其驅動電路如圖4所示。STM32的IO引腳與PNP型三極管的集電極相連。以增加STM32的電流驅動能力。
電壓電流轉換板由電壓互感器與電流采樣電路組成。電流采樣電路通過一個采樣電阻將電流信號轉換為電壓信號。互感器能夠起到降壓以及隔離保護的作用。電機的交流電信號通過它的初級輸入,進行電壓變換后,由次級輸出芯片能夠測量的電壓。電流則通過采樣電阻轉換成電壓信號。
電量采集板同樣采用STM32作為主控芯片,使用CS5463專用電量測量芯片分別測量三相的電量參數,使用RS485通信接口與上位機通信。其結構框圖如圖5所示。
CS5463是美國CirrusLogic公司新近推出的單相雙向功率/電能計量集成電路芯片。可以測量瞬時的電壓、電流、有功功率、無功功率、視在功率和功率因數等[3]。其電路原理圖如圖6所示。

圖4 繼電器及其驅動電路原理圖Fig.4 Relay and its drive circuit schematics

圖5 電量采集板方框圖Fig.5 Block diagram of power parameter acquisition board

圖6 CS5463及其外圍電路原理圖Fig.6 CS5463 and its peripheral circuit schematics
電量參數采集板上配備了三塊CS5463,分別來采集三相電壓電流。通過SPI方式與STM32通信,一個CS5463內部包含有兩個ADC,分別采集電壓與電流。
ZigBee通信模塊由CC2430及其外圍電路、RS232通信接口電路、收發天線組成。該模塊由兩節5 V電池供電。具有小巧靈活等特點。CC2430是一款TI公司生產的SOC芯片,CC2430芯片內部包含了一個DSSS無線射頻前端,用于發送和接收無線射頻信號[4]。為了更加方便的實現Z-Stack協議棧[5],在片內集成了一個8位的8051內核。

圖7 ZigBee通信模塊Fig.7 Block diagram of ZigBee communication module
示功圖采集模塊采用電池供電,安裝在抽油機連接桿上。內部包含一個加速度傳感器和一個負荷傳感器,將加速度信號進行二次積分得到位移,負荷傳感器的信號即為載荷,定時將測得的數據通過ZigBee方式發送出去。
傳感器信號采集板上STM32內部的程序分為初始化、信號的采集、ZigBee模塊的數據接收、Modbus數據幀的接收與發送等步驟。程序流程圖如圖8所示。

圖8 主程序流程圖Fig.8 The main program flow chart
在系統上電后,首先執行系統的初始化,包括系統時鐘的配置;中斷向量配置;ADC、USART、TIMER、GPIO 等外設的工作模式選擇,工作參數配置;外設的使能。
主程序是一個循環體,在循環體中,首先通過判斷串口4接收標志位是否置位,如果置位了說明接收到ZigBee模塊發送來的數據;然后將這些數據存儲在特定的寄存器中;之后判斷定時器中斷標志位是否到達,一旦到達,則啟動ADC,進行數據采集,數據處理,數據存儲等操作;最后判斷串口5的接收標志位是否置位,如果置位說明接收到了Modbus的協議幀,需要解包數據幀,響應操作,進行數據讀取,參數更改,啟停控制等操作。
類似的,電量參數采集板程序的系統初始化包括系統時鐘的配置; 中斷向量配置;TIMER、SPI、USART、GPIO 等外設的工作模式選擇;以及外設的使能。
首先通過SPI接口分別向3個CS5463發送初始化以及配置的命令字;其次啟動定時器、SPI、USART等外設;之后不斷查詢定時器標志位是否置位,如果定時到達,則通過SPI接口從CS5463中讀取電壓、電流、功率、功率因數等數據;最后判斷串口接收標志位是否置位,如果置位說明接收到了Modbus的協議幀,需要將數據打包成Modbus數據幀,將數據幀發送給上位機。
ZigBee通信模塊的程序在TI的Z-Stack協議棧的程序框架下開發。Z-Stack協議棧是在OSAL操作系統下的一組函數包,通過Z-Stack可以很方便的進行ZigBee通信有關的程序編寫。
1)發送數據
在ZigBee協議棧中進行數據發送可以調用AF_DataRequest函數實現,該函數會調用協議棧里面的底層函數來打開發射機,調整發射機的發送功率等函數。最終將數據通過天線發送出去。
2)接收數據
當ZigBee模塊接收到ZigBee的數據幀后,OSAL將該數據幀中的數據封裝,然后放入操作系統的消息隊列中,每個消息都有自己的編號,即消息ID號,有新數據被接收到的消息ID號為AF_INCOMING_MSG_CMD(0x1A)。
首先使用osal_msg_receive()函數從消息隊列中接收一個消息,然后通過switch-case語句進行選擇(判斷消息ID),如果消息ID是AF_INCOMING_MSG_CMD,則進行相應的數據處理。
3)串口發送函數
CC2430的串口收發需要用到以下3個函數,這3個函數也是Z-Stack所提供的。
uint8 HalUARTOpen(uint8 port,halUARTCfg_t*config);//串口打開初始化
uint16 HalUARTRead(uint8 port,uint8*buf,uint16 len);//讀串口
uint16 HalUARTWrite(uint8 port,uint8*buf,uint16 len);//寫串口
使用HalUARTOpen()函數對串口進行初始化,該函數使用halUARTCfg_t結構體指針作為參數,在使用CC2430的串口時,需要定義一個halUARTCfg_t結構體來初始化CC2430的串口。
uartConfig.Configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_115200;
uartConfig.callBackFunc= Mgr_ProcessZAppData;
在CC2430接收到數據之后,調用HalUARTWrite()函數發送數據,通過串口發送給STM32。
在VC++2010環境下,使用微軟的功能庫MFC編寫上位機軟件。由于PC機沒有RS485的接口,需要通過一個RS485到RS232的轉接模塊將RS485的信號轉換成RS232的信號。利用MFC中的MSComm控件進行RS232串口的通信[6]。
在主窗口類CWorkDlg定義CString成員對象,用于顯示實時的壓力、溫度、三相電流電壓;定義繼承于CWnd類的子類,display類,用于顯示示功圖。在其OnPaint函數中添加坐標以及曲線的繪制代碼。

圖9 上位機界面Fig.9 Data display of PC
圖9為上位機界面。點擊菜單欄上的參數設置菜單,會彈出參數設置對話框。用戶可以在參數設置對話框上更改監控參數。監控的參數包括報警上限、報警下限以及采集間隔。當抽油機井的任意一項參數超出正常范圍后,都可以彈出報警提示,提示操作員對此進行處理。同時,操作員可以點擊停止按鈕,讓抽油機井急停。
本文設計的監控系統采用低功耗、高性能、低成本的嵌入式處理器STM32作為主控芯片。可以實時準確地反映抽油機井的生產狀況,在出現故障時能夠及時進行抽油機井的啟停控制。與傳統的人工巡視監控相比,采用基于微控制器的油井實時監控系統,可降低工人勞動強度,減少用工總量,提高總體勞動效率;且可靠性高,可保證油氣生產安全、提高油田科學化管理水平和整體開發效益。
[1]朱小襄.Modbus通信協議及編程[J].電子工程師,2005(7):42-45.ZHU Xiao-xiang.Modbus communication protocol and programming[J].Electronics Engineer,2005(7):42-45.
[2]孫書鷹,陳志佳,寇超,等.新一代嵌入式微處理器STM32F103開發與應用[J].微計算機應用,2010(12):59.SUN Shu-ying,CHEN Zhi-jia,KOU Chao,et al.New generation of embedded microprocessor STM32F103 development and application[J].Microcomputer Applications,2010(12):59.
[3]周怡頲,凌志浩,吳勤勤.新型單相雙向功率/電能集成電路CS5463的原理與應用[J].儀器儀表用戶,2006(3):66-68.ZHOUYi-ting,LINZhi-hao,WUQin-qin.Principle and application of new single-phase two-way power/energy of the integrated circuit CS5463[J].Instrument Users,2006(3):66-68.
[4]尹應鵬,李平舟,郭志華.基于CC2430的ZigBee無線數傳模塊的設計和研究[J].電子元器件應用,2008,10(4):18-21.YIN Ying-peng,LI Ping-Zhou,GUO Zhi-hua.Design and research of CC2430 ZigBee wireless data transmission module[J].Electronic Component Applications,2008,10(4):18-21.
[5]韓旭東,張春業,李鵬.傳感器無線互聯標準及實現[J].電子技術應用,2004(4):44-46.HAN Xu-dong,ZHANG Chun-ye,LI Peng.Sensors wireless internet standards and achieve[J].Application of Electronic Technique,2004(4):44-46.
[6]侯俊杰.深入淺出MFC[M].武漢:華中科技大學出版社,2001.