1、新疆大学创新实验室 Walfred 整理 2010.10新疆大学创新实验室 Walfred 整理 2010.10现代世界是一个高速自动化的世界,各种各样的设备除了可以与计算机联机外,还可以互相联机,而最简单的自动化联机方式就是使用串行通讯。随着时代的进步,它并没有被取代,反倒是逐渐被广泛应用。如今,在许多的场合有线连接的方式已经不能满足科技的高速发展。无线技术正以一种快速的速度进入许多产品,它与有线相比主要有成本低,携带方便,省去有线布线的烦恼。特别适用于手持设备的通信、电池供电设备、遥控、遥测、小型无线网络、无线抄表、门禁系统、小区传呼、工业数据采集系统、无线标签身份识别、非接触 RF 智能
2、卡、小型无线数据终端、安全防火系统、无线遥控系统、生物信号采集、水文气象监控、机器人控制、无线 232 数据通信、无线 485/422 数据通信、无线数字语音、数字图像传输、智能小区不停车收费、银行智能回单系统等。在如此多的无线系统应用中,无线通信的协议自然显得特别重要,无线通信协议的好坏直接关系到系统的安全性、误码率、以及系统运行的速度。本文以上海桑博科技有限公司的 STR-2 无线收发模块为例,详细介绍无线收发模块与各种单片机的硬件接口设计,点对多点无线通信协议的数据打包格式、解包程序以及相关软件设计。系统概述一连状点对多点系统如图 1 系统由一台中央监控设备 CMS (Central M
3、onitoring System)和多台远程终端设备MRTU(Multiple Remote Termial Unit)构成点对多点多任务无线通信系统。在中央监控设备CMS 与 远程终端 RTU(Remote Termial Unit)之间用多台中转设备 Tran 作为中转站,以便起到暂存数据和延伸距离的作用。中转站之间,以单向通信方式进行传递数据。1适用范围a.适用于传输距离远的多点多任务数据采集b.适用于条件恶劣干扰大多点多任务数据采集c.适用于对时间要求不高的各种复杂无线数传d.适用于智能小区水、电、煤、暖气集中抄表系统,各种远程集中安防报警系统等。2.协议数据包格式协议的笫一件事就是能
4、够识别噪声和有效数椐,噪声是以随机字节出现的,没有明显的结合方式,噪声源可能产生任意字节的组合,在无线通信的过程中最好能通过一种协议能有效的抑制噪声的产生通过测试和试验,发现 0xFF 后跟 0XAA,0x55 在噪声中不容易发生,传输协议应该在数据包前加开始字节 0xFF 后跟 0xAA,0x55 发送协议的开始应该以一个任意内容的字节 (这是因为第一个字节的数椐在发送时容易丢失),然后是 0xFF 后跟一个 0xAA,0x55;接收协议规定只接收以 0xFF 后跟 0xAA,0x55 开始的包.于是就可以很方便的把以上系统的数据包格式定为:Lead1 Lead2 Lead2 Header
5、Length HostID Local Destinationunit Data1 Data2 Datan ChecksumLead 为引导字节Leader1=0xFF;Leader2=0xAA;Leader2=0x55;Header 为数据包的命令字节,由此确定数据包的类型Length 为数据包包含的 Length 字节之后的所有字节的长度新疆大学创新实验室 Walfred 整理 2010.10新疆大学创新实验室 Walfred 整理 2010.10HostID 为主机地址Local 为本地机地址Destination 目标地址Unit 为 RTU 地址字节Data 位数据包字节Checks
6、um 校验字节二 星状点对多点通信如图 2 系统由一台中央监控设备 CMS 和多台远程终端设备 MRTU 构成点对多点多任务无线通信系统。在中央监控设备 CMS 与 每一台远程终端 RTU(Remote Termial Unit)都以双向通信方式进行传递数据。特别适用于数据量大,对时间要求较高的场合。1 适用范围a. 适用于传输距离较近的地方a.适用于条件恶劣干扰大的地方b.适用于对时间要求高、数据量大的场合c.适用于智能小区水、电、煤、暖气集中抄表系统,各种远程集中安防报警系统等d.适用于智能家用集中控制系统e.工业测控、工业数据采集f. 医疗器械、健身器材g.数据仓库、智能商场超市导购h.
7、餐饮无线点菜系统i.PDA 无线数传j.水纹气象监控k.生物信号采集l.油田环境监控m.银行智能回单系统等2协议数据包格式根据图 2 可以把系统的数据包格式定为:Lead1 Lead2 Lead2 Header Length UnitData1 Data2 Datan Checksum Lead 为引导字节Leader1=0xFF;Leader2=0xAA;Leader2=0x55;Header 为数据包的命令字节,由此确定数据包的类型Length 为数据包包含的 Length 字节之后的所有字节的长度Unit 为 RTU 地址字节Data 位数据包字节Checksum 校验字节硬件设计新疆大
8、学创新实验室 Walfred 整理 2010.10新疆大学创新实验室 Walfred 整理 2010.10上海桑博电子科技有限公司 STR-2 RF Module 的核心部分为 nRF401,外加精心设计的内置天线,体积为 37mm x 47mm,具有体积小,功耗低的特点,传输距离为 200 米,传输最大速率为 20kbit/s,外围接口电路简单,可直接与单片机的通用串行总线(UART )口连接。如图 3 所示 STR-2 RF Module 引脚功如下:VCC:正电源,接 2.75.25VCS: 频道选择,CS=0 选择工作频道 1 即 433.92MHZ,CS=1 选择工作频道 2 即43
9、3.33MHZDOUT: 数据输出,连接 MCU 串口 RXDDIN:数据输入,连接 MCU 串口 TXDGND: 电源地PWR: 节能控制, PWR=1 正常工作状态,PWR=0 低功耗状态TXN:发射接收控制,TXN=1 时模块为发射状态,TXN=0 时模块为接收状态STR-2 RF Module 接口简单,本文将不作详细的叙述,如果想要详细的了解 STR-2 RF Module, 请参照参考文献 1。分页软件设计在系统中所有 STR-2 RF Module 均采用 433.92MHZ 作为系统工作频率。下面以星状点对多点通信系统为例,详细介绍系统的软件设计。1.主程序设计为了避免同频干扰
10、的问题,系统采用分时 TDMA(Time Division Multiple Access)技术,把系统 CMS 与任意一台 RTU 之间的通信采用时分的方式分开, CMS 通过扫描的方式与各台 RTU 设备进行单台通信,这样系统中的 CMS 与 RTU 的通信方式就成为点对点的通信方式。整个点对多点系统的通信就成为若干个点对点通信的组合。程序采用 C51 单片机语言编写,其主控程序流程图如图 4、图 5 所示。2.打包与解包协议将主要数据分割成一定格式的数据,并增加一些额外的信息(用于纠错), 这个过程叫打包,在接收端协议去掉这些额外信息,只留下初始信息,这个过程叫解包.下面是一段打包程序:
11、 #define MRTUC _DATAPOLL 0xE1 /定义包类型为数据包#define MRTUC _DATAPOLLRESPONSE 0xE2/定义包类型为应答数据包#define MRTUC _ACTIVATE 0xF1/定义包类型为请求握手包#define MRTUC _ACTIVATEREQUEST 0xF2/定义包类型为应答握手包#define E$HostID 0x11 /定义目标主机地址void SCI_Putc( unsigned char data ); /通过 SCI 输出数据函数void SCI_Puts(unsigned char *str,unsigned c
12、har length) /输出多数据函数while ( length!=0 )SCI_Putc( *str+ ); /通过 SCI 发送数据Length-;void CheckActiveFunc(unsigned char unit) /请求握手函数新疆大学创新实验室 Walfred 整理 2010.10新疆大学创新实验室 Walfred 整理 2010.10unsigned char buff8;buff0=0xFF; /引导字节buff1=0xAA; /引导字节buff2=0x55; /引导字节buff3 = MRTUC _ACTIVATE; /数据包头字节buff4 = 0x03; /
13、数据包长度buff5 = E$HostID; /主机地址buff6 = unit; /从机地址buff7 = 1 + (MRTUC _ACTIVATE + 0x03 + E$HostID + unit); /校验字节SCI_Puts(buff,8); /发送数据包void ResponseActiveRequestFunc(void)unsigned char buff8;buff0=0xFF;buff1=0xAA;buff2=0x55; buff3 = MRTUC _ACTIVATEREQUEST;buff4 = 0x03;buff5 = E$HostID;buff6 = unit;buff
14、7 = 1 + (MRTUC _ACTIVATEREQUEST + 0x03 + E$HostID + unit);SCI_Puts(buff,8);void DataPollFunc(unsigned char unit)unsigned char buff8;buff0=0xFF;buff1=0xAA;buff2=0x55; buff3 = MRTUC _DATAPOLL;buff4 = 0x03;buff5 = E$HostID;buff6 = unit;buff7 = 1 + (MRTUC _DATAPOLL + 0x03 + E$HostID + unit);SCI_Puts(buf
15、f,8);void ResponseDataPollFunc(unsigned char unit)unsigned char buff8;新疆大学创新实验室 Walfred 整理 2010.10新疆大学创新实验室 Walfred 整理 2010.10buff0=0xFF;buff1=0xAA;buff2=0x55;buff3 = MRTUC _DATAPOLLRESPONSE;buff4 = 0x3;buff5 = E$HostID;buff6 = unit;buff7 = 1 + (MRTUC _DATAPOLLRESPONSE + 0x3 + E$HostID + unit);SCI_P
16、uts(buff,8);分页程序解包流程图:解包子程序流程图如图 6 所示。解包程序:#define TOTAL_RESPONSE 5 /定义数据包的总数void SCI_Getc(void); /从 SCI buffer 取数据函数struct ResponseCodeStruct /定义数据包结构体unsigned char Code; / 数据包的类型unsigned char Length; / 数据包的长度;const ResponseCodeStruct ResponseCodeTableTOTAL_RESPONSE= 0, 0 ,MRTUC _DATAPOLL, 3,MRTUC
17、_DATAPOLLRESPONSE, 3,MRTUC _ACTIVATE, 3,MRTUC _ACTIVATEREQUEST, 3,;unsigned char CheckResponseCode( unsigned char code )/检查数据包类型函数unsigned char i;for ( i=1; i(SCI_IQMASK-1)| (ResponseCodeTableCodeIndex. Length ResetReceivingStatus();return;PacketLength = char + 2;else if ( BufferIndex=2 ) / 检查主机地址if
18、 ( char!=E$HostID ) CodeIndex=0;ResetReceivingStatus(); return;else if ( BufferIndex=3 ) / 检查从机地址if ( charMAX_UNIT | char=0 ) return;else if(E$UNIT!=char)CodeIndex=0;ResetReceivingStatus(); return; 新疆大学创新实验室 Walfred 整理 2010.10新疆大学创新实验室 Walfred 整理 2010.10PacketBufferBufferIndex+ = char;if ( BufferInd
19、ex=2 ) if ( BufferIndex=PacketLength ) CheckSum = 1 + CheckSum;if ( char=CheckSum ) /校验PacketStatus |= PC_READY;ResetReceivingStatus();CheckSum += char;else if ( (PacketStatus ResetReceivingStatus(); 结束语本文中的无线硬件设计、软件设计解决方案已被多次运用于多种产品、多种系统。目前各种产品、系统运行稳定,无线通信误码率低、可靠性高、安全性好。文中的软硬件设计方案,可适用于各种单片机,对于无线通信技术在我国推广和广泛的运用有着重要的参考价值。