基于Modbus协议的ZigBee/工业以太网网关设计
3.2 地址映射
对于ZigBee 设备,有其IEEE 地址和16 位短地址。设计中将ZigBee16 位短地址与Modbus 从站地址绑定,从而实现Modbus 主、从各节点之间地址定向。具体是将一系列Modbus 从 站地址和ZigBee 短地址以配置文件config.txt 下装到FLASH,网关在初始化时,读取配置文件 内容,存储在数组中。数组形式为:
char ModbusZigbee_Addr[ ][3]=
[{ModbusAddr0,shortAdd0H, shortAdd0L},……{ ModbusAddrn,shortAddnH,shortAddnL}]
接收UDP 报文后,读取报文中的Modbus 从站地址,检索数组得到与之匹配的 ModbusAddrx(ModbusAddr0 到ModbusAddrn 中查找),从而读取该从站ZigBee 短地址 shortAddxH、 shortAddxL。该短地址将附加在所接收的UDP 报文之前,一同作为串行通信 口的转发报文。
config.txt 文件中,Modbus 从站地址和ZigBee 短地址在存储时以空格间隔,文件以#结 束。数组的第一维长度在读取文件后确定,定义为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 缓冲区设计及数据接收转发
为了解决以太网口和串行通信口速度配合上,以及解除串口与以太网口耦合,设计了两 个环形队列作为UDP 接收缓冲区和串口接收缓冲区(用宏Buffer_Size 定义)。缓冲区仿双口 RAM 思想、按照先进先出(FIFO)原则设计。 UDP 接收缓冲区同时是串口发送数据区。 缓冲区结构为:
char UDP_ReceiveBuffer[Buffer_Size]=
[SendNumber1,shortAddxH,shortAddxL,ModbusAddrx,Funcodex,……
……SendNumbern,shortAddxH,shortAddxL,ModbusAddrx,Funcodex]
ModbusAddrx 开始为所接收的UDP 报文,即完整的Modbus/RTU 数据。shortAddxH 和shortAddxL 为ZigBee 短地址,SendNumberx 为UDP 报文长度加2,即串口要转发的数据长 度。每次接收的UDP 报文都附加ZigBee 短地址和SendNumberx 这3 个字节存放在缓冲区 中。UDP 接收缓冲区设置了当前存储数据指针(int UDP_Location),始终指向当前存储数据 尾部。类似,针对串口转发,设置了当前发送数据指针(int Serial_Location)始终指向已经 发送数据尾部。系统默认Modbus/RTU 数据帧长度不大于256。指针大于Buffer_Size 以后 均回零,此后,原来的报文陆续被覆盖。“串口发送”任务判断两指针是否重合,决定是否 启动串口转发。UDP 口接收报文部分程序如下。
串口接收缓冲区设计类似。由于数据通过固定的端口和IP 地址转发,存储数据中不再 包含类似于Zigbee 地址的数据项。
3 结束语
本文设计适当调整可以用于更多场合。如,动态管理地址绑定数组,可以适应动态组网;数组中增加IP 地址、端口号等可适应其他类型报文;调整缓冲区大小可以适应不同尺寸报 文收发等。 经过多年的重点扶持,我国工业以太网研究已经取得大量成果并广泛应用。目前,工业 无线通信技术也列为我国“十一五”863 重点研究项目,ZigBee 等技术也将逐步广泛应用于 工业自动化领域。本系统开发基于市场现有的通用技术,对中小型控制系统开发和改造有借 鉴意义。
文章创新点:提出了一种简洁方便的 Zigbee/以太网接入方案,应用地址映射、环形缓 冲队列等解决了Zigbee 通信与以太网通信速度协调技术。
评论