现代世界是一个信息世界,信息的获取传输也逐步从有线过渡到无线。随着无线通信事业的发展,无线传输这一技术越来越多的为人们所熟悉,相应的产品也渗透到社会生活的各个领域,如无线抄表、数字图像传输、小区传呼、工业数据采集、非接触RF 智能卡、安全防火系统、区域报警系统的数字信号传输等。而这一技术的zui大作用便是优化数据传输系统的效率。本文将此技术应用于无线通信的远程环境监测系统中,使该系统不仅数据传输效率高,而且结构简单,操作方便。 一、远程环境
监控系统组成 1、远程环境监控系统概述
图1 远程环境监测系统框图 远程环境监测系统主要是对酸雨,水质,烟雾浓度等环境参数进行集中测量,它是一种由中心站PC机、无线数传模块与子站PC机、无线数传模块、数据采集器、环境测定仪所组成的主从式系统。系统结构如图1所示。 中心站主要位于城市或地区的环境监测总站,子站则在城市或地区的周边。环境测定仪有碳氢化合物测定仪MODEL-745、大气测定仪AFC-125、酸雨测定仪AR-107SNA、COD测定仪VS-3951等,他们收集的各种环境参数通过数据采集器送入子站PC机中,进行数据处理、参数显示和保存,并随时准备接受中心站的查询和定时发送。每一子站与中心站之间的远程通信是采用北京池润达公司的W21DM无线数传全双工通信模块来实现的。 中心站、子站与无线数传模块间的通信是通过异步串口来完成的。异步串口采用标准的串口格式即:一个起始位、八个数据位、一个停止位。传输速率为1200bit/s。 2、 无线数传模块工作过程
图2无线数传模块结构图 图2是无线数传模块结构框图。无线数传模块的工作方式有全双工和半双工两种,为了能充分测试系统传输数据的可靠性,本系统采用全双工模式。同时注意在设置通信时,必须保证通过串行口将无线数传模块的收发频率设置相同。 2.1模块发送过程: 当模块收到PC机的串行口数据后,模块先通过DTR线判断收到的数据是命令还是发送数据,若是命令则执行相应的命令,若是发送数据则先将要发送的数据送到发送缓冲区EERAM中,并同时将模块的状态由接收状态转换成发射状态,状态转换完成后启动发送打包程序,并将这个数据包的数据送到模块中的数据调制口以FSK的方式调制成模拟信号, 与锁相环中的振荡信号一起送混频器,升频后的射频信号再经发射放大器、功率放大器放大后通过天线发送出去。这里的数据打包要遵从事先定义好的传输协议,这样才可以使接收双方有规可循,而且避免其他信号干扰。具体设定下面详细说明。 2.2模块的接收过程: 在接收状态下,通过天线接收进来的射频信号经射频发大器后,与锁相环中的振荡信号一起送到混频器,降频后的中频信号,通过中频滤波器、中频放大器放大后送到调制解调器,以FSK解调后的数字信号按照协议将有效数据送到存储器中,再经串行口送到计算机。 二、设计系统时需要考虑的一些问题 1、传输协议 因为无线通信模块要对接收进来的数据进行处理,就必须能够鉴别数据的真伪,所以要求传输数据的双方建立一种有效协议使得能够识别噪声和有效数椐。因为噪声是以随机字节出现的,没有明显的结合方式,噪声源可能产生任意字节的组合,所以研究在无线通信的过程中zui好能通过一种协议能有效的抑制噪声的产生。 经过比较选择,采用了以下的数据传输协议格式:
Radom 任意内容的字节 Data 位数据包字节 Length 为数据包包含的Header字节之后的所有字节的长度 Checksum 校验和字节 经过测试和试验,发现0
xFF 后跟0
xAA,0
x55 在噪声中不容易发生,所以设置传输协议在数据包前加开始字节0
xFF 后跟0
xAA,0
x55发送。因为*个字节的数椐在发送时容易丢失,所以在协议的开始加一个任意内容的字节,然后是0
xFF 后跟一个0
xAA,0
x55;接收协议规定只接收以0
xFF 后跟0
xAA,0
x55 开始的包.于是就可以很方便的把以上系统的数据包格式定为以上格式。 2、传输频率 在无线通信系统中传输频率也是至关重要的,在为划分和合理使用频率,国际电信联盟(ITU)将世界分为三个区,中国属于第三区。ITU对我国的业余业务频率有专门的分列。而这里设定的频段为227.00~223.00MHz,此为国家业余频段,也就是说可以自由使用,当然如果希望长期专用,则需要申请频谱许可证,专用该频段。 系统中数据的远距离传输是根据接受双方的频率来判断是否接受的。所以需要编写一定的程序完成频率设置。如写频时,把DTR置低,指令格式为:D7H:FFH:AAH:AAH:AAH:BBH:BBH:BBH,AAH:AAH:AAH表示发射频率,如229.100MHz表示为22H:91H:00H三字节,同理BBH:BBH:BBH表示接收频率。而传送数据时,DTR置高或悬空。 3、串行数据的传送方式 由于设计采用的是无线传输,所以当通过串行口将数据送到无线数传模块的时候需要考虑数据的传输格式。一般来说,通常我们发送的是字符或者数字,这时我们就需要在软件中根据ASCII码的规则将他们转化为十六进制数形式,以字节方式传送。同时也需考虑发送与接收串口之间的延迟。 三、串行口通信的软件设计 串行口是常用的计算机与外部串行设备之间的数据传输通道,而Visual C++6.0是一种功能强大的可视化的面向对象的Windows编程开发平台,利用其进行串行通信方便易行,应用广泛。通常情况下VC++中有三种实现串行通信的编程技术:1)利用控件MSComm实现串行通信:在对话框中创建通信控件MSComm,这种方法简单易用,但必须拿到对话框中使用,灵活性较差;2)多线程实现串行通信:在自定义的串行通信类中创建端口监视线程,进行多线程控制,并在指定的事件发生时向相关的窗口发送通知消息。该方法实时性强,但是系统复杂;3)在单线程中建立自定义的通信类实现串行通信;利用VC++的MFC类库实现。与控件方法相比,灵活性强,可按不同需要定制灵活的串口通信类来实现,同时也比多线程通信结构简单。 结合本设计所采用的硬件的特点,以及实际的运行环境,zui终选择第三种方式完成串行口通信。 程序流程图如下:
图3 程序流程图 在程序中利用类CserialPort实现负责串口的配置,数据传输的延迟处理以及读写。结构如下: class CSerialPort : public CWnd { public: CSerialPort();//初始化 void ClosePort(); BOOL ReadByte(char* buff);//读串口 BOOL WriteByte(BYTE bybyte[100],int length); //写串口 BOOL OpenPort(CString portname); BOOL SetCommunicationTimeouts(); //设置通信延时 BOOL ConfigurePort(DWORD BaudRate, BYTE ByteSize,DWORD fParity, BYTE Parity, BYTE StopBits); HANDLE hComm;// 用来标识串行口句柄 DCB m_dcb; COMMTIMEOUTS m_CommTimeouts; BOOL m_bPortReady;// 串口是否准备好 BOOL bWriteRC; BOOL bReadRC; DWORD iBytesWritten; DWORD iBytesRead; virtual ~CSerialPort();//释放资源 BOOL OpenPort(CString portname); BOOL ConfigurePort() } 其中配置串行口采用DCB结构,BOOL ReadByte(char* buff) 和BOOL WriteByte(BYTE,int)函数为读写串行口,为了识别操作是否正确,利用BOOL bWriteRC, bReadRC设置成功标志。同时设定DWORD iBytesWritten,iBytesRead确定字节的个数。在收发数据时需要监测串行口是不是准备好,这时就可以检测m_bPortReady的状态。 整个程序的编制也就相应的分为以下几个部分: 配置串口;配置数传模块;读写串行口;通信延时处理等。 四、总结 环境监测系统具有采样数据量大,传输距离远,以及环境条件差别大的特点,长期以来数据传输部分一直是人们关注的焦点。以往系统主要采用MODEM和机实现远程通信,但由于线具有通信速度慢,质量差的缺点,已不能满足现代环境监测的要求。这里应用无线数传模块完成远程数据通信,不仅克服了这些缺点,而且大大改善了该系统的数据传输性能。经zui终测试该系统不仅可以在条件恶劣干扰大的环境下进行远距离传输,而且数据准确率高,传输速度快。可根据不同需要应用于电力、水利、石油、林业、勘探等领域。