以太網(wǎng)網(wǎng)關(guān)節點(diǎn)在節能計量系統中的設計
作者:北京博控自動(dòng)化技術(shù)有限公司技術(shù)總監 劉楷
背 景
能耗監測系統:指通過(guò)對建筑和大型公共建筑安裝分類(lèi)和分項能耗計量裝置,采用遠程傳輸等手段及時(shí)采集能耗數據,實(shí)現重點(diǎn)建筑能耗的在線(xiàn)監測和動(dòng)態(tài)分析功能的硬件系統和軟件系統的統稱(chēng)。
能耗監控的技術(shù)核心在于能耗優(yōu)化,而優(yōu)化的前提是準確的能耗計量以及優(yōu)化過(guò)程中能耗的計量。這樣由傳統意義上的“抄表”這樣簡(jiǎn)單的數據集中演變成了“在線(xiàn)數據匯總與控制”,這就對網(wǎng)絡(luò )提出了更高的要求。
首先,要求網(wǎng)絡(luò )雙向速度。其次,要求靈活的網(wǎng)絡(luò )架構。第三要求網(wǎng)絡(luò )能容納足夠的節點(diǎn)。
下圖就是一個(gè)典型的網(wǎng)絡(luò )示意圖:
對于每個(gè)建筑或者相對獨立的WPAN內部可以使用無(wú)線(xiàn)、PLC或者以太網(wǎng)和無(wú)線(xiàn)混合組網(wǎng)方式。WPAN內部的結構如下圖所示:
圖中采集節點(diǎn)隨著(zhù)能耗采集和控制方式演變也有多種形式,從最開(kāi)始的公共建筑和廠(chǎng)礦中的三項電表,到如下圖所示家用、辦公室用的采集插座和無(wú)線(xiàn)燈控,越來(lái)越多。
整個(gè)系統中計量的核心在于具有數據匯聚和處理功能,并且保證PAN和WAN連接的網(wǎng)關(guān)節點(diǎn)。
下面我們就重點(diǎn)討論網(wǎng)關(guān)的設計。
設 計
網(wǎng)關(guān)節點(diǎn)的內部結構如下:
這部分內容從函數的級別詳細解釋了代碼。我們將分別解釋PAN Co-ordinator和End Device的代碼。
config.h頭文件將被引用到兩個(gè)源代碼文件中,同時(shí)兩個(gè)源代碼文件也引用了以下的頭文件:
jendefs.h, AppHardwareApi.h, AppQueueApi.h, mac_sap.h, mac_pib.h
coordinator.c的內容
開(kāi)發(fā)者最常問(wèn)的問(wèn)題之一就是為什么Jennic的程序都沒(méi)有Main函數,這個(gè)熟悉的函數哪里去了呢?這是因為Jennic程序都由boot loader來(lái)啟動(dòng)和引導,boot loader引導完成后就將自動(dòng)的調用AppColdStart函數,您可以認為AppColdStart就是我們通常所說(shuō)的Main()。
AppColdStart將進(jìn)行下面的操作:
1.AppColdStart將調用函數vInitSystem(),這一函數將完成以下任務(wù):
初始化設備的IEEE 802.15.4的協(xié)議棧
設置PAN ID和PAN Co-ordinator的短地址,在這個(gè)應用中這些參數都由我們預定義在config.h這個(gè)文件中
打開(kāi)射頻接收器
使Co-ordinator可以接受其他的設備加入網(wǎng)絡(luò )
2.AppColdStart()會(huì )調用vStartEnergyScan(),這一函數將會(huì )開(kāi)始在各個(gè)通道進(jìn)行能量掃描以獲得各個(gè)通道的能量級別。所掃描的通道以及速率都定義在config.h中。掃描將通過(guò)初始化一個(gè)MLME請求并將其發(fā)送給IEEE 802.15.4的MAC層來(lái)實(shí)現。
3.AppColdStart()將通過(guò)調用vProcessEventQueues()的方式等待MLME的回應。vProcessEventQueues()函數將檢查三個(gè)不同類(lèi)型的事件隊列并將接到的事件交給不同的事件處理函數處理。比如這個(gè)函數將調用vProcessIncomingMlme()函數來(lái)處理MLME回應。 而這個(gè)函數將調用vHandleEnergyScanResponse()來(lái)處理能量檢測掃描的回應結果。這個(gè)函數將檢查所有通道的能量級別,并挑選一個(gè)最安靜的通道作為建立網(wǎng)絡(luò )的通道。接下來(lái)將調用vStartCoordinator()函數,這個(gè)函數將設置必要的參數并且遞交MLME請求來(lái)啟動(dòng)網(wǎng)絡(luò ),啟動(dòng)網(wǎng)絡(luò )的請求不需要處理任何的回復信息。
4.AppColdStart()循環(huán)調用vProcessEventQueues()來(lái)等待其他設備的加入網(wǎng)絡(luò )的請求,入網(wǎng)請求將以MLME請求的方式發(fā)送到codinator.當請求到達的時(shí)候函數將調用vHandleNodeAssociaTIon來(lái)處理。接下來(lái)codinator將創(chuàng )建并發(fā)送入網(wǎng)請求回復。
5.AppColdStart將循環(huán)調用vProcessEventQueues來(lái)處理來(lái)自于MCPS的消息隊列和來(lái)自于硬件的消息隊列。
當數據到達MCPS隊列后,vProcessEventQueues首先調用函數vProcessIncomingMcps()來(lái)接收到達的數據幀.vProcessIncomingMcps()調用vHandleMcpsDataInd(),這個(gè)函數將調用vProcessReceivedDataPacket,在這個(gè)函數里面您可以自定義您自己的數據處理過(guò)程。
當硬件事件到達硬件隊列后,vProcessEventQueues將調用函數vProcessIncomingHwEvent來(lái)接收到來(lái)的事件。您需要在這個(gè)函數中自定義自己的事件處理過(guò)程。
您可以參考下面的示意圖來(lái)理解
圖4-4-9 Coordinator程序流程圖
enddevice.c的內容介紹
End Device的運行過(guò)程仍然是從AppColdStart開(kāi)始。這一函數和Co-ordinator的運行方式完全的不同,下面將詳細的講解這個(gè)過(guò)程。
1.AppColdStart調用vInitSystem,這個(gè)函數將初始化IEEE 802.15.4的協(xié)議棧
2.AppColdStart()調用vStartAcTIveScan()開(kāi)始對于活動(dòng)通道的掃描, End Device將向掃描的通道發(fā)送信標請求,并接收PAN Co-ordinator的信標請求回應。需要掃描的通道和速率將在config.h中定義。掃描請求的初始化和發(fā)送的工作可以通過(guò)MLME請求的方式通過(guò)IEEE 802.15.4的MAC層發(fā)送。
3.AppColdStart()將通過(guò)vProcessEventQueues來(lái)檢查和處理MLME回應。這個(gè)函數將調用vProcessIncomingMlme()來(lái)處理收到的MLME回應。vHandleAcTIveScanResponse()會(huì )被調用處理返回的活動(dòng)通道掃描結果:
如果找到PAN Co-ordinator,函數將保存相應的Co-ordinator信息(比如 PAN ID,短地址,邏輯通道),并且調用vStartAssociate()向Co-ordinator來(lái)提交入網(wǎng)請求,這一請求將通過(guò)MLME請求的方式提交。
如果PAN Co-ordinator沒(méi)有被找到(可能是由于Co-ordinator還沒(méi)有初始化完成)。這一函數將重新調用vStartAcTIveScan()來(lái)重新啟動(dòng)掃描。
4. AppColdStart將循環(huán)的調用vProcessEventQueues()等待來(lái)自Co-ordinator的入網(wǎng)回復。當收到回復后就將調用vProcessIncomingMlme(),然后將調用vHandleAssociateResponse來(lái)處理回復,接下來(lái)的函數將檢查回復的狀態(tài):
如果PAN Co-ordinator接受的入網(wǎng)請求,將設備置于聯(lián)網(wǎng)狀態(tài)。
如果PAN Co-ordinator拒絕了入網(wǎng)的請求,函數就將重新調用vStartActiveScan()來(lái)開(kāi)始搜索另外一個(gè)PAN Co-ordinator。
5. AppColdStart()接下來(lái)將循環(huán)的調用vProcessEventQueues來(lái)等待來(lái)自于PAN Co-ordinator的MCPS信息或者硬件的隊列信息。
當數據到達了MCPS隊列,vProcessEventQueue()首先使用函數vProcessIncomingMcps()來(lái)接收數據幀,接著(zhù)調用vHandleMcpsDataInd(),接著(zhù)調用vProcessReceivedDataPacket(),開(kāi)發(fā)人員可以在這個(gè)函數里面編寫(xiě)自己的數據處理過(guò)程。
當硬件事件到達硬件事件隊列,vProcessEventQueues()將調用vProcessIncomingHwEvent()來(lái)接收到達的事件,您可以在這個(gè)過(guò)程中編寫(xiě)自己的事件處理邏輯。
下面的圖表示了End Device的工作過(guò)程。
圖4-4-10 EndDevice程序流程
W5500驅動(dòng):
Coordinator作為網(wǎng)絡(luò )的中心,通常也是數據匯聚的中心。因為我們在Coor的代碼中加入W5500的操作。
硬件連接上W5500作為SPI Slave工作,使用IO管腳如下:
在系統的初始化vInitSystem()中加入W5500的初始化,
// 初始化和W5500連接的SPI
vAHI_SpiConfigure(1, E_AHI_SPIM_MSB_FIRST, E_AHI_SPIM_TXPOS_EDGE,
E_AHI_SPIM_RXPOS_EDGE, 1, E_AHI_SPIM_INT_DISABLE,
E_AHI_SPIM_AUTOSLAVE_DSABL);
使用Eclipse IDE環(huán)境,在工程文件中添加W5500的驅動(dòng):
圖4-4-11 Eclipse IDE
在工程導航欄可以看到:
圖4-4-12 工程導航
然后,把wizchip_conf.c中的接口代碼替換為JN5168的SPI函數:
void wizchip_cs_select(void)
{
/* select slave 1*/
vAHI_SpiSelect(E_AHI_SPIM_SLAVE_ENBLE_1);
};
void wizchip_cs_deselect(void)
{
vAHI_SpiStop();
};
uint8_t wizchip_spi_readbyte(void)
{
u8AHI_SpiReadTransfer8();
return 0;
};
void wizchip_spi_writebyte(uint8_t wb)
{
vAHI_SpiStartTransfer8(wb);
};
這樣就完成了代碼,我們可以看到無(wú)線(xiàn)IEEE802.15.4和以太網(wǎng)W5500的數據轉接。
結 論
在使用W5500后我們極大的簡(jiǎn)化了WPAN網(wǎng)關(guān)設計,這樣保證了通訊速率和可靠性的要求下,用簡(jiǎn)單的結構詮釋了“簡(jiǎn)單就是可靠”的道理。
——本文選自電子發(fā)燒友網(wǎng)4月《物聯(lián)網(wǎng)技術(shù)特刊》透視新設計欄目,轉載請注明出處,違者必究!
評論