新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于嵌入式處理器STM32的抽油機井實時監(jiān)控系統(tǒng)設(shè)計

基于嵌入式處理器STM32的抽油機井實時監(jiān)控系統(tǒng)設(shè)計

作者: 時間:2016-09-12 來源:網(wǎng)絡(luò) 收藏

3.1 傳感器信號采集板程序設(shè)計

傳感器信號采集板上內(nèi)部的程序分為初始化、信號的采集、ZigBee模塊的數(shù)據(jù)接收、Modbus數(shù)據(jù)幀的接收與發(fā)送等步驟。程序流程圖如圖8所示。

基于嵌入式處理器STM32的抽油機井實時監(jiān)控系統(tǒng)設(shè)計

在系統(tǒng)上電后,首先執(zhí)行系統(tǒng)的初始化,包括系統(tǒng)時鐘的配置;中斷向量配置;ADC、USART、TlMER、GPIO等外設(shè)的工作模式選擇,工作參數(shù)配置;外設(shè)的使能。

主程序是一個循環(huán)體,在循環(huán)體中,首先通過判斷串口4接收標(biāo)志位是否置位,如果置位了說明接收到ZigBee模塊發(fā)送來的數(shù)據(jù);然后將這些數(shù)據(jù)存儲在特定的寄存器中;之后判斷定時器中斷標(biāo)志位是否到達(dá),一旦到達(dá),則啟動ADC,進(jìn)行數(shù)據(jù)采集,數(shù)據(jù)處理,數(shù)據(jù)存儲等操作;最后判斷串口5的接收標(biāo)志位是否置位,如果置位說明接收到了Modbus的協(xié)議幀,需要解包數(shù)據(jù)幀,響應(yīng)操作,進(jìn)行數(shù)據(jù)讀取,參數(shù)更改,啟停控制等操作。

3.2 電量參數(shù)采集板程序設(shè)計

類似的,電量參數(shù)采集板程序的系統(tǒng)初始化包括系統(tǒng)時鐘的配置;中斷向量配置;TIMER、SPI、USART、GPIO等外設(shè)的工作模式選擇;以及外設(shè)的使能。

首先通過SPI接口分別向3個CS5463發(fā)送初始化以及配置的命令字;其次啟動定時器、SPI、USART等外設(shè);之后不斷查詢定時器標(biāo)志位是否置位,如果定時到達(dá),則通過SPI接口從CS5463中讀取電壓、電流、功率、功率因數(shù)等數(shù)據(jù);最后判斷串口接收標(biāo)志位是否置位,如果置位說明接收到了Modbus的協(xié)議幀,需要將數(shù)據(jù)打包成Modbus數(shù)據(jù)幀,將數(shù)據(jù)幀發(fā)送給上位機。

3.3 模塊程序設(shè)計

模塊的程序在TI的Z—Stack協(xié)議棧的程序框架下開發(fā)。Z—Stack協(xié)議棧是在OSAL操作系統(tǒng)下的一組函數(shù)包,通過Z—Stack可以很方便的進(jìn)行有關(guān)的程序編寫。

1)發(fā)送數(shù)據(jù)

在ZigBee協(xié)議棧中進(jìn)行數(shù)據(jù)發(fā)送可以調(diào)用AF_DataRequest函數(shù)實現(xiàn),該函數(shù)會調(diào)用協(xié)議棧里面的底層函數(shù)來打開發(fā)射機,調(diào)整發(fā)射機的發(fā)送功率等函數(shù)。最終將數(shù)據(jù)通過天線發(fā)送出去。

2)接收數(shù)據(jù)

當(dāng)ZigBee模塊接收到ZigBee的數(shù)據(jù)幀后,OSAL將該數(shù)據(jù)幀中的數(shù)據(jù)封裝,然后放入操作系統(tǒng)的消息隊列中,每個消息都有自己的編號,即消息ID號,有新數(shù)據(jù)被接收到的消息ID號為AF_INCOMING_MSG_CMD(0x1A)。

首先使用osal_msg_receivre()函數(shù)從消息隊列中接收一個消息,然后通過switch—case語句進(jìn)行選擇(判斷消息ID),如果消息ID是AF_INCOMING_MSG_CMD,則進(jìn)行相應(yīng)的數(shù)據(jù)處理。

3)串口發(fā)送函數(shù)

CC2430的串口收發(fā)需要用到以下3個函數(shù),這3個函數(shù)也是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()函數(shù)對串口進(jìn)行初始化,該函數(shù)使用halUARTCfg_t結(jié)構(gòu)體指針作為參數(shù),在使用CC2430的串口時,需要定義一個halUARTCfg_t結(jié)構(gòu)體來初始化CC2430的串口。

uartConfig.Configured = TRUE;

uartConfig.baudRate = HAL_UART_BR_115200;

uartConfig.callBackFunc = Mgr_ProcessZAppData;

在CC2430接收到數(shù)據(jù)之后,調(diào)用HalUARTWrite()函數(shù)發(fā)送數(shù)據(jù),通過串口發(fā)送給。

3.4 上位機軟件程序設(shè)計

在VC++2010環(huán)境下,使用微軟的功能庫MFC編寫上位機軟件。由于PC機沒有RS485的接口,需要通過一個RS485到RS232的轉(zhuǎn)接模塊將RS4 85的信號轉(zhuǎn)換成RS232的信號。利用MFC中的MSComm控件進(jìn)行RS232串口的通信。

在主窗口類CWorkDlg定義CString成員對象,用于顯示實時的壓力、溫度、三相電流電壓;定義繼承于CWnd類的子類,display類,用于顯示示功圖。在其OnPaint函數(shù)中添加坐標(biāo)以及曲線的繪制代碼。

基于嵌入式處理器STM32的抽油機井實時監(jiān)控系統(tǒng)設(shè)計

圖9為上位機界面。點擊菜單欄上的參數(shù)設(shè)置菜單,會彈出參數(shù)設(shè)置對話框。用戶可以在參數(shù)設(shè)置對話框上更改監(jiān)控參數(shù)。監(jiān)控的參數(shù)包括報警上限、報警下限以及采集間隔。當(dāng)抽油機井的任意一項參數(shù)超出正常范圍后,都可以彈出報警提示,提示操作員對此進(jìn)行處理。同時操作員可以點擊停止按鈕,讓抽油機井急停。

4 結(jié)論

本文設(shè)計的監(jiān)控系統(tǒng)采用低功耗、高性能、低成本的嵌入式處理器作為主控芯片??梢詫崟r準(zhǔn)確地反映抽油機井的生產(chǎn)狀況,在出現(xiàn)故障時能夠及時進(jìn)行抽油機井的啟??刂?。與傳統(tǒng)的人工巡視監(jiān)控相比,采用基于微控制器的系統(tǒng),可降低工人勞動強度,減少用工總量,提高總體勞動效率;且可靠性高,可保證油氣生產(chǎn)安全、提高油田科學(xué)化管理水平和整體開發(fā)效益。


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉