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