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