1 引言
现阶段,无线技术正飞速地进入许多应用领域,与有线设备相比其具有成本低、携带方便、无需布线等优点,特别适用于手持设备的通信、电池供电设备、遥控、遥测、小型无线网络、无线抄表" title="无线抄表">无线抄表、门禁系统、小区传呼、工业数据采集系统、用户识别、信号采集、水文气象监控、无线数字语音、数字图像传输等系统的应用。
2 系统方案设计
(1) 系统整体设计
整个系统按照运行流程可分成三部分:终端设备(多个)、手持式采集设备(一个)、数据MIS 系统。终端设备是采集气量数据的集成设备,它负责对气量的数据进行采集和控制,同时可通过无线网络传输给手持式采集设备;手持式采集设备是通过无线通道对终端设备的数据进行下载和控制的设备;数据MIS系统是将手持式设备中的采集数据下载后对其进行管理的软件系统。
(2) 终端设备
在用户端气表加装通讯模块形成终端设备,实现数据的读取和无线传输。
(3) 手持式采集设备配置
MPU:PHILIPS P89LV51RD2,低功耗芯片;
EEPROM:24AA512(64K)用以存放所采集的数据;
LCD:MOBI2006 薄型液晶LCD;
键盘:设置4 个功能键,分别为:上、下、确认、背光;
RS-232C 接口芯片:MAX232;
无线模块:IP•Link1000-B;
(4) 数据库MIS系统
其主要功能包括与手持式采集设备进行数据交换并存储,对数据进行格式化加工,对数据进行通用管理(添加、删除、修改、查询等)以及根据客户需求打印各种报表。
3 系统硬件结构及连接图
手持设备的硬件连接如图2 所示,元件主要包括微控制芯片、片外存储器、多路复用器CD4052、无线模块IP•Link1000-B、串口电平转换芯片MAX232、键盘和LED 显示屏。
微控制芯片通过并口连接键盘和LED 显示屏,片外存储器EEPROM采用I2C模拟总线方式连接,上位机和下位机通讯采用RS-232C 方式,需使用MAX232 芯片进行电平转换,另因无线模块与上下位机通讯都通过通用串行口,所以要进行串行口扩展,采用多路复用开关CD4052。
(1) 数据帧定义
数据帧是数据传输协议中数据的规范格式,数据帧结构的定义如表1 所示。
注:Lead 为帧标识(帧头)、Command 为命令字、Length 为数据长度、Load 为数据、Checksum为CRC校验码
(2) 传输协议
上位机—下位机采用S-232 串行数据传输,串行口通信方式为异步串行通信,信息格式为1 个开始位、8 位数据位、1个停止位、无奇偶校验位,数据传输采用“停止—等待”协议。
数据发送:发送方将欲发送的数据先进行帧格式定义,先对数据串(命令字+数据长度+数据)进行循环冗余校验(CRC-16 ),形成两个字节的校验码,在数据串前添加帧标识,然后附上所得的校验码,形成数据帧后进行发送,并等待返回信息。
数据接收:接收方在接收数据帧时,先判断帧标识,若错误,丢弃当前帧并向数据源发重传命令;如果正确,接收“命令”字节和“数据长度”字节并判断数据长度,超出数据长度时停止接收数据并发重传命令,长度合乎要求时才进行后面数据的接收,以上每个字节接收过程都包含超时判断,如果超时要求数据重发。数据接收完毕后进行循环冗余校验,将生成的校验码与接收到的校验码比较,相同则通过校验,数据帧正确,然后进行命令字节判断并对数据进行处理;若未通过校验,接收方发重传命令至发送方,要求重新传输该帧数据。
发送端A在启动发送后等待返回信息,接收端B接收并校验数据后进行信息回复,包括正确报告或错误报告信息,发送端A 在接收到接收端B 的反馈信息后,作出相应的判断动作。另外,在得到错误报告信息或在规定时间内没有接收到反馈信息时,发送端A重新发送当前数据帧,并且记录重发次数。当重发次数超过给定值N 时,停止发送,并报出错信息。
4.2 下位机与上位机的通信
下位机(手持设备)与上位机(计算机)通信采用RS-232C 串口通信,上位机对所接收的数据进行CRC 检验判断,校验未通过,要求重传,校验通过,数据存储至数据库。上位机利用Visual Basic 6.0中的通信控件MSComm开发串行通讯程序。MSComm 控件提供两种处理通信的方式:事件驱动方式和查询方式。事件驱动方式由MSC omm 控件的onComm事件捕获并处理通信事件和错误,其优点是程序相应及时、可靠性高;查询方式是通过检查commEvent属性的值来判断事件和错误,适合于应用程序较小的情况。
(1) 控件属性:包括串口初始化属性设置、数据读写操作、状态控制、打开/ 关闭串口。
(2) 串口初始化属性设置
下面结合初始化程序的实例来说明属性的设置:
MSComm. CommPort = 2 设置通信端口号;
MSComm. Settings =“1200, M, 8, 1” 设置波特率为12 00 ,奇偶校验为标记,8 位数据位,1 位停止位;
MSComm. InputLen = 0 读取接收缓冲区的全部代码;
MSComm. InputMode = comInputModeBinary 接收的数据格式为二进制数据;
MSComm. InBufferSize = 100 设置接收缓冲区大小为100字节;
MSComm. OutBufferSize = 10 设置发送缓冲区的大小为10字节;
MSComm. OutBufferCount = 0 清除发送缓冲区;
MSComm. InBufferCount = 0 清除接收缓冲区;
MSComm. PortOpen = True 打开串口(关闭端口时值为f a l s e );
(3) 数据读写操作
Output 属性:向发送缓冲区写数据流,为Variant 型变量。Output 属性可以传输文本数据或二进制数据,用Output 属性传输文本数据,须定义一个包含一个字符串的Variant。发送二进制数据,则须传递一个包含字节数组的Variant 到Output属性。以下是上位机向下位机发确认信号(ACK)的实例。
定义sendata 为Variant,发送Output 的值,right()为Byte数据,存放要发送的二进制数据:
Dim sendata As Variant
Dim right(1) As Byte
right (0) = &H5E
sendata = right 二进制数据变为Variant 格式
MSComm. InBufferCount = 0 接收缓冲区清空
MSComm. Output = sendata 发送二进制数据
Inp ut 属性:将接收缓冲区中收到的数据读入变量,为Variant 型变量。当InputMode 属性值为0 (文本模式)时,变量中含String 型数据,当InputMode 属性值为1(二进制模式)时,变量中含B y t e 型数组数据。
InputLen 属性:确定被Input 属性读取的字符数。设置InputLen 为0,则读取缓冲区中全部的内容。若接收缓冲区中In putLen 字符无效,In put 属性返回一个零长度字符串(“”)。在使用Input 前,用户可以选择检查InBufferCount 属性来确定缓冲区中是否已有需要数目的字符。
InBufferCount属性:返回接收缓冲区中已传到但还未取走的字符个数,In teg er 型。设为0 ,则清空缓冲区。
OutBufferCount 属性:类似于InBufferCount 属性,为发送缓冲区中已传到但还未取走的字符个数,Integer 型。设为0 ,则清空缓冲区。
5 数据的循环冗余校验
在数据的无线传输过程中,因为噪声的干扰数据极易出错,因此在传输时必须采用可靠的数据校验方法。数据校验方法包括奇偶校验,循环甬余校验等多种校验方法,普遍采用循环甬余校验方法(CRC),它能有效地检测出传输数据的错误。CRC 的全称为Cyclic Redundancy Check,它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。
CRC 校验的基本思想是利用线性编码理论,在发送端根据要传送的k 位二进制码序列,以一定的规则产生一个校验用的监督码(即CRC 码)r 位,并附在信息后边,构成一个新的二进制码序列数共(k + r )位,最后发送出去。在接收端,根据信息码和CRC 码之间所遵循的规则进行检验,以确定传送中是否出错。
例如,16 位的CRC 码产生的规则是先将要发送的二进制序列数左移16 位后,再除以一个多项式,最后所得到的余即是CRC 码,其中B(X)表示n 位的二进制序列数,G(X)为多项式,Q(X)为整数,R(X)是余数(既CRC 码)。
求CRC 码采用模2 加减运算法则,即是不带进位和借位的按位加减,这种加减运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普通代数式的乘除法运算是一样,符合同样的规律。生成CRC码的多项式如下,其中CRC-16 和CRC-CCITT 产生16 位的CRC 码,而CRC-32 则产生的是32 位的CRC 码。
CRC-16:(美国标准) G(X)=X16+X15+X2+1
CRC-CCITT:(欧洲标准) G(X)=X16+X12+X5+1
C R C - 3 2 :G (X ) =X 3 2 +X 2 6 +X 2 3 +X 2 2+ X 1 6+ X 1 2+X11+X10+X8+X7+X5+ X4+X2+X1+1
下面以CRC-16 为例:
数据以字节为单位,待传送的数据排队,运算区先存放两个字节的数据,缓冲区为一个字节,第三个字节的数据放在缓冲区内,运算区的数据按位运算,最左边为标志位,标志位左移,缓冲区内的数据也左移一位(运算区内为新的16位数据),标志位与CRC-1 6 多项式的最高位系数(总为1)比较,标志位为1 则运算区内的数据位与多项式的后十六位“异或”运算,为零则不运算。然后下一位左移,过程同上,直至缓冲区内的八位数据全传输至运算区内为止。这时第三个字节的数据运算完毕,将第四个字节的数据存入缓冲区,运算方法同上。
待数据串运算完毕后,后面附加16 个零进行运算,数据完全运算完成后,运算区的两个字节的数据就是生成的CRC校验码。将CRC 校验位附在信息码后作为循环码发送。
以上是CRC 校验码的产生过程。
接收方在接收到数据(循环码= 数据串+ 校验位)后,再进行CRC 校验,最后产生的运算区内的数据就是待校验的余数,余数为零则表示接受的数据串正确,否则为错。
CR C 码以模二除法得到余数,具体实现方法是用“异或”运算实现。单片机CRC 检验子程序如下:
CRC_CHECK:
MOV R3, #00H ;存储CRC码高位
MOV R4, #00H ;存储CRC码低位
CRC0: MOV A, R3
XRL A, @R0 ;R0 为初始值地址
MOV R3, A
MOV R7, #08H ;8 次比较
CRC1: MOV A, R4
CLR C ;进位标志清零
RLC A
MOV R4, A
MOV A, R3
RLC A
MOV R3, A
JNC CRC2
XRL A, #80H ;高字节异或运算
MOV R3, A
MOV A, R4
XRL A, #05H ;低字节异或运算
MOV R4, A
CRC2: DJNZ R7, CRC1
INC R0 ;取下一校验字节数据
DJNZ R6, CRC0 ;R6 为欲校验数据串的长度
RET
6 无线模块特征说明
本系统的无线数据传输是基于IEEE802.15.4协议的ZigBee" title="ZigBee">ZigBee技术。IEEE 802.15.4无线数据传输协议标准主要规定了一种短距离、低功耗、低速率、低价位、高效率、高可靠性的短程无线网络标准。遵循这一标准的技术被称作ZigBee 技术。ZigBee 技术是一种低速率无线传输技术,采用直序扩频(DS S S ) 技术来提高抗干扰能力,工作频率为8 6 8MHz 、915MHz 或2.4GHz,其中2.4GHz 是一个开放的频率。该技术的突出特点是应用简单,电池寿命长,有组网能力,可靠性高以及成本低。
在ZigBee 的七层协议中,IEEE802.15.4 只定义了PHY和MAC 层,实体层(PHY)规范确定了在2.4GHz 以250Kbps的基准传输率工作的低功耗展频无线电(另有一些以更低数据传播率工作的915 MHz 和868 MHz 的实体层规范),介质访问层(MAC)规范定义了在同一区域工作的多个802.15.4无线电信号如何共享空中通道。ZigBee兼容性平台则在IEEE802.15.4 的基础上包含了网络与安全层、以及应用开发框架(Application Framework)的定义。ZigBee 技术主要工作在无须注册的2.4GHz ISM频段,数据速率为20~250Kbit/s,最大传输范围在10~75m,典型距离为30m。
系统中无线模块采用兼容IEEE 802.15.4 协议的赫立讯IP•Link1000-B 无线网络收发模块,组网形式为星型网络。模块的工作状态由外部设备控制,外部设备通过模块的UART0接口,采用AT命令或数据帧结构的形式对IP•Link1000-B模块进行配置和操作。
无线模块在使用前先进行参数配置,包括对UART0 的波特率,模块的网络节点,节点号等参数进行设置,配置结果保存于模块内部非易失性存储器中,然后模块进入数据状态,准备数据的传输。无线模块在使用中先处于休眠状态,在外部命令作用下进入活动模式,数据传输成功后又回到休眠状态。
文中的无线硬件设计、软件设计解决方案经测试运行稳定,无线通信误码率低、可靠性高、安全性好。文中的软硬件设计方案,可适用于各种单片机,并且作为无线通信技术在相关领域的推广和广泛的运用有着较好的参考价值。