<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于Modbus協(xié)議的ZigBee/工業(yè)以太網(wǎng)網(wǎng)關(guān)設計

基于Modbus協(xié)議的ZigBee/工業(yè)以太網(wǎng)網(wǎng)關(guān)設計

作者: 時(shí)間:2016-12-20 來(lái)源:網(wǎng)絡(luò ) 收藏

3.2 地址映射

對于ZigBee 設備,有其IEEE 地址和16 位短地址。設計中將ZigBee16 位短地址與Modbus 從站地址綁定,從而實(shí)現Modbus 主、從各節點(diǎn)之間地址定向。具體是將一系列Modbus 從 站地址和ZigBee 短地址以配置文件config.txt 下裝到FLASH,網(wǎng)關(guān)在初始化時(shí),讀取配置文件 內容,存儲在數組中。數組形式為:

char ModbusZigbee_Addr[ ][3]=

[{ModbusAddr0,shortAdd0H, shortAdd0L},……{ ModbusAddrn,shortAddnH,shortAddnL}]

接收UDP 報文后,讀取報文中的Modbus 從站地址,檢索數組得到與之匹配的 ModbusAddrx(ModbusAddr0 到ModbusAddrn 中查找),從而讀取該從站ZigBee 短地址 shortAddxH、 shortAddxL。該短地址將附加在所接收的UDP 報文之前,一同作為串行通信 口的轉發(fā)報文。

config.txt 文件中,Modbus 從站地址和ZigBee 短地址在存儲時(shí)以空格間隔,文件以#結 束。數組的第一維長(cháng)度在讀取文件后確定,定義為Device_Number。檢索ZigBee 短地址函 數如下:

int ZigBee_Search(char Modbusaddr)

{int i=0;

For(i=0;i

{If(Addr[i][0]== ModbusAddr)

return i ;

}

return Device_Number }

Addr[i][1]、Addr[i][2]為對應的ZigBee 短地址。返回值為Device_Number 表示未檢索到。

3.3 緩沖區設計及數據接收轉發(fā)

為了解決以太網(wǎng)口和串行通信口速度配合上,以及解除串口與以太網(wǎng)口耦合,設計了兩 個(gè)環(huán)形隊列作為UDP 接收緩沖區和串口接收緩沖區(用宏Buffer_Size 定義)。緩沖區仿雙口 RAM 思想、按照先進(jìn)先出(FIFO)原則設計。 UDP 接收緩沖區同時(shí)是串口發(fā)送數據區。 緩沖區結構為:

char UDP_ReceiveBuffer[Buffer_Size]=

[SendNumber1,shortAddxH,shortAddxL,ModbusAddrx,Funcodex,……

……SendNumbern,shortAddxH,shortAddxL,ModbusAddrx,Funcodex]

ModbusAddrx 開(kāi)始為所接收的UDP 報文,即完整的Modbus/RTU 數據。shortAddxH 和shortAddxL 為ZigBee 短地址,SendNumberx 為UDP 報文長(cháng)度加2,即串口要轉發(fā)的數據長(cháng) 度。每次接收的UDP 報文都附加ZigBee 短地址和SendNumberx 這3 個(gè)字節存放在緩沖區 中。UDP 接收緩沖區設置了當前存儲數據指針(int UDP_Location),始終指向當前存儲數據 尾部。類(lèi)似,針對串口轉發(fā),設置了當前發(fā)送數據指針(int Serial_Location)始終指向已經(jīng) 發(fā)送數據尾部。系統默認Modbus/RTU 數據幀長(cháng)度不大于256。指針大于Buffer_Size 以后 均回零,此后,原來(lái)的報文陸續被覆蓋?!按诎l(fā)送”任務(wù)判斷兩指針是否重合,決定是否 啟動(dòng)串口轉發(fā)。UDP 口接收報文部分程序如下。

點(diǎn)擊放大圖片

串口接收緩沖區設計類(lèi)似。由于數據通過(guò)固定的端口和IP 地址轉發(fā),存儲數據中不再 包含類(lèi)似于Zigbee 地址的數據項。

3 結束語(yǔ)

本文設計適當調整可以用于更多場(chǎng)合。如,動(dòng)態(tài)管理地址綁定數組,可以適應動(dòng)態(tài)組網(wǎng);數組中增加IP 地址、端口號等可適應其他類(lèi)型報文;調整緩沖區大小可以適應不同尺寸報 文收發(fā)等。 經(jīng)過(guò)多年的重點(diǎn)扶持,我國工業(yè)以太網(wǎng)研究已經(jīng)取得大量成果并廣泛應用。目前,工業(yè) 無(wú)線(xiàn)通信技術(shù)也列為我國“十一五”863 重點(diǎn)研究項目,ZigBee 等技術(shù)也將逐步廣泛應用于 工業(yè)自動(dòng)化領(lǐng)域。本系統開(kāi)發(fā)基于市場(chǎng)現有的通用技術(shù),對中小型控制系統開(kāi)發(fā)和改造有借 鑒意義。

文章創(chuàng )新點(diǎn):提出了一種簡(jiǎn)潔方便的 Zigbee/以太網(wǎng)接入方案,應用地址映射、環(huán)形緩 沖隊列等解決了Zigbee 通信與以太網(wǎng)通信速度協(xié)調技術(shù)。


上一頁(yè) 1 2 下一頁(yè)

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>