溫陽東, 王 恒
(合肥工業(yè)大學(xué)電氣與自動化工程學(xué)院,安徽合肥 230009)
電能作為一種二次能源,隨著社會的發(fā)展其使用量在大幅增加,伴隨而來的是電能的浪費十分嚴(yán)重。為科學(xué)使用電力資源,提高資源利用效率,國家住房和城市建設(shè)部、教育部等部門對高等學(xué)校校園建筑能耗審計和建筑能耗校園統(tǒng)計工作都提出了相關(guān)要求。本文介紹一個電能電量計量管理系統(tǒng)中智能數(shù)據(jù)網(wǎng)關(guān)設(shè)計的相關(guān)技術(shù)。
數(shù)據(jù)網(wǎng)關(guān)除具有電能量的采集和上傳功能外,還應(yīng)具有以下功能:支持?jǐn)?shù)據(jù)中心命令采集模式和主動定時發(fā)送模式;數(shù)據(jù)采集周期可配置為10 min至1 h;數(shù)據(jù)網(wǎng)關(guān)配置32 MB的存儲空間,以備網(wǎng)絡(luò)故障時存儲至少7 d的數(shù)據(jù);1臺數(shù)據(jù)網(wǎng)關(guān)實現(xiàn)對64個用戶的監(jiān)測、采集和上傳工作;實現(xiàn)網(wǎng)關(guān)功能的系統(tǒng)結(jié)構(gòu)框圖[1]如圖1所示。
LPC2292是一個支持實時仿真和跟蹤的16/32位的RISC處理器[2],內(nèi)置256 KB的高速片內(nèi)Flash存儲器和16 KB的SRAM,指令處理速度高達(dá)130 MIPS,同時支持32位的ARM指令集和16位的T HUMB指令集。通過對芯片的BOOT[1∶0]引腳進(jìn)行設(shè)置可以改變外部存儲器接口的寬度,方便與外擴(kuò)的存儲器連接。本次設(shè)計外擴(kuò)的32 MB存儲器是數(shù)據(jù)、地址和命令分時復(fù)用8位I/O口,固設(shè)置 BOOT[1∶0]=00。其自身帶有的2路UART接口滿足數(shù)據(jù)網(wǎng)關(guān)的設(shè)計要求,不需要進(jìn)行串口擴(kuò)展。
圖1 系統(tǒng)結(jié)構(gòu)框圖
CS8900A是Cirrus Logic公司生產(chǎn)的以太網(wǎng)控制器,支持全雙工通訊,內(nèi)部集成一個支持IEEE802.3協(xié)議標(biāo)準(zhǔn)的 MAC引擎。CS8900A工作過程[3,4]如下:①數(shù)據(jù)的接收。CS8900A接收從以太網(wǎng)傳來的數(shù)據(jù)幀后經(jīng)過解碼、去幀首和地址校驗等處理存入片內(nèi)緩存。在CRC校驗無誤后,通知主機(jī)收到數(shù)據(jù)幀,按約定的傳輸模式傳到主機(jī)的存儲區(qū)。②數(shù)據(jù)的發(fā)送。CS8900A收到主機(jī)發(fā)來的數(shù)據(jù)幀后,偵聽網(wǎng)絡(luò)是否“忙”。若“忙”,則等待直到空閑,否則立即發(fā)送數(shù)據(jù)幀。發(fā)送時,數(shù)據(jù)幀先被轉(zhuǎn)移到CS8900A的緩沖區(qū)轉(zhuǎn)換成以太網(wǎng)幀后放到網(wǎng)絡(luò)上。
經(jīng)過對LPC2292和CS8900A的分析,再加上外擴(kuò)的Flash存儲器、看門狗電路及實時時鐘等,構(gòu)成系統(tǒng)的電路原理圖。本次設(shè)計的數(shù)據(jù)網(wǎng)關(guān)原理圖核心部分如圖2所示。
圖2 以太網(wǎng)口和串口0部分原理圖
系統(tǒng)中所選用Flash存儲器的接口寬度為8 bits,為使整個系統(tǒng)數(shù)據(jù)總線寬度一致,CS8900A的/SBHE經(jīng)電阻拉到高電平使其數(shù)據(jù)線的高8 bits無效。
CS8900A支持 I/O模式、Memory模式和DMA模式3種傳輸模式,本次設(shè)計采用I/O模式。/MEMR和/MEMW 接 LPC2292的 I/O口,通過軟件使對應(yīng)I/O口輸出高電平關(guān)閉Memory模式。CS8900A讀寫控制引腳分別連接LPC2292的OE和WE引腳。CS8900A工作在8位模式時不支持中斷,設(shè)計中采用查詢方式接收從數(shù)據(jù)中心發(fā)來的數(shù)據(jù)。
為了使基于ARM的智能數(shù)據(jù)網(wǎng)關(guān)實現(xiàn)網(wǎng)絡(luò)化,必須在軟件中實現(xiàn) TCP/IP協(xié)議。TCP/IP協(xié)議作為Internet的核心協(xié)議,由于其體系結(jié)構(gòu)比OSI參考模型的體系結(jié)構(gòu)簡單實用[5],被廣泛應(yīng)用于局域網(wǎng)和廣域網(wǎng)中,已經(jīng)成為事實上的國際標(biāo)準(zhǔn)。TCP/IP采用層次化的體系結(jié)構(gòu),從低到高分別是鏈路層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層。
通用計算機(jī)系統(tǒng)有足夠的軟硬件資源支持TCP/IP協(xié)議族在其內(nèi)核實現(xiàn),但嵌入式系統(tǒng)資源相對有限,必須對標(biāo)準(zhǔn)的TCP/IP協(xié)議進(jìn)行裁剪。
2.2.1 以太網(wǎng)接口協(xié)議的實現(xiàn)
鏈路層主要是從上層協(xié)議接收或向上層協(xié)議發(fā)送數(shù)據(jù)包。本次設(shè)計采用以太網(wǎng)技術(shù),因此要實現(xiàn)IEEE802.3所規(guī)定的CSMA/CD協(xié)議。由于CS8900A內(nèi)部集成MAC引擎可以從硬件上實現(xiàn)以太網(wǎng)協(xié)議,所以驅(qū)動程序主要完成芯片初始化、數(shù)據(jù)的發(fā)送和接收。分別用以下3個函數(shù)實現(xiàn)[6]:
(1)uint8 InitNic(void):網(wǎng)卡初始化函數(shù)。負(fù)責(zé)實現(xiàn)網(wǎng)絡(luò)接口層、下層物理設(shè)備驅(qū)動和數(shù)據(jù)結(jié)構(gòu)的初始化。
(2)void Send-Packet(struct-pkst*Txd-Data)發(fā)送函數(shù)。根據(jù)上層協(xié)議類型、源MAC地址及目的MAC地址對數(shù)據(jù)進(jìn)行打包,然后調(diào)用網(wǎng)卡發(fā)送函數(shù)發(fā)送數(shù)據(jù)包。
(3)uint8 Rec-Packet():接收函數(shù)。對接收到的數(shù)據(jù)包進(jìn)行解包,并由處理器執(zhí)行命令。
2.2.2 網(wǎng)絡(luò)層協(xié)議的實現(xiàn)
網(wǎng)絡(luò)層主要負(fù)責(zé)處理數(shù)據(jù)包在網(wǎng)絡(luò)層的活動。IP協(xié)議作為TCP/IP協(xié)議的核心[6],為主機(jī)之間發(fā)送數(shù)據(jù)報提供無連接的不可靠的傳輸服務(wù),傳輸?shù)目煽啃砸蕾嚿蠈訁f(xié)議來保證,并且對TCP和ICMP報文實行分流。ICMP協(xié)議中的Ping程序是用來測試2臺主機(jī)之間在網(wǎng)絡(luò)層是否連通的常用工具。它使用ICMP請求報告和應(yīng)答報告來測試信宿是否可達(dá),因此本次在ICMP中只實現(xiàn)Ping應(yīng)答功能。另外系統(tǒng)需要實現(xiàn)ARP應(yīng)答協(xié)議,把節(jié)點的IP地址解析成對應(yīng)的以太網(wǎng)MAC地址。
(1)IP協(xié)議的實現(xiàn)。本協(xié)議主要完成如下2個功能[7]:對接收的IP數(shù)據(jù)報首部進(jìn)行校驗和檢查;對IP數(shù)據(jù)報進(jìn)行解析。針對本次設(shè)計,IP層只要識別是ICMP報還是TCP報,然后把報文交給相應(yīng)的協(xié)議進(jìn)行處理。主要函數(shù)有:①uint16 CreateIpHeadCrc(uint8*Ip),數(shù)據(jù)發(fā)送之前或接收之后調(diào)用此函數(shù)進(jìn)行校驗和計算;②uint8 Send-Ip-Frame(struct-pkst*TxdData,uint8*de-ip,uint8*so-ip,uint8 PROTOCOL):發(fā)送函數(shù) ,把所要發(fā)送的數(shù)據(jù)進(jìn)過處理后上傳給TCP;③uint8 IP-PROCESS(uint8*RecData,uint8 num):接收函數(shù),處理從TCP層接收的數(shù)據(jù)。
(2)ARP協(xié)議的實現(xiàn)。本協(xié)議負(fù)責(zé)為網(wǎng)絡(luò)上的主機(jī)建立并維護(hù)一張IP地址到MAC地址的映射表[8]。主要函數(shù)有:①uint8 Arp-Answer(uint8*ARP-REC-PT R,uint8 num),對ARP請求報文的應(yīng)答;②void Arp-Request(uint8*ip-address,uint8 num),根據(jù)IP地址在ARP緩存表中查找MAC地址,若未找到則自動向網(wǎng)絡(luò)廣播ARP請求。
2.2.3 傳輸層協(xié)議的實現(xiàn)
傳輸層為2臺主機(jī)上對應(yīng)的應(yīng)用程序之間提供端到端的數(shù)據(jù)通信。本層包含傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報協(xié)議(UDP)2個主要協(xié)議。
TCP協(xié)議提供一種面向連接的、可靠的、全雙工數(shù)據(jù)傳輸服務(wù),保證端到端數(shù)據(jù)傳輸?shù)目煽啃浴5⒁粋€TCP連接需要3次握手過程,而釋放一個TCP連接需要4次握手過程。
UDP協(xié)議是一種面向無連接的、不可靠的傳輸協(xié)議。就實時性和傳輸速度而言,UDP協(xié)議更適合嵌入式系統(tǒng),但本次設(shè)計的數(shù)據(jù)網(wǎng)關(guān)對可靠性要求更高,采用TCP協(xié)議。
TCP協(xié)議數(shù)據(jù)傳輸分為建立連接、傳輸數(shù)據(jù)和斷開連接3個階段。本協(xié)議是協(xié)議族中最復(fù)雜的協(xié)議,它的實現(xiàn)過程可用狀態(tài)機(jī)描述。程序中構(gòu)造一個Socket-Type結(jié)構(gòu)來記錄TCP連接的狀態(tài)信息,具體代碼略。
圖3所示為數(shù)據(jù)網(wǎng)關(guān)發(fā)送數(shù)據(jù)時TCP/IP協(xié)議實現(xiàn)過程的流程圖[9],具體實現(xiàn)時采用“零拷貝”(zero-copy)原理[10],各層之間傳遞的都是數(shù)據(jù)指針,只有數(shù)據(jù)被發(fā)送或者被用戶應(yīng)用程序取走時才進(jìn)行數(shù)據(jù)搬移。接收數(shù)據(jù)的過程是此過程的逆向處理過程,按照協(xié)議格式進(jìn)行解包等。
圖3 TCP/IP協(xié)議實現(xiàn)過程流程圖
本次設(shè)計的網(wǎng)關(guān)采用前后臺系統(tǒng),應(yīng)用程序是一個無限循環(huán),在循環(huán)中調(diào)用各個功能模塊完成各自的任務(wù)。在這一部分主要論述串口和以太網(wǎng)口的軟件設(shè)計和調(diào)試。
串口實現(xiàn)數(shù)據(jù)網(wǎng)關(guān)和電表的通訊。具體過程是:①初始化串口UART0,在主函數(shù)中調(diào)用發(fā)送查詢電表命令的函數(shù)。周期查詢的時間在定時器中斷中控制,若是單電表查詢,則根據(jù)上位機(jī)傳來的電表號直接調(diào)用發(fā)送查詢命令的函數(shù)。電表收到查詢命令后,回傳數(shù)據(jù),觸發(fā) UART0接收中斷,數(shù)據(jù)的接收在中斷中完成,實現(xiàn)網(wǎng)關(guān)與電表通訊的流程圖如圖4所示。②通過串口調(diào)試工具監(jiān)測,測試結(jié)果如圖5所示。
測試中設(shè)定本網(wǎng)關(guān)監(jiān)測1~10號表,三相表或者單相表通過接收數(shù)據(jù)包中的控制碼區(qū)別。通過對圖5的數(shù)據(jù)進(jìn)行分析可知,1號表為正常工作的三相表;2號表為三相表,發(fā)送2次查詢命令,無數(shù)據(jù)回傳將其置為故障狀態(tài);3號表為集中式單相表,24個用戶。電表的相數(shù)、表號、狀態(tài)等用一個結(jié)構(gòu)體來定義,即
typedef struct
{
uint8 State-Type;//0x01單相表,0x02三相表,0x10正常工作,0x20故障
uint8 Number[6];//表號
uint8 RouteNum;//單相表所上傳的電度路數(shù),三相表無效
}meter
網(wǎng)關(guān)與數(shù)據(jù)中心的通訊連接采用Socket長連接方式,無數(shù)據(jù)傳輸時每80 s發(fā)1次心跳包。圖6所示為通過軟件模擬數(shù)據(jù)中心向網(wǎng)關(guān)發(fā)送批量查詢的測試結(jié)果。圖6中第1行數(shù)據(jù)為數(shù)據(jù)中心發(fā)送的批量查詢命令;第2行為網(wǎng)關(guān)回復(fù)的任務(wù)號和電表狀態(tài),包括正常工作或者故障;第3行及以下是網(wǎng)關(guān)回復(fù)內(nèi)容,包括批量查詢的前導(dǎo)字符40、任務(wù)號、數(shù)據(jù)采集時間、表號及電表所要上傳的數(shù)據(jù)。通過對數(shù)據(jù)的分析比較可知,上傳的數(shù)據(jù)與電表采集的數(shù)據(jù)完全一致。
圖6 網(wǎng)關(guān)與數(shù)據(jù)中心通訊的數(shù)據(jù)截圖
本文設(shè)計的智能數(shù)據(jù)網(wǎng)關(guān)構(gòu)建的示范系統(tǒng)已投入運(yùn)行,該智能數(shù)據(jù)網(wǎng)關(guān)結(jié)構(gòu)簡單、可靠性高、實時性好,能滿足數(shù)據(jù)中心對電能參數(shù)的實時監(jiān)測和傳輸?shù)囊?具有很好的推廣價值。
[1]樊江濤,陳劍云.ARM處理器+DSP構(gòu)架的微機(jī)饋線保護(hù)裝置的研制[J].電力系統(tǒng)自動化,2005,29(2):78-79.
[2]韓 山,郭 云.ARM 微處理器應(yīng)用開發(fā)[M].北京:清華大學(xué)出版社,2007:8-21.
[3]陳 鵬,張愛民.基于以太網(wǎng)控制器CS8900A實現(xiàn)嵌入式系統(tǒng)的網(wǎng)絡(luò)互連[J].計算機(jī)應(yīng)用,2002,28(12):4-6.
[4]葛辛欣.基于CS8900A的嵌入式網(wǎng)絡(luò)接口模塊設(shè)計[J].北京工商大學(xué)學(xué)報:自然科學(xué)版,2008,26(3):54-56.
[5]Nguyen V I,Benjapolakul W,Visavateeranon K.A highspeed,low-cost and secure implementation based on embedded Ethernet and Internet for SCADA systems[C]//SICE Annual Conference,2007:1692-1699.
[6]Potlapally N R,Ravi S,Raghunathan A.Cofiguration and extension of embedded processors to optimize IPSec protocol execution[J].IEEE Transactions on Very Large Scale Integraion(VLSI)Systems,2007,15(5):605-609.
[7]王原麗,王 麗.基于 ARM 的嵌入式 TCP/IP協(xié)議棧的實現(xiàn)[J].現(xiàn)代電子技術(shù),2005,(22):4-6.
[8]雷必成.嵌入式系統(tǒng)中 TCP/IP協(xié)議棧的精簡與實現(xiàn)[J].微計算機(jī)信息,2006,22(17):107-109.
[9]周立功.A RM嵌入式系統(tǒng)軟件開發(fā)實例[M].北京:北京航空航天大學(xué)出版社,2004:436-452.
[10]季 琦,金小輝.嵌入式 T CP/IP協(xié)議棧的設(shè)計與實現(xiàn)[J].電子元器件應(yīng)用,2008,(8):53-56.
合肥工業(yè)大學(xué)學(xué)報(自然科學(xué)版)2010年6期