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