基于嵌入式處理器STM32的抽油機井實(shí)時(shí)監控系統設計
3.1 傳感器信號采集板程序設計
傳感器信號采集板上STM32內部的程序分為初始化、信號的采集、ZigBee模塊的數據接收、Modbus數據幀的接收與發(fā)送等步驟。程序流程圖如圖8所示。

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

圖9為上位機界面。點(diǎn)擊菜單欄上的參數設置菜單,會(huì )彈出參數設置對話(huà)框。用戶(hù)可以在參數設置對話(huà)框上更改監控參數。監控的參數包括報警上限、報警下限以及采集間隔。當抽油機井的任意一項參數超出正常范圍后,都可以彈出報警提示,提示操作員對此進(jìn)行處理。同時(shí)操作員可以點(diǎn)擊停止按鈕,讓抽油機井急停。
4 結論
本文設計的監控系統采用低功耗、高性能、低成本的嵌入式處理器STM32作為主控芯片??梢詫?shí)時(shí)準確地反映抽油機井的生產(chǎn)狀況,在出現故障時(shí)能夠及時(shí)進(jìn)行抽油機井的啟??刂?。與傳統的人工巡視監控相比,采用基于微控制器的油井實(shí)時(shí)監控系統,可降低工人勞動(dòng)強度,減少用工總量,提高總體勞動(dòng)效率;且可靠性高,可保證油氣生產(chǎn)安全、提高油田科學(xué)化管理水平和整體開(kāi)發(fā)效益。
評論