吴祥,康戈文
(电子科技大学 航空航天学院,成都 610000)
本系统在传统的滴水灌溉系统基础上,在农田中采用ZigBee自组网网络进行信息的传输,不用在农田中布置通信线路;远程数据的传输采用GSM网络,不需要额外地布置通信设备,减少了农田灌溉的成本,增加了系统的安全性。系统采用具有低功耗特性的ZigBee无线自组网单片机,采用两节干电池供电,节约对能源的消耗。农田中的无线传感网络可以实时地采集灌溉系统的运行状况,将其传输到远程的监控系统,工作人员实时远程控制灌溉,极大地节省了劳动力,提高了工作效率,增加了农民的收入。
农田种植面积大,地块分散,这就决定了采集系统应具有如下两个主要特点:一是系统控制节点多;二是系统是一个覆盖面很广的通信网络(采集点具有分散性)。基于上述特点,系统设计为分布式体系结构,主要包含农田监控终端和监控管理中心两个模块,而农田监控终端由于功能的不同又分为ZigBee终端和ZigBee协调器(与上位机交互的终端)。基于上述分析本系统采用ZigBee技术和GSM技实现系统网络的组件和数据的传输。其系统结构如图1所示。
图1 系统总体结构图
远程的监控管理中心通过GSM网络发送控制指令到农田中的ZigBee协调器,ZigBee协调器收到控制指令后,将其转发到ZigBee终端,以实现对灌溉系统的控制。首先监控管理中心的计算机通过RS232接口向GSM无线通信设备PTM100发送AT命令,PTM100以短消息形式通过GSM网络把控制命令发送到农田ZigBee协调器,ZigBee协调器根据监控管理中心发送的控制命令,向相应的终端发送控制命令,控制电磁阀的关断,ZigBee终端采集电磁阀的状态通过无线网络传输到ZigBee协调器,再通过GSM网络将电磁阀的状态传输到数据终端。
根据系统功能的要求,系统的硬件电路分为太阳能充电电路、CC2530供电电路、电磁阀驱动电路。
由于ZigBee协调器不能睡眠而且加入了GSM模块,ZigBee协调器耗电量比较大,因此ZigBee协调器必须采用太阳能电池板供给电池充电。其充电电路如2所示。
图2 太阳能充电电路
太阳能电池板接在J1处,CN3082是一块太阳能充电管理芯片。当输入电压大于电源低电压检测阈值时,CN3082开始对电池充电,在预充电状态和恒流充电状态,引脚输出低电平,表示充电正在进行。如果电池电压反馈输入端FB引脚电压低于1.54V,充电器处于预充电状态,充电电流为所设置的恒流充电电流的20%。电池电压反馈输入端FB引脚电压大于1.54V且小于2.445V时,充电器采用恒流模式对电池充电,充电电流由电阻R1确定。当电池电压反馈输入端FB引脚电压大于2.445V时,CN3082处于维持充电状态,维持充电电流由输入电压VIN、R2和R1决定。在维持充电状态,当电池电压反馈输入端FB引脚电压下降到1.65V时,CN3082将开始新的充电周期,进入预充电状态或者恒流充电状态。
由于CC2530的供电电压为2~3.6V,而充电电池的输出电压为3.7V,因此用充电电池供电的CC2530供电电路必须经过一个线性稳压电路,使其输出电压变为2~3.6V,电路如图3所示。其中CAT6219-330是一块输出电流最大为500mA、输出电压为3.3V的线性稳压器件,EN端为输入使能端,高电平时输入有效。为了提高瞬态响应,在5脚加一个2.2μF的旁路电容,为了提高电压抑制比和减少输出电压的噪声,在4脚处接一个0.01μF的旁路电容。
图3 CC2530供电电路
由于CC2530的驱动电路很小,不能驱动电磁阀里面的电机,使电磁阀关断,所以必须在CC2530的I/O和电机之间加上驱动电路来驱动电机,其电路图如图4所示。
图4 电磁阀驱动电路
J2接电磁阀的输入端,L7010为电机驱动模块,其工作电压最低可以达到1.8V,持续驱动电流达1A,尖峰工作电流可以达到2A,并且可以方便地控制电机的正反转,其中VM为电机电源,VCC为芯片电源。
3.1.1 上位机向下位机发送控制消息
由于上位机发送指令时,是通过手机短信发送出去的,并且由于垃圾短信的存在,终端难免会收到一些和控制无关的指令,因此当解析短信中的控制指令时,必然会使一些短信无法解析或者解析出错误的控制信息。不能解析出控制指令会使程序出现运行错误,使整个系统瘫痪;而解析出错误的控制指令将使电磁阀出现误动作,影响控制效果。因此,为了保证系统的安全性和健壮性,必须设计相应的协议。为了区分控制信息和非控制信息,必须有一个标志来加以区分,本文采用一个字节表示消息类型。每一个节点有4个电磁阀,所以采用一个字节可以描述一个电磁阀的控制信息。为了减少终端的控制和命令解析的难度,将此字节的剩下4位作为每一个电磁阀有无控制信息的标志。如果每一个节点都单独发送一条控制短信,必然会加重系统的负担,使电能消耗增加,所以本系统将所有节点的控制组合在一条短信中发送出去。其消息结构如下所示。
字节1 字节2~字节n消息类型 各个节点的控制信息
消息类型域,其长度为1个字节。应用中设置成表1消息类型域,其长度为1个字节。应用中设置成表1中的某值。
表1 消息类型域的值
控制消息域,其长度根据具体农田里的终端个数决定,一个终端采用一个字节,其中每两位为一个电磁阀的控制信息,应用中应设置成表2所列的值。
表2 电磁阀的控制信息值
3.1.2 下位机向上位机发送数据消息
上位机向下位机发送控制指令后,下位机将会向上位机发送相应的回复信息,以告诉上位机下位机对所发送指令的执行情况,这种信息包括两类:第一类是上位机发送完控制指令后,下位机收到指令的一个确认状态回复,其消息类型值见表1;第二类消息是下位机对上位机发送的控制指令执行后的电磁阀信息,电磁阀的状态信息格式如下。
字节1 字节2消息类型 位0~3 位4电池阀状态 是否为电磁阀状态信息
其消息类型见表1。字节2以后的字节表示电池阀的状态,每一个字节表示一个终端节点,其中低4位为电磁阀状态。由于ZigBee协调器节点可能没有收到终端采集到的电磁阀状态数据,所以用第4位来表示低4位是否为电磁阀状态,1为是,0为不是。
3.1.3 ZigBee网络通信协议设计
(1)ZigBee协调器消息处理
ZigBee协调器通过UART接口从短信模块中读取短信的内容后,将其保存在ZiBee协调器中,等待ZiBee终端醒来后发送询问消息。如果询问后ZigBee协调器保留了控制消息,那么ZigBee协调器将保存的控制指令以广播的形式发送出去,如果终端询问过后ZigBee协调器没有控制指令,那么ZigBee协调器将发送无控制消息到ZigBee终端。
ZigBee协调器发送数据后等待ZigBee终端回复确认信息,其信息格式如下。
字节1 字节2消息类型 终端编号
其消息类型域取值见表1。协调器收到ZigBee终端的回复消息后,将该节点号所对应的字节的控制消息全部位置0,使下次广播控制指令后,该终端节点不会采取相应动作。
当ZigBee协调器发送完控制消息后,等待接收终端电磁阀的状态,ZigBee协调器收到所有ZigBee终端的电磁阀状态信息或者等待时间超时后,向上位机发送已接收到的电磁阀信息。
ZigBee协调器的消息处理流程如图5所示。
图5 ZigBee协调器的消息处理流程图
(2)ZigBee终端消息处理
由于ZigBee终端是完全由电池供电,所以ZigBee终端必须定时睡眠来节约能量,使终端工作时间可以尽可能地长。因此,ZigBee协调器收到控制信息后不可能直接发送给终端,必须先存储,ZigBee终端为了获得控制消息,在醒来后必须向协调器发送询问消息,使ZigBee协调器发送控制消息。
ZigBee终端收到ZigBee协调器发送来的控制指令后,向ZigBee协调器发送确认消息,使ZigBee协调器更改相应的节点状态,避免重复发送控制指令到ZigBee终端,增加ZigBee终端的负担。
ZigBee终端收到控制信息后,获取本节点的控制信息,判断是否有控制信息。如果有控制信息,为了使Zig-Bee终端的电磁阀中的电机不出现卡死的现象,ZigBee终端必须判断当前的控制状态是否和电磁阀当前的状态相同。如果相同,则对电磁阀不采取任何控制动作;如果不同,则根据控制信息对电磁阀采取相应的控制。对控制信息进行判断后,为了使电磁阀对控制信息有充分的反应时间,延时1s采集电磁阀的控制信息,然后将其传送到ZigBee协调器,其处理流程图6所示。回复到ZigBee协调器的电磁阀的状态信息的消息格式如下。
图6 ZigBee终端的消息处理流程图
字节1 字节2 字节3消息类型 节点编号 电磁阀状态
其中消息类型域的值见表2。电磁阀状态域低4位存放电磁阀的状态,每一位存放一个电磁阀的状态。
由于ZigBee终端节点是采用电池供电,所以ZigBee终端节点必须定时地休眠和唤醒以节约能量,使电池的供电时间更长。如果本系统的ZigBee网络采用网状结构和树状结构,那么路由器节点必须在非路由器节点之前醒来,这样必然会增加系统的控制难度,最糟糕的情况下可能会使整个系统无法控制,并且可能使终端节点不定期的掉线。所以本系统采用星型网络,终端节点直接和协调器节点交互信息。
3.2.1 ZigBee节点同步
ZigBee节点之间的误差主要是传输延时和节点之间的时钟误差。
(1)节点时钟误差测量
ZigBee协调器节点先发送广播数据包,其中带有协调器节点下一次发送数据包的时间T1。节点收到数据包后,启动定时器等待接收ZigBee协调器下次发送数据,当ZigBee终端节点收到下一次同步数据后,读取定时器的时间为T2,所以时钟偏移误差为:a=(T2-T1)/T1。
(2)延时误差
ZigBee终端节点向ZigBee协调器节点发送同步信息,ZigBee协调器收到同步信息后回复一个同步信息到ZigBee终端,ZigBee终端收到此回复信息的时间为T3。假设传输的延时一样,为T4,则T4=(1+a)×T3/2。
3.2.2 ZigBee终端节点睡眠
当ZigBee协调器接收到所有节点的状态回复后,广播一个睡眠消息到ZigBee终端,消息中加入睡眠的时间T5,ZigBee终端收到此时间后,开始睡眠,其睡眠时间为T5-T4-a×(T5-T4)。节点醒来后,再延时1s发送询问消息到协调器,获得控制消息。
本系统经过现场调试,能够对上位机发送的控制指令进行准确的控制。节点定时地睡眠和苏醒,能够有效地节约电量,两节干电池能够工作6个月到两年,为系统在农田这种无电源供电场合提供保障。采用同步算法和一些辅助措施,使系统能够在同一时间苏醒、同一时间睡眠,ZigBee终端节点同一时间接收到ZigBee协调器广播控制指令数据包的概率在90%以上,更加节约能源。
[1] 孙燕,曹成茂,马德贵.基于ZigBee网络的节水灌溉自动控制系统研究[J].农机化研究,2012(6):153-156.
[2] 孙燕,曹成茂,缪鹏程.无线遥控节水灌溉控制系统的研制[J].电气自动化,2008(30):47-48.
[3] 曹成茂,夏萍,朱张青.无线数据传输在节水灌溉自动控制中的应用[J].农业工程学报,2005,21(4):127-130.
[4] 杨宗凯,赵大胜,王玉明.无线传感器网络时钟同步算法综述[J].计算机应用,2005,25(5):1170-1173.
[5] Gao Q,Blow K J,Holding D J.Simple algorithm for improving time synchronization in wireless sensor networks[J].Electronics Letters,2004,40(14):889-891.
[6] Arvind K.Probabilistic clock synchronization in distributed systems[J].IEEETransactions on Parallel and Distributed System,1994,5(5):474-487.
[7] 康冠林,王福豹,段渭军.无线传感器网络时间同步综述[J].计算机测量与控制,2005,12(10):1021-1023.
[8] 陈英,舒坚,刘琳岚,等.无线传感器网络时间同步与成簇算法[J].传感器与微系统,2008,27(1):44-48.
[9] Sichitiu Mihail L,Veerarittipahan Chanchai,Sirnple.Accurate Time Synchronization for Wireless Sensor Networks[C]//New Orleans,LA:Proceedings of the IEEE Wireless Communications and Networki-ng Conference (WCNC 2003).New Orleans,2003:1266-1273.
[10] 赵明,徐科军,倪伟,等.一种无线传感器网络节点设计和通信协议研究[J].仪器仪表学报,2005(8):630-635.