摘 要: 針對(duì)箱式變壓器監(jiān)控系統(tǒng)實(shí)現(xiàn)采集周圍環(huán)境溫度、濕度、局部放電量以及噪聲的目標(biāo),將ARM11與溫濕度采集模塊AM2301相結(jié)合,通過(guò)對(duì)基于ARM11嵌入式開(kāi)發(fā)板驅(qū)動(dòng)程序的編寫與加載,實(shí)現(xiàn)溫、濕度的采集。將溫度數(shù)據(jù)作為無(wú)線測(cè)溫模塊的定標(biāo)數(shù)據(jù),通過(guò)開(kāi)發(fā)板的串口與無(wú)線測(cè)溫、局部放電和噪聲采集設(shè)備的通信來(lái)實(shí)現(xiàn)對(duì)輸配電線的溫度、變壓器局部放電量和噪聲的實(shí)時(shí)采集,最后通過(guò)網(wǎng)絡(luò)將實(shí)時(shí)采集的數(shù)據(jù)發(fā)送給監(jiān)控中心。
關(guān)鍵詞: 變壓器;AM2301;嵌入式;環(huán)境參數(shù)監(jiān)測(cè);網(wǎng)絡(luò)傳輸
城市各居民區(qū)的箱式變電站是所轄區(qū)用戶安全用電的基本設(shè)施。隨著我國(guó)電網(wǎng)建設(shè)的發(fā)展,對(duì)供電系統(tǒng)的要求也越來(lái)越高。對(duì)箱式變電站環(huán)境和設(shè)備的監(jiān)測(cè),是保障變電站設(shè)備安全可靠運(yùn)行的必要手段。傳統(tǒng)的遠(yuǎn)程監(jiān)測(cè)依靠串行總線來(lái)完成上位機(jī)與數(shù)字設(shè)備之間的通信,由上位機(jī)直接對(duì)數(shù)字設(shè)備進(jìn)行控制。但這已經(jīng)越來(lái)越顯示出它的局限性:成本較高、不易擴(kuò)展等。嵌入式設(shè)備性能的提高及因特網(wǎng)的飛速發(fā)展,為這些問(wèn)題提出了新的解決方案,文中設(shè)計(jì)了以嵌入式計(jì)算機(jī)、通信設(shè)備、測(cè)控單元和傳輸網(wǎng)絡(luò)為基本構(gòu)成的監(jiān)測(cè)系統(tǒng),為變配電系統(tǒng)建立實(shí)時(shí)數(shù)據(jù)采集和數(shù)據(jù)傳輸,用監(jiān)測(cè)結(jié)果作為對(duì)電力系統(tǒng)進(jìn)行監(jiān)控的依據(jù),在電力監(jiān)控系統(tǒng)中發(fā)揮了重要作用。
1 嵌入式箱變監(jiān)測(cè)系統(tǒng)方案設(shè)計(jì)
根據(jù)箱變監(jiān)測(cè)環(huán)境指標(biāo)的要求,該箱變監(jiān)測(cè)系統(tǒng)應(yīng)具有以下基本功能:
(1)穩(wěn)定可靠地采集各個(gè)環(huán)境指標(biāo)數(shù)據(jù);
(2)對(duì)各環(huán)境指標(biāo)數(shù)據(jù)的采集相對(duì)獨(dú)立,相互之間無(wú)干擾;
(3)與監(jiān)控中心實(shí)現(xiàn)可靠的網(wǎng)絡(luò)數(shù)據(jù)傳輸;
(4)當(dāng)系統(tǒng)出現(xiàn)故障時(shí)能夠自動(dòng)重啟,確保系統(tǒng)長(zhǎng)期可靠運(yùn)行。
根據(jù)箱變環(huán)境的監(jiān)測(cè)需要,本系統(tǒng)采用體積小、功能強(qiáng)大的嵌入式開(kāi)發(fā)板作為主要的硬件環(huán)境,與溫濕度檢測(cè)模塊、局部放電數(shù)據(jù)采集模塊和噪聲采集模塊相結(jié)合,并通過(guò)網(wǎng)絡(luò)與監(jiān)控中心遠(yuǎn)程通信來(lái)實(shí)現(xiàn)整個(gè)系統(tǒng)的功能,硬件總體結(jié)構(gòu)如圖1所示。
2 開(kāi)發(fā)板硬件介紹
本系統(tǒng)選用Friendly ARM研制的Tiny6410開(kāi)發(fā)板,其中核心板所用處理器是基于ARM11的S3C6410,板載資源有256 MB DDR RAM,2 GB SLC Nand Flash存儲(chǔ)器,底板還提供了LCD觸摸屏、USB接口、SD卡、3個(gè)通用異步串行口、網(wǎng)絡(luò)接口等功能支持。
3 軟件平臺(tái)
嵌入式操作系統(tǒng)采用功能強(qiáng)大、多任務(wù)而且性能穩(wěn)定的Linux操作系統(tǒng),保障了良好的可裁剪和移植性,同時(shí)也便于對(duì)新增設(shè)備驅(qū)動(dòng)程序進(jìn)行移植開(kāi)發(fā)。內(nèi)核版本是Linux2.6.38,經(jīng)實(shí)際檢測(cè),該系統(tǒng)可在S3C6410硬件平臺(tái)上可靠運(yùn)行。
對(duì)硬件平臺(tái)上運(yùn)行的程序進(jìn)行編譯,需要在PC上建立交叉編譯環(huán)境,本次設(shè)計(jì)的交叉編譯環(huán)境建立在 Linux Fedora 15 操作系統(tǒng)上,使用arm-linux-gcc-v6作為交叉編譯器。交叉編譯產(chǎn)生的可執(zhí)行文件和驅(qū)動(dòng)程序模塊通過(guò)U盤存入嵌入式系統(tǒng)的閃存里。先通過(guò)insmod命令加載驅(qū)動(dòng)程序模塊到操作系統(tǒng)內(nèi)核中,再運(yùn)行數(shù)據(jù)采集應(yīng)用程序。
4 系統(tǒng)軟件設(shè)計(jì)
本系統(tǒng)采用C語(yǔ)言編程,以多線程和模塊化的設(shè)計(jì)方法,可以使數(shù)據(jù)采集、控制輸出和系統(tǒng)通信同時(shí)進(jìn)行[1],其主要流程如圖2所示。其中采集輸配電線溫度、噪聲和局部放電主要通過(guò)串口與設(shè)備通信來(lái)獲得數(shù)據(jù)。讀取環(huán)境溫、濕度則是應(yīng)用程序通過(guò)Linux文件系統(tǒng)設(shè)備節(jié)點(diǎn),驅(qū)動(dòng)AM2301讀取溫濕度測(cè)量數(shù)據(jù),最后將采集到的數(shù)據(jù)經(jīng)過(guò)加工處理后,通過(guò)網(wǎng)絡(luò)傳送給監(jiān)測(cè)中心。
4.1 看門狗設(shè)計(jì)
看門狗程序模塊直接調(diào)用內(nèi)核中已經(jīng)存在的看門狗驅(qū)動(dòng)程序,在應(yīng)用程序中通過(guò)“/dev/watchdog”文件設(shè)備節(jié)點(diǎn)來(lái)進(jìn)行訪問(wèn)。使用ioctl()來(lái)設(shè)定看門狗定時(shí)器的時(shí)間,并及時(shí)進(jìn)行喂狗操作。當(dāng)因采集或傳輸?shù)饶K發(fā)生故障而不能及時(shí)進(jìn)行喂狗操作時(shí),就會(huì)在達(dá)到設(shè)定時(shí)間后自動(dòng)重啟開(kāi)發(fā)板,開(kāi)發(fā)板重啟后自動(dòng)運(yùn)行系統(tǒng)程序,達(dá)到長(zhǎng)期自動(dòng)運(yùn)行的目的。
4.2 網(wǎng)絡(luò)傳輸設(shè)計(jì)
網(wǎng)絡(luò)傳送數(shù)據(jù)根據(jù)實(shí)時(shí)性需要選擇了基于UDP協(xié)議的網(wǎng)絡(luò)傳輸。本系統(tǒng)采用單播——客戶機(jī)/服務(wù)器模型。為了提高系統(tǒng)的安全性,與監(jiān)控中心商定了加密密文格式,只有當(dāng)收到正確命令后才將采集的數(shù)據(jù)與加密內(nèi)容發(fā)送給監(jiān)控中心,提高了安全性。在網(wǎng)絡(luò)傳輸過(guò)程中,當(dāng)創(chuàng)建套接字并綁定端口后,會(huì)一直處于監(jiān)聽(tīng)狀態(tài),當(dāng)接收到數(shù)據(jù)后,判斷是否為監(jiān)控端發(fā)送來(lái)的數(shù)據(jù),若是則發(fā)送采集的數(shù)據(jù),回到監(jiān)聽(tīng)狀態(tài),等下一次命令到來(lái)。
4.3 AM2301驅(qū)動(dòng)設(shè)計(jì)
AM2301數(shù)字溫濕度傳感器采用簡(jiǎn)化的單總線通信協(xié)議,溫度的量程范圍為:-40 ℃~+80 ℃,濕度的量程范圍為:0%~100%RH[2]。3個(gè)引腳的功能如表1所示。本系統(tǒng)將DATA引腳接到S3C6410的GPE3,并通過(guò)5.1 kΩ上拉電阻與VDD連接后一起接到+5 V電源,將GND引腳接地即完成線路連接。
本系統(tǒng)將AM2301作為一個(gè)字符設(shè)備進(jìn)行驅(qū)動(dòng)。在Linux中,字符設(shè)備驅(qū)動(dòng)是以文件的形式進(jìn)行管理,其驅(qū)動(dòng)需要完成打開(kāi)、讀寫等類似針對(duì)文件的功能操作,而且可以通過(guò)在/dev目錄下的文件系統(tǒng)設(shè)備節(jié)點(diǎn)進(jìn)行訪問(wèn)[3]。字符設(shè)備驅(qū)動(dòng)程序主要由字符設(shè)備加載與卸載函數(shù)和字符設(shè)備驅(qū)動(dòng)file_operation結(jié)構(gòu)體中的成員函數(shù)組成并通常至少要實(shí)現(xiàn)open、write、read和close系統(tǒng)調(diào)用[4]。
設(shè)計(jì)移植AM2301驅(qū)動(dòng)程序時(shí),根據(jù)其底層具體硬件特性和單總線通信協(xié)議,驅(qū)動(dòng)程序主要由函數(shù)am2301_init(設(shè)備注冊(cè))、am2301_exit(設(shè)備注銷)、file_operation、ReadByte(讀一個(gè)字節(jié))、am2301_read(讀取完整的溫、濕度測(cè)量數(shù)據(jù))構(gòu)成。由于內(nèi)核空間與用戶空間的內(nèi)存是不能直接互訪的,應(yīng)用程序可以通過(guò)fd=open()打開(kāi)文件設(shè)備的方式來(lái)訪問(wèn)驅(qū)動(dòng)程序,并通過(guò)read(fd,&buffer,size)來(lái)讀取采集到的數(shù)據(jù)。驅(qū)動(dòng)采集溫、濕度的流程圖如圖3所示。
讀取溫、濕度數(shù)據(jù)采用單總線數(shù)據(jù)格式,一次傳輸數(shù)據(jù)為40 bit。傳感器中讀出的溫、濕度值是實(shí)際溫、濕度值的10倍。具體格式如下:
40 bit數(shù)據(jù)=16 bit濕度數(shù)據(jù)+16 bit溫度數(shù)據(jù)+8 bit校驗(yàn)和,例如接收到40 bit數(shù)據(jù)為:
0000 0010 1000 1101 0000 0001 0010 0001 1011 0001,若前4個(gè)字節(jié)的累加和與最后1個(gè)字節(jié)相等,如:0000 0010+1000 1101+0000 0001+0010 0001=1011 0001(校驗(yàn)位),則接收數(shù)據(jù)正確。由前32位的數(shù)據(jù)計(jì)算可得:
濕度:0000 0010 1000 1101=653 =>65.3%RH
溫度:0000 0001 0010 0001=289 =>28.9℃
在驅(qū)動(dòng)程序的編寫中,因需要直接訪問(wèn)開(kāi)發(fā)板引腳,故需掌握基于S3C6410的GPIO操作。如配置GPIO方向(gpio_direction_output())、讀取GPIO的值(gpio_get_value())、釋放GPIO(gpio_free())等。
通過(guò)AM2301采集環(huán)境的溫濕度,其中溫度數(shù)據(jù)作為無(wú)線測(cè)溫設(shè)備的定標(biāo)數(shù)據(jù),通過(guò)無(wú)線測(cè)溫模塊與ARM11的串口通信來(lái)采集輸配電線的溫度。
將驅(qū)動(dòng)模塊和交叉編譯生成的可執(zhí)行文件放在開(kāi)發(fā)板“/etc/init.d”目錄下的“rcS”腳本文件下運(yùn)行,這樣完成了開(kāi)發(fā)板啟動(dòng)后自動(dòng)運(yùn)行系統(tǒng)程序的功能。配合看門狗技術(shù)的運(yùn)用,使系統(tǒng)在異常情況下能自動(dòng)恢復(fù),提高了系統(tǒng)的可靠性和自維護(hù)性。
4.4 數(shù)據(jù)通信
網(wǎng)絡(luò)監(jiān)聽(tīng)傳送數(shù)據(jù)與采集溫濕度、局部放電、噪聲等模塊在不同線程中獨(dú)立并行運(yùn)行。其中采集輸配電線溫度、局部放電與噪聲通過(guò)開(kāi)發(fā)板的串口通信實(shí)現(xiàn),根據(jù)采集設(shè)備的通信協(xié)議設(shè)置其串口。在Linux中,串口文件位于“/dev”下,直接通過(guò)open()打開(kāi)串口,設(shè)置串口可通過(guò)設(shè)置struct termios結(jié)構(gòu)體的各成員來(lái)實(shí)現(xiàn)。
串口程序設(shè)計(jì)的基本步驟:(1)打開(kāi)設(shè)備文件open();(2)獲取當(dāng)前設(shè)備方式tcgetattr();(3)設(shè)置termios成員c_
lflag、c_oflag、c_cflag等;(4)使用cfsetispeed和cfsetospeed通信設(shè)置波特率;(5)使用tcsetattr設(shè)置設(shè)備工作方式。當(dāng)串口設(shè)置好后,直接通過(guò)read()和write()即可與采集設(shè)備通信,通過(guò)發(fā)送命令獲得采集數(shù)據(jù)。
4.5 多線程控制
為了使各模塊之間獨(dú)立運(yùn)行并提高采集的效率和監(jiān)控的實(shí)時(shí)性,本系統(tǒng)采用多個(gè)線程并行通信的方式來(lái)實(shí)現(xiàn)控制。不同的線程間可以直接訪問(wèn)其他線程的數(shù)據(jù)[6],簡(jiǎn)化了控制的難度,其中采集環(huán)境溫度和濕度ThreadTH()、輸配電線溫度Threadtem()、噪聲Threadnoise()、局部放電threadJF()分別由4個(gè)線程進(jìn)行控制,另外再創(chuàng)建一個(gè)線程Threadcontrl()來(lái)控制采集的4個(gè)線程。當(dāng)4個(gè)線程中任何一個(gè)采集模塊出現(xiàn)故障時(shí),控制線程將結(jié)束該線程并重新創(chuàng)建新的線程來(lái)進(jìn)行采集。其線程控制結(jié)構(gòu)圖如圖5所示??刂品椒椋焊鞑杉K每完成一次采集就獲得一次系統(tǒng)時(shí)間,控制模塊也實(shí)時(shí)獲得系統(tǒng)時(shí)間,將控制模塊中獲得的時(shí)間與采集模塊中的時(shí)間間隔相比較,超過(guò)一定設(shè)定值后,則認(rèn)為該采集模塊出現(xiàn)故障,控制線程會(huì)結(jié)束該線程,延時(shí)片刻重新創(chuàng)建新線程進(jìn)行采集。
本系統(tǒng)選擇采用基于S3C6410為主處理器的開(kāi)發(fā)平臺(tái)和開(kāi)源的Linux作為嵌入式操作系統(tǒng),并完成交叉工具鏈的生成、驅(qū)動(dòng)程序的加載等。完成了AM2301驅(qū)動(dòng)程序的設(shè)計(jì)與開(kāi)發(fā),將驅(qū)動(dòng)程序移植到嵌入式開(kāi)發(fā)板中,實(shí)現(xiàn)溫、濕度數(shù)據(jù)實(shí)時(shí)采集功能。將采集溫/濕度、局部放電與采集噪聲各模塊相結(jié)合,完成了實(shí)時(shí)采集箱變環(huán)境參數(shù)的監(jiān)測(cè)系統(tǒng),并通過(guò)線程實(shí)時(shí)控制方法和一系列措施確保系統(tǒng)能夠長(zhǎng)期穩(wěn)定運(yùn)行,并具良好的擴(kuò)展性和通用性。
參考文獻(xiàn)
[1] 王彬,程雪.一種基于ARM的溫室數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì) [J].安徽農(nóng)業(yè)科學(xué),2011,39(12):7466-7467.
[2] 何燕陽(yáng).基于AM2301的消毒熏箱溫濕度控制系統(tǒng)設(shè)計(jì) [J].智能計(jì)算機(jī)與應(yīng)用,2012,2(4):2095-2163.
[3] 黃馳.基于ARM11和Linux的DS18B20溫度測(cè)量系統(tǒng)設(shè) 計(jì)及實(shí)現(xiàn)[J].軟件導(dǎo)航,2012,11(6):1672-7800.
[4] 劉繼忠,邱于兵,黃翔.基于ARM的遠(yuǎn)程溫濕度監(jiān)控系統(tǒng) 的設(shè)計(jì)[J].儀表技術(shù)與傳感器,2012(8):1002-1841.
[5] 宋寶華.Linux設(shè)備開(kāi)發(fā)詳解[M].北京:人民郵電出版社,2007.
[6] 吳宇佳,浦偉,周妍,等.Linux下多線程數(shù)據(jù)采集研究與實(shí)現(xiàn)[J].通信技術(shù),2012(7):1009-8054.