关键词:无线通信;嵌入式系统;协议
1 引言
在传统的远程监测系统中大多采用PC机作为上位机,通过RS485串行通信作为传输手段,因此系统有诸如工作不够稳定、连线繁多、扩展性差等缺点。
本项目当中采用32位嵌入式芯片组成的系统作为上位机,其体积小、功耗小而且工作稳定;上位机与下位机之间的传输采用无线传输方式,且上位机对下位机可配置,从而使得系统具有很强的扩展性。这套系统具有更优的性能,可以作为现有系统的升级产品。
2 硬件结构
上位机嵌入式系统采用在工控领域有传统优势的摩托罗拉芯片(ColdFire5249)为核心,配备4Mbyte闪存和16Mbyte内存的系统,此系统外扩有网络接口可通过局域网为客户机提供数据服务。通过无线模块与下位机进行数据交换,获取远程数据,下达客户机对远程对象的控制命令。
下位机采用基于8051的单片机系统,他的主要功能是采集现场的数据以备上位机查询,执行上位机转发来的用户指令。其中温度传感器采用DS18B20。
无线通信模块采用PTR2000,PTR2000是收发一体的工作在国际通用数传频段433MHz的无线通信模块。他最高传输速率可以达到20Kbit/s,功耗低,待机状态下仅为8uA,可以直接与CPU的串口连接使用。PTR2000的引脚定义如表1。
PTR2000的硬件连接非常简单,由3个通用I/O口分别控制TXE,PWR,CS。DI, DO与CPU的串口连接。TXE为1时,为发送状态,TXE为0时,为接收状态。状态转换需要5毫秒。PWR为0时,为节电待机状态,此时模块无法进行接收或者发送。
3 线通信协议及其软件结构
3.1 通信协议研究
在本系统中,网关(嵌入式系统)与下位机(单片机系统)之间采用无线通信方式。无线通信由于其无需布线、便于安装、检修升级容易、管理简单、灵活性强等诸多优点已经得到广泛应用,但是无线传输在传输过程中难以避免的会产生误码,而且产生误码的几率要远远大于有线网络,并且误码的产生与多方面的因素有关,因此有很大的不确定性。所以我们必须采用一种差错控制机制,但是我们不需要也很难实现太过于复杂的方法,我们可以采用停止等待协议来实现差错控制。此外,我们必须采用校验机制以确定何时需要重传,CRC校验码的检错能力很强,它除了能检查出离散错外,还能检查出突发错。考虑到硬件和传输的开销问题,使用CRC16校验码。
本系统当中我们所采用的无线数传模块是PTR2000,PTR2000灵敏性很高,因此在无载波的情况下在接收端会产生随机的数据,在通信协议中必须在有效数据前加上两个或多个固定的前导字符作为同步信号,使得接收端能够辨别出有效数据的开始。
本系统中所采用的是一点对多点的无线通信模式,因此必须选择一种多址方式来实现点对多点通信,常用多址方式有时分多址(TDMA)、频分多址(FDMA)、码分多址(CDMA)等,其中FDMA为每一路通信提供一个不同的频段,易于实现,但是需要比较大的频段资源,而且抗干扰能力差。CDMA是采用不同的编码来区分不同的信道,抗干扰能力强,但是传输开销非常大,而且实现也比较复杂。TDMA在同一时间内只有一个信道可以通信,抗干扰能力较强,传输开销较小,而且实现比较容易,虽然实时性较差,但是由于温度的物理特性,此系统的实时性要求不高,所以可以采用时分多址(TDMA)来实现。
3.2 通信协议制定
其中前导字符可采用0xAA、0xAA、0xFF、0x00共4字节,其中前两个字节为同步信号,后两个字节为帧开始标志,接收端只要能够接收到0xAA、0xAA、0xFF、0x00就可以认为新的一帧开始了;帧类型(4位)分为数据帧、有序数据帧、控制命令帧、确认帧等多种帧类型;帧编号(4位)为可选项与帧类型相关,只有帧类型是有序数据帧时才有效;地址(1字节)标明数据帧的目的地址;有效数据长度不定;校验为2字节CRC16校验码;结束标志为0x00。
由于Linux串行通信中有许多ASCII码是作为控制字符来使用,因此,对以上帧当中除了前导字符和结束标志外的数据进行base64编码。
3.3 通信协议的实现
嵌入式系统端软件结构
首先,在嵌入式操作系统中,由于通常只能在内核态才能对硬件进行访问,所以软件必须通过驱动程序来操作硬件,在这里PTR2000可以看作一个串口设备来使用,但是,PTR2000是一个半双工的通信模块,发送接收状态由TXE来控制,因此,要对默认的串口驱动程序进行一些修改,在串口驱动程序中的write函数完成发送功能,我们需要在其中加入一个通用对I/O口控制TXE的操作,发送前TXE置1使PTR2000处于发送状态,并且延时确保状态转换完成,发送完毕后TXE置0使PTR2000处于接收状态,并且延时确保状态转换完成。在驱动程序结构中,ioctl函数完成对设备的附加操作,在此函数中我们实现对无线模块的状态的设置,包括发送、接收、节电待机状态之间的转换,其中主要实现节点待机状态和正常状态之间的转换。图3所示的是驱动程序的中断服务程序的流程图,在其中我们实现数据的编码与解码、发送与接收以及校验,而差错控制交由上层应用程序来控制,通过驱动程序的编写,使得无线通信模块对于上位机来说基本成为标准的半双工串口设备,从而使得上层应用程序实现了与硬件无关,具有较强的可移植性。
其次,完成守护进程,此进程完成对下位机的初始化以及轮询,其中实现停止等待协议,读取到的数据存入共享内存中以备上层应用程序使用。
程序先从配置文件中读出配置信息对下位机进行逐个查询。通过配置文件配置系统使得整个系统具有可配置性,可以随时扩展新的下位机,只需要通过用户界面修改配置文件中下位机的地址编码就可以使新加入的节点正常工作。此外,配置信息包括发送给每个节点的全部节点信息,可实现预约式通信,达到节能的目的。
在进入论询后每次查询当前节点前首先在共享内存中查询是否有未执行的用户指令,如果有则发送这些指令,使下位机执行这些指令,并等待下位机返回确认信息,然后进入对当前节点的查询,在实际工作过程当中,每次数据发送完毕后,必须使程序进入一定的延时以确保发送完成,延时与波特率有关,延时过长会错过下位机反馈的数据的接收,延时过短会使得命令发送不成功或者不完整。如果在设定的超时时间没有收到数据,则超时次数增加一次,如果对同一个无线节点查询次数达到设置的超时次数,仍然没有接收到节点响应则标记此节点失效,由上层程序通知用户。收到有效数据包后,解开封包将数据写入共享内存并指向下一个节点进行查询,轮流对所有节点进行查询。超时次数可通过配置文件修改以确保在不同环境下的通信质量。
下位机软件
下位机单片机系统的软件系统完成温度采集以及与上位机的无线通信,主程序在空闲状态下定时对温度进行采集,当串口接收到数据发生中断时,接受封包并对其分析,如果收到的封包与本机地址一直则根据封包的类型完成相应的操作,否则,根据地址表中的信息计算出预约的时间,使无线模块进入节能状态,在预约时间到达时再次参与通信。
4 无线通信中的其他问题
4.1 无线通信中的节能问题
最小能耗的编码,由于在无线通信中,只有在传送的位是逻辑高电平时才消耗能量,而在传送逻辑低电平时并不消耗能量,因此,可以采用适当的编码使得编码中为逻辑1的位尽量的少,就可以达到降低功耗的目的。
进入节电状态,下位机由上位机初始化一份预约信息表,下位机对接收到的与本机地址不同的封包认为是预约封包,取出该封包中的地址,在预约信息表中查询计算本机将在下N个时刻进行通信,随后使本机无线模块进入N个时间间隔的节能状态,在预约时间到达时唤醒模块进行通信,在这种通信模式下,应该采用比较保守的计算方法,以避免因为节能而错过通信而造成的通信失败,此外,通信中有可能发生重传,当下位机在预约时间到达时有可能收到的仍然是预约信息,此时下位机应该再次进入节能状态。
4.2 无线通信中的安全问题
对传输的编码进行加密,本系统当中受到下位机单片机系统的限制,复杂的加密方法很难实现。但是由于无线通信的特点,安全问题又是不容忽视的。我们可以采用简单的加密方法来保证通信的安全性,比如采用非标准的base64编码。
4.3 无线通信的网络规模
无论采用何种无线传输模块,他都会受到其传输距离的限制,比如,在本系统当中所采用的PTR2000的传输距离在300——400米,对于一个大型的粮仓而言,这个传输距离就可能达不到要求,因此,我们采用路由的方式,在合适的位置加入一个单片机系统作为路由和中继,已达到网络的扩展,前文通信协议中地址字段中可以加入1字节作为不同网段的地址标志。
5 总结
本文所介绍的软硬件设计已经在远程无线粮仓温度测控系统中得到了应用,对一千组数据发送接收的实验表明,一次重传率为5%,两次重传率为0.4%,三次重传率为0.02%,没有发现超过三次重传的现象,因此,设定重传次数为5次以确保通信成功,本系统具有适合多种环境,误码率较低,通信效率较高,可靠性较高,安全性较强的特点,并且在实际应用取得了令人满意的效果。