摘 要:根據我國大部分油田偏遠分散布線不利的特點,在目前多數油田監控采用485總線等進行遠程通信的現狀基礎上,設計了采用32位Cortex-M3 內核的STM32F103C8T6和ENC28J60嵌入式服務器,并利用ZigBee傳感網絡發送BMP085采集的壓力和溫度數據到該服務器,由服務器再通過以太網發送至監控端的壓力監控系統。相比485總線,本設計在傳輸速率等方面具有顯著提升且性能穩定,從而為油田信息化和自動化監控提供了一個有效方案。
關鍵詞:STM32F103C8T6;ENC28J60;ZigBee;油田;壓力數據;
中圖分類號:TP212 文獻標識碼:A文章編號:2095-1302(2014)06-0038-04
0引言
目前我國大多數油田地處偏遠地區、分布范圍廣、油井分散,若對油井出現的異常情況不能及時發現,及時采取措施, 可能直接導致原油產量降低,設備使用壽命減短,能耗增加,有時甚至會造成嚴重的經濟損失,降低了經濟效益[1]。壓力和溫度是油井抽油機正常工作的重要指標,所以本文設計的重點在壓力和溫度數據的采集和監控。
傳統的徒手抄計和便攜式存儲已不再適合油井開采現場數據采集中,在線遠傳階段已經到來[2],信息化、自動化的遠程集中監控是一個必然發展趨勢。目前少數的遠程監控系統通常采用8位或16位主芯片,通過485總線等方式進行遠程通信,系統存在反應速度慢、數據傳輸速率低、布線復雜易受干擾等缺點[3]。
本文設計的油井壓力數據監控系統現場數據采集和傳輸設計應用ZigBee傳感器網絡進行功能實現,嵌入式服務器部分采用32位Cortex-M3 內核的STM32F103C8T6微處理芯片和高性能以太網控制芯片ENC28J60實現嵌入式以太網通信接口設計。
1系統總體構成方案
整個系統分為數據采集發送端和數據接收監測端兩部分,系統總體結構如圖1所示。
數據采集發送端負責油井現場每間隔一段時間采集一次壓力數據,并通過ZigBee節點設備發送至嵌入式服務器中的協調器。
數據接收監測端由ZigBee協調器、STM32控制器和上位機監控軟件組成,協調器負責接收由ZigBee節點發送過來的無線數據,并傳送至STM32控制器通過以太網把數據發送給遠程監控PC進行查看和控制。
圖1監控系統總體構成
2系統硬件設計
2.1數據采集發送端
數據采集發送端的硬件設計主要為傳感器節點硬件設計,ZigBee節點選用 TI 公司生產的 CC2530 片上系統芯片來設計, CC2530芯片采用6X6QFN封裝,有電源引腳、控制引腳和GPIO引腳(P0、P1為8位的I/O引腳,P2只有5位的可用I/O),總共40個引腳。該芯片除了具有符合 IEEE802.15.4 規范的 2.4 GHz 標準的RF收發器外,它還在片內集成了一個 8 位的 8051 增強型微處理器、8 KB 的 SRAM 和大容量 FLASH(用來保存 ZigBee 協議棧)等[4]。
壓力傳感器采用BMP085壓力傳感器,它的測量范圍為300~1 100 hPa,反應時間為7.5 ms,該傳感器應用于抽油機原油壓力數據的測量中,合適的測量范圍決定了靈敏度符合設計要求。同時它具有溫度補償功能,采用無鉛陶瓷載體封裝,適用在海拔500 m~9 000 m環境,保證工作狀態長期穩定。
CC2530通過I/O口與BMP085相連,CC2530內部處理器與BMP085之間采用IIC總線進行通信。傳感器采集到壓力和溫度數據,經AD轉換傳送給片內8051微處理器,微處理器控制傳感器節點與其它傳感器節點或匯聚節點進行通信。RF無線收發器,通過SPI與處理器模塊相連。其傳感器節點的硬件框圖如圖2所示。
圖2傳感器節點硬件結構框圖
2.2數據監測接收端
數據監測接收端的硬件設計主要分為兩部分:ZigBee協調器、STM32嵌入式以太網控制服務器設計。
ZigBee協調器同樣選用CC2530芯片進行設計, 但為了與主處理器連接方便,本文把協調器做成一個模塊,其引腳定義如圖3所示。
圖3ZigBee協調器引腳定義圖
圖3中,CC2530的I/O引腳(P0.2和P0.3)通過設定SFR寄存器作為USART的RX和TX引腳使用,與STM32的USART串口引腳相連進行通訊。
STM32嵌入式以太網控制服務器的硬件設計采用基于Cortex-M3內核的處理器STM32F103CBT6作為服務器主處理器,高性能完全滿足設計要求,以太網芯片采用美國Microchip公司的獨立以太網控制器ENC28J60,它采用速度高達10 Mb/s的SPI三線接口作為通信通道,同時內部集成了符合IEEE802.3規則的 MAC 層和物理層控制器 [4]。
按照STM32指導手冊,一個完整的STM32最小系統還外接所需的晶振和去耦電路。其中STM32 的 PA2、PA3 引腳是復用功能引腳作為 USART2 串口與 CC2530 的串口引腳相連,另外本系統主處理器內部移植了 uIP 協議,通過 USART2 和 CC2530 連接,設置了一個緩沖隊列保存串口接收帶的無線模塊的數據,然后應用 uIP 的底層驅動控制 ENC28J60,利用以太網發送到上位機。
根據ENC28J60用戶手冊和本設計的要求,本設計選用了符合10BASE-T標準并自帶RJ45插座的以太網隔離變壓器HR91102A,提高系統的抗干擾性。變壓器需在ENC28J60 的TPIN 和TPOUT兩引腳相連四個50 Ω電阻和兩個0.01 uF的電容ENC28J60連接一個25 MHz的晶振,跨接一個2.75 kΩ的偏置電阻均按手冊連接。圖4所示是STM32嵌入式以太網服務器原理圖。圖中STM32程序下載設計使用的是標準的JTAG仿真調試接口。
圖4STM32嵌入式以太網服務器原理圖
3系統軟件設計
3.1系統總體設計圖
系統總體實現的功能是將油井現場的抽油機壓力數據在ZigBee物聯傳感網絡中從節點設備發送至嵌入式服務器中的協調器。為了服務器處理和連接方便,本文將ZigBee協調器和STM32做成了一個模塊。協調器經過初始化,選擇頻道和建立網絡后,進入無線監聽狀態,當有新的傳感器節點申請加入時,給新節點分配網絡地址并接受節點數據通過串口發送給STM32處理器,通過以太網上傳至上位監控PC,系統總體流程如圖5所示。
圖5系統總體工作流程圖
3.2ZigBee節點和協調器軟件設計
本系統利用 SensorDemo模板并進行部分改寫來實現 ZigBee 節點和協調器的軟件設計。在 Zigbee 無線網絡中存在三種邏輯設備類型:協調器(ZC)、路由器(ZR)、
終端設備(ZD)[6]。ZigBee的開發軟件選用IAR EW8051-8.10.1 ,Z-Stack協議棧選用ZStack-CC2530-2.5.0,本系統為了操作方便,將SensorDemo改動去掉按鍵操作,上電即自動聯網并發送傳感器數據。重點對void zb_HandleKeys( uint8 shift, uint8 keys )的改動是刪除程序中的SW1等的按鍵觸發事件;核心對void zb_HandleOsalEvent( uint16 event )的改寫如下:
void zb_HandleOsalEvent( uint16 event )
{
uint8 logicalType;
……
if( event ZB_ENTRY_EVENT )
{
initUart(uartRxCB);
HalLedBlink ( HAL_LED_1, 0, 50, 500 );
HalLedSet( HAL_LED_2, HAL_LED_MODE_OFF );
zb_ReadConfiguration( ZCD_NV_LOGICAL_TYPE, sizeof(uint8), logicalType );
if ( logicalType != ZG_DEVICETYPE_COORDINATOR)
{
logicalType = ZG_DEVICETYPE_COORDINATOR;
zb_WriteConfiguration(ZCD_NV_LOGICAL_TYPE, sizeof(uint8), logicalType);
zb_SystemReset();
}
….
}
}
程序運行至此,終端節點就會自動加入網絡并建立綁定;到了這一步的時候,網絡就已經形成了,網絡形成后就可以傳輸采集到的壓力和溫度數據了;程序中需要注意的是CC2530將協調器稱為gateway(網關)而不是collector。
3.3嵌入式以太網STM32軟件設計
嵌入式以太網服務器要實現的功能是通過USART2接收CC2530傳送的數據,并通過SPI1連接ENC28J60從以太網上傳數據到監控PC。以太網服務器經過對STM32和ENC28J60進行初始化,設置系統時鐘和引腳輸出方式,配置SPI總線符合ENC28J60
的時序要求,對ENC28J60的初始化是通過SPI總線對它的寄存器進行配置實現的,主要設置收發緩沖區的大小和起始地址、設置以太網過濾器、配置MAC層、物理層和LED指示燈等[4]。STM32F103可通過SPI接口發送命令,訪問ENC28J60的相關寄存器來完成相應的操作。下面給出ENC28J60接收/發送數據包的程序框架:
ENC28J60發送數據包程序框架如下:
void enc28j60PacketSend(unsigned int len, unsigned char* packet)
{
enc28j60Write(EWRPT, (TXSTART_INIT)0xFF);
enc28j60Write(ETXND,(TXSTART_INIT+len)0xFF);
enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, 0x00);
enc28j60WriteBuffer(len, packet);
enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, EC
ENC28J60接收數據包主要框架程序如下:
unsigned int enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)
{
enc28j60Write(ERDPT, (NextPacketPtr));
NextPacketPtr=enc28j60ReadOp(ENC28J60_READ_BUF_MEM, 0);
NextPacketPtr|=enc28j60ReadOp(ENC28J60_READ_BUF_MEM, 0)<<8;
len = enc28j60ReadOp(ENC28J60_READ_BUF_MEM, 0);
len |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM, 0)<<8;
rxstat=enc28j60ReadOp(ENC28J60_READ_BUF_MEM, 0);
rxstat |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM, 0)<<8;
enc28j60ReadBuffer(len, packet);
return(len);
}
3.4高層協議uIP移植和應用層主程序的設計
完成了MAC 層及物理層協議的驅動程序,要想實現嵌入式以太網服務器與其它設備之間的通信,還要在嵌入式系統中實現更高層的 TCP/IP 協議。本文選用uIP1.0協議棧并對其適當精簡來實現功能。uIP協議棧由瑞典計算機科學研究所的AdamDunkels開發的免費、開發源代碼的協議棧[7]。在本系統中程序首先用中斷的方式接收 ZigBee協調器發送給主處理器串口的數據,并設置接收隊列暫存這些數據。在主程序中的主要任務是不斷監測串口的標志位,當有數據時,把數據添高位封裝后,通過 ENC28J60 的以太網接口發送到上位機監測軟件中。其工作流程圖見圖6所示。
圖6uIP協議棧應用層向網絡發送數據的流程圖
4結語
本文設計的基于STM32F103C8T6和ENC28J60的嵌入式服務器,利用ZigBee傳感網絡發送BMP085采集的壓力和溫度數據到服務器,服務器再通過以太網發送至監控端,設計穩定可靠,為油田業信息化監控提供了一個有效方案。
參 考 文 獻
[1]雷文禮,楊延寧,劉巧平,等. 基于ZigBee技術的油井無線視頻監測系統研究[J].計算機工程與應用,2009(5):91-94.
[2]母長綿.油井數據采集遠程監控方案的探索與實施[J].科技創新導報,2012(9):92.
[3]陳曦,楊佐龍,周智恒,等. 關于Zigbee定位參考節點布局方案的研究[J].中國科技信息,2013(12): 95.
[4]楊嘯宇.基于Cortex-M3的無線射頻數據采集和傳輸系統研究[D].天津:天津理工大學,2011.
[5]周志敏,紀愛華.電磁兼容技術[M].北京:電子工業出版社,2007.
[6] JIN Ming-Hui, YU Chih-hao, LAI Hung-Ren, et al. Zigbee positioning system for smart home application [J]. Lecture Notes in Computer Science, 2007, 56(3): 1417-1425.
[7] UIP. The uIP embedded TCP/IP stack: the uIP 1.0 reference manual [R]. [S.l.]: UIP, 2006.
作者簡介:周利娜,女,碩士,機械電子工程。研究方向為數控系統與微機控制。
周建平,男,教授,研究生導師。
許 燕,女,副教授,研究生導師。
李 鴻,女,碩士,機械電子工程。研究方向為數控系統與微機控制。