|
|
| | -文章搜索 - 最新文章 - | |
点对多点多任务无线通信 |
| 发布时间:2005年10月23日 点击次数:39 |
| 来源:电子产品世界 作者:聂光义 |
系统概述 一.连状点对多点系统 如图1系统由一台中央监控设备CMS (Central Monitoring System)和多台远程终端设备MRTU(Multiple Remote Termial Unit)构成点对多点多任务无线通信系统。在中央监控设备CMS 与 远程终端RTU(Remote Termial Unit)之间用多台中转设备Tran作为中转站,以便起到暂存数据和延伸距离的作用。中转站之间,以单向通信方式进行传递数据。 1.适用范围 a.适用于传输距离远的多点多任务数据采集 b.适用于条件恶劣干扰大多点多任务数据采集 c.适用于对时间要求不高的各种复杂无线数传 d.适用于智能小区水、电、煤、暖气集中抄表系统,各种远程集中安防报警系统等。 2.协议数据包格式 协议的笫一件事就是能够识别噪声和有效数椐,噪声是以随机字节出现的,没有明显的结合方式,噪声源可能产生任意字节的组合,在无线通信的过程中最好能通过一种协议能有效的抑制噪声的产生 通过测试和试验,发现0xFF 后跟0XAA,0x55 在噪声中不容易发生,传输协议应该在数据包前加开始字节0xFF 后跟0xAA,0x55发送协议的开始应该以一个任意内容的字节(这是因为第一个字节的数椐在发送时容易丢失),然后是0xFF 后跟一个0xAA,0x55;接收协议规定只接收以0xFF 后跟0xAA,0x55 开始的包.于是就可以很方便的把以上系统的数据包格式定为:
Lead 为引导字节 Leader1=0xFF; Leader2=0xAA; Leader2=0x55; Header 为数据包的命令字节,由此确定数据包的类型 Length 为数据包包含的Length字节之后的所有字节的长度 HostID 为主机地址 Local 为本地机地址 Destination 目标地址 Unit 为RTU地址字节 Data 位数据包字节 Checksum 校验字节 二. 星状点对多点通信
1. 适用范围 a. 适用于传输距离较近的地方 a.适用于条件恶劣干扰大的地方 b.适用于对时间要求高、数据量大的场合 c.适用于智能小区水、电、煤、暖气集中抄表系统,各种远程集中安防报警系统等 d.适用于智能家用集中控制系统 e.工业测控、工业数据采集 f. 医疗器械、健身器材 g.数据仓库、智能商场超市导购 h.餐饮无线点菜系统 i.PDA无线数传 j.水纹气象监控 k.生物信号采集 l.油田环境监控 m.银行智能回单系统等 2.协议数据包格式 根据图 2可以把系统的数据包格式定为:
Lead 为引导字节 Leader1=0xFF; Leader2=0xAA; Leader2=0x55; Header 为数据包的命令字节,由此确定数据包的类型 Length 为数据包包含的Length字节之后的所有字节的长度 Unit 为RTU地址字节 Data 位数据包字节 Checksum 校验字节 硬件设计 VCC:正电源,接2.7~5.25V CS: 频道选择,CS=0选择工作频道1即433.92MHZ,CS=1选择工作频道2即433.33MHZ DOUT: 数据输出,连接MCU串口RXD DIN:数据输入,连接MCU串口TXD GND: 电源地 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.主程序设计 为了避免同频干扰的问题,系统采用分时TDMA(Time Division Multiple Access)技术,把系统CMS与任意一台RTU之间的通信采用时分的方式分开,CMS通过扫描的方式与各台RTU设备进行单台通信,这样系统中的CMS与RTU的通信方式就成为点对点的通信方式。整个点对多点系统的通信就成为若干个点对点通信的组合。程序采用C51单片机语言编写,其主控程序流程图如图4、图5所示。
2.打包与解包 协议将主要数据分割成一定格式的数据,并增加一些额外的信息(用于纠错),这个过程叫打包,在接收端协议去掉这些额外信息,只留下初始信息,这个过程叫解包. 下面是一段打包程序: #define MRTUC _DATAPOLL0xE1 //定义包类型为数据包 #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 char length) //输出多数据函数 { while ( length!=0 ){ SCI_Putc( *str++ ); //通过SCI发送数据 Length--; } } void CheckActiveFunc(unsigned char unit) //请求握手函数 { unsigned char buff[8];
buff[0]=0xFF; //引导字节 buff[1]=0xAA; //引导字节 buff[2]=0x55; //引导字节 buff[3] = MRTUC _ACTIVATE; //数据包头字节 buff[4] = 0x03; //数据包长度 buff[5] = E$HostID; //主机地址 buff[6] = unit; //从机地址 buff[7] = 1 + ~(MRTUC _ACTIVATE + 0x03 + E$HostID + unit); //校验字节 SCI_Puts(buff,8); //发送数据包 }
void ResponseActiveRequestFunc(void) { unsigned char buff[8]; buff[0]=0xFF; buff[1]=0xAA; buff[2]=0x55; buff[3] = MRTUC _ACTIVATEREQUEST; buff[4] = 0x03; buff[5] = E$HostID; buff[6] = unit; buff[7] = 1 + ~(MRTUC _ACTIVATEREQUEST + 0x03 + E$HostID + unit); SCI_Puts(buff,8); }
void DataPollFunc(unsigned char unit) { unsigned char buff[8]; buff[0]=0xFF; buff[1]=0xAA; buff[2]=0x55; buff[3] = MRTUC _DATAPOLL; buff[4] = 0x03; buff[5] = E$HostID; buff[6] = unit; buff[7] = 1 + ~(MRTUC _DATAPOLL + 0x03 + E$HostID + unit); SCI_Puts(buff,8); }
void ResponseDataPollFunc(unsigned char unit) { unsigned char buff[8]; buff[0]=0xFF; buff[1]=0xAA; buff[2]=0x55; buff[3] = MRTUC _DATAPOLLRESPONSE; buff[4] = 0x3; buff[5] = E$HostID; buff[6] = unit; buff[7] = 1 + ~(MRTUC _DATAPOLLRESPONSE + 0x3 + E$HostID + unit); SCI_Puts(buff,8); } {{分页}} 程序解包流程图: 解包子程序流程图如图6所示。 解包程序: #define TOTAL_RESPONSE 5 //定义数据包的总数 void SCI_Getc(void); //从SCI buffer取数据函数 struct ResponseCodeStruct { //定义数据包结构体 unsigned char Code; // 数据包的类型 unsigned char Length; // 数据包的长度 }; const ResponseCodeStruct ResponseCodeTable[TOTAL_RESPONSE]={ { 0, 0 }, {MRTUC _DATAPOLL, 3}, {MRTUC _DATAPOLLRESPONSE, 3}, {MRTUC _ACTIVATE, 3}, {MRTUC _ACTIVATEREQUEST, 3}, }; unsigned char CheckResponseCode( unsigned char code )//检查数据包类型函数 { unsigned char i;
for ( i=1; i<TOTAL_RESPONSE; i++ ) { if ( ResponseCodeTable[i].Code == code ) return i; } return 0; } void ResetReceivingStatus( void ) //复位接收状态 { PacketStatus &= ~PC_START; //数据包为开始状态 BufferIndex = 0; //复位接收头字节标志 } void SerialHandler( void ) //数据解包子程序 { unsigned char char,i,j; unsigned char *buff; if ((PacketStatus & PC_READY)==0 ) { //检查数据包状态 if ( SCI_Flags & SCI_IQDIRTY ) { //检查SCI状态 char = SCI_Getc(); //从buffer取一字节数据 if ( BufferIndex==0) { // 检查是否为头字节 if ( (CodeIndex=CheckResponseCode( char ))==0 ) { CodeIndex=0; ResetReceivingStatus(); //复位接收状态 } return; //如果不正确返回取下一字节 } CheckSum = 0; PacketStatus |= PC_START; //定义开始接收数据 } else if ( BufferIndex==1 ) { if(char<3|| har>(SCI_IQMASK-1)|| (ResponseCodeTable[CodeIndex]. Length && ResponseCodeTable[CodeIndex].Length!=char) ) { //检查长度 CodeIndex=0; ResetReceivingStatus(); } return; } PacketLength = char + 2; } else if ( BufferIndex==2 ) { // 检查主机地址 if ( char!=E$HostID ) { CodeIndex=0; ResetReceivingStatus(); } return; } } else if ( BufferIndex==3 ) { // 检查从机地址 if ( char>MAX_UNIT || char==0 ) { return; } else { if(E$UNIT!=char){ CodeIndex=0; ResetReceivingStatus(); return; } } } PacketBuffer[BufferIndex++] = char; if ( BufferIndex>=2 ) { if ( BufferIndex==PacketLength ) { CheckSum = 1 + ~CheckSum; if ( char==CheckSum ) { //校验 PacketStatus |= PC_READY; } ResetReceivingStatus(); } } CheckSum += char; } else { if ( (PacketStatus & PC_START) && TimeOut==0 ) { CodeIndex=0; ResetReceivingStatus(); } } } } 结束语 参考文献 1.上海桑博 STR-2无线数据收发模块使用手册 上海桑博电子科技有限公司 2002 2.Nordic nRF401 Product Specification Nordic corporation 2000 3. 谭浩强 C程序设计 清华大学出版社 1999 |
|||||||||||||||||||||||||||||
|
|
|
[网络文摘] 相关文章: 苹果Mac微型计算机拆解分析苹果Mac微型计算机拆解分析简介:
苹果Mac 微型计算机体积为:5.1cm×16.5cm× 16.5cm,配置包括:1.25GHz G4处理器、256MB DDR 333内存、40GB硬盘、CD-RW/DVD 一体驱动器。板载I/O包括:两个USB2.0接口、一个火线400接口、一个10/100BaseT 以太网口、一个调制解调器接口和一个DVI视频口。 下面的拆解按照种类和所属系列分别统计了该款计算机所使用的元器件在总成本中所占的比例,并在下面的列表中给出了部分器件的一些详细信息,包括产品型号、生产厂商、封装形式、引脚及数据手册的网站链接地址等,希望能给国内的电...... 竞争带来价格压力 电源厂商寻求发展新策略
AET2005在京闭幕 期待明年更大成功
面板技术开创液晶大屏新时代
2005年Semiconductor International编辑选择最佳产品奖揭晓
中国硅知识产权产业联盟在北京成立
SEMICOM Taiwan 2005:聚焦封测及MEMS
256×32大容量中文矩阵系统的设计
三维机械设计Autodesk Inventor 9介绍
使用Verilog实现基于FPGA的SDRAM控制器(图) |
|
|
|