《电子技术应用》
您所在的位置:首页 > 通信与网络 > 设计应用 > 基于WiMi-net与Qt的塔机监测防撞系统设计
基于WiMi-net与Qt的塔机监测防撞系统设计
2015年微型机与应用第1期
卢 扬,章 红
(江汉大学 物理与信息工程学院,湖北 武汉 430056)
摘要: 针对传统塔机监测防撞系统中操作不便、ZigBee无线传输距离短、网络节点较多而导致时实性差等问题,提出了一种基于WiMi-net(Wireless Micro-network)无线通信模块的解决方案。利用Qt良好的交互能力与WiMi-net无线模块特性,搭建了一套传输距离远、可靠性高、实时性强的新型塔机监测防撞系统。
Abstract:
Key words :

  摘  要: 针对传统塔机监测防撞系统中操作不便、ZigBee无线传输距离短、网络节点较多而导致时实性差等问题,提出了一种基于WiMi-net(Wireless Micro-network)无线通信模块的解决方案。利用Qt良好的交互能力与WiMi-net无线模块特性,搭建了一套传输距离远、可靠性高、实时性强的新型塔机监测防撞系统。

  关键词: 塔机监测;WiMi-net;Qt;无线通信;实时性

0 引言

  随着建筑业规模不断扩大,建筑作业逐渐变得密集化,同一工作区域往往存在多台塔机同时作业。以往靠塔机驾驶员与地面指挥人员主观判断进行避障的方式已无法适应当前复杂的塔机工作环境。塔机监测防撞系统用于实时地采集各塔机以及障碍物信息,各塔机信息通过无线模块相互传递,并进入防碰撞系统进行分析。当系统判断当前操作有可能发生危险时,可以及时提醒驾驶员,从而避免险情发生。鉴于预险系统中快速响应的重要性,无线模块的实时性必须得到保障。

  随着ZigBee的普及,ZigBee在塔机通信中的应用已经有部分研究成果,但是传统ZigBee无线模块一般都基于CC2430、CC2530射频芯片,它们的射频(Radio Frequency)均为2.4 GHz,属于视距通信频带。这种频段的信号波长较短,因而传输距离与穿透能力都受到限制[1]。利用ZigBee模块进行远距离传输往往需要加上多级放大电路。值得一提的是,由于ZigBee采用CSMA/CA(随机接入信道技术)接入MAC层,且不支持时分复用的信道接入方式[2],节点会在发送数据之前监听信道,如果信道忙则进行随机退避,即延迟一段随机时间。如果再次监听信道忙,这个退避时间还要增倍。这样就造成了发送数据所需要时间的不确定性,因此不能很好地支持实时性要求较高的业务。为解决节点数量上升带来的传输延迟问题,参考文献[3]提出了基于Markov模型的改进CSMA/CA退避算法,有效减少了传输延迟。但由于该算法本身建立在IEEE802.15.4标准(针对低速无线个人区域网络制定标准)之上,因此传输速率仍不够理想。

  参考文献[4-5]提出了基于ZigBee+GPRS以解决ZigBee传输距离的方案,但GPRS受GSM网络信号质量的影响,也无法保证数据的实时性。参考文献[6]将WLAN无线局域网络用于塔机群通信,大大提高了数据的传输速率与距离,但考虑到嵌入式系统的限制,并不适合运行高功耗的WLAN网络。

  基于此,本文提出了一种采用WiMi-net无线模块的解决方案。WiMi-net无线模块内部集成一块CC1101射频芯片,该芯片功率达到12 dBm,射频范围为433 MHz。低频电磁波波长大,更容易通过障碍物,因而具有更远的传播距离。MAC层采用TDMA(Time Division Multiple Access)按时隙分配信道资源,保证各节点数据信息在其专有时隙内及时、可靠地发送。为了方便驾驶员操作,本系统还使用Qt界面库设计了交互界面友好的嵌入式操作界面。

1 系统设计框架

  考虑到系统的实时性与多任务性,本文采用基于ARM11内核的S3C6410核心板,上面搭建了经过裁剪的Linux操作系统。系统通过操作Linux串口设备文件/dev/ttySAC0将操作指令发送到WiMi-net核心板单片机上,通过WiMi-net接口层协议,就能很方便地实现数据的收发、状态的读取和控制等操作。WiMi-net片上单片机在物理层驱动射频芯片,经过功率放大器(Power Amplifier,PA)放大,覆盖半径可达到2.5 km,高覆盖半径减少了必要的中继站,加强了数据的传输速度与可靠性。

  本地塔机通过WiMi-net与其他塔机实时交换信息,得到其他塔机当前工作状态以及预输入的障碍物信息,便可由LCD实时模拟整个工地运行状态,并同时进行异常情况与防碰撞检测。整个工地运行状态通过网络发送到主控室,实现全工地的远程监控。系统在有可能发生危险的情况下做出语音与界面提示,提示驾驶员注意操作。如果塔机持续当前状态运行,系统会在安全范围内接管伸缩电机继电器与回转电机继电器,使塔机回到安全运行状态。整个系统设计框架如图1所示。

001.jpg

2 WiMi-net无线通信的OSI七层模型

  为了保证无线网络的稳定和可靠,WiMi-net使用无线通信的OSI(Open System Interconnected)七层模型,并分别定义了各层实现的功能,如图2所示。

002.jpg

  (1)PHY(物理层):驱动射频芯片,实现硬件的初始化、报文收发、信道切换、频率校准等基础工作。

  (2)MAC(链路层):TDMA时隙的分配、请求、确认、锁定、释放工作,实现大量节点同时访问网络情况下的仲裁,通过排队机制有序接入网络。

  (3)NET(网络层):实现16位网络地址和64位MAC地址的寻址、翻译和路由;实现任意节点到任意节点的全局网络路径生成、解析和路由切换工作。

  (4)TCP(传输层):建立TCP传输链路,实现数据报文的数字报真,在传输期间信道锁定,允许用户传输任意长度的任意(数据,命令)数据流。

  (5)REP(表示层):实现数据的加密和解密,需要CPU硬件支持AES加密算法。

  (6)TLK(会话层):会话级别CCITT-CRC32校验,提供端到端的差错控制技术,使发送端和接收端立刻了解报文是否有差错。

  (7)IOS(接口层):实现WiMi-net核心协议栈和用户处理器之间的接口,实现数据的收发、状态的读取和控制操作,与用户的应用层进行对接。

3 Qt环境下对WiMi-net的操作

  3.1 WiMi-net接口结构

  WiMi-net无线模块的接口层遵循一个特定结构的二进制数据流。

  (1)m_iHeader是固定的同步字符,数值=0XAA。

  (2)m_iOpCode,该报文的命令字取值0X00~0XFF之间,每一个命令有4个参数:m_iValueA,m_iValueB,m_iValueC,m_iValueD。

  (3)m_iAmount是m_pBuffer的长度,代表前面9个字节之后的扩展报文长度。

  (4)m_iCRCode是16位的CRC计算结果。

  (5)m_pBuffer是扩展部分的内容。

  其中,循环冗余校验码(Cyclic Redundancy Check,CRC)是数据通信领域常用的一种差错校验码。当WiMi-net接收端收到一包数据时,先保存原CRC数据并重新进行CRC计算,当新的计算结果与原CRC校验码不同时,则判断数据出错,并丢弃这个包。本系统为保证良好的实时性,当发送端未收到接收端的报文收到确认信息时,会立即重新发送数据。本系统采用CRC-16查表算法设计其接口函数:

  unsigned short QuickCRC16(unsigned char*pMsg,unsigned short iSize){

  unsigned char index;

  unsigned char iHiVal;

  unsigned char iLoVal;

  iHiVal=0XFF;

  iLoVal=0XFF;

  while(iSize--){

  index=iLoVal^*pMsg++;

  iLoVal=iHiVal^HiCRCTable[index];

  iHiVal=LoCRCTable[index];

  }

  return(iHiVal<<8|iLoVal);

  }

  3.2 WiMi-net无线通信流程

003.jpg

  WiMi-net支持Mesh结构(网状型网络,如图3所示)自组网,如果最近的节点由于流量过大而导致拥塞,则数据可以自动重新路由到一个通信流量较小的邻近节点进行传输,且同一网络下的子节点可直接进行通信。这样在网络中有多条路径形成回联,构成一个动态网络,稳固性很好。随着动态网络路径增多,各WiMi-net模块之间的通信也更容易避开障碍物的干扰。

  基于固定的接口结构,对WiMi-net的控制取决于特定的命令字。这些命令字可以用来控制WiMi-net的工作流程。WiMi-net从站发送数据工作流程如图4所示。

004.jpg

3.3 Qt与WiMi-net串口通信

  在第三方Linux串口类Posix_qex tserialport的基础上声明一个对象myCom,并设置相应的波特率、数据位、停止位,读取缓冲区方式等初始化配置:

  Struct PortSettings myComSetting={BAUD115200,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,10};

  myCom=new Win_QextSerialPort("/dev/ttySAC0",myCom Setting,QextSerialBase::Polling);

  myCom->open(QIODevice::ReadWrite);

  数据的转换以及发送代码如下:

  unsigned char Test[64]={0XAA,0X1D,0XFF,0XFF,0X03,0X01};

  for(int i=0;i<17;i++)

  str.append(SerialSendlist.at(i));

  for(int i=0;i<str.length();i++){

  Test[i+9]=*qPrintable(str.mid(i,1));

  }

  Test[6]=str.length();

  if(Add_Crc(Test)){

  myCom->write((char*)Test);

  }

  其中SerialSendlist中是需要发送的数据表。定义一个unsigned char型数组,里面写入了固定的同步字符、广播形式发送数据等操作字;然后利用循环以及宏函数qPrintable将str中的每个字符以其十六进制存入Test[]中,Test[6]中存放的是数据长度;再通过Add_Crc()函数向数组中添加校验码,如果返回1则向串口写入数据。由于Qt串口类继承自QIODevice类,其成员函数write()仅接受char*作为输入,所以需要将unsigned char型Test数组强制转换为char型。

  接收到的数据按0x10进行分包。当报文少于16 B时,ValueC的值为0X03,表示仅此一包数据。如果收到的数据超过16 B,WiMi-net会将接收到的数据按每16个进行分包,在每个包前都会加上类似的帧头,且Amount均为0X10,在取数据的时候便可以通过ValueC的值判断是否是第一包,以及是否到了最后一包,而最后一包共有Amount个数据。通过ValueC和Amount来判断该帧是否发生数据丢失,并取出数据。

4 Qt界面设计

  考虑到嵌入式系统的局限性,本系统使用轻量级的SQLite数据库进行数据管理,并优化了线程间的调度与防碰撞算法。系统分别对接收到的WiMi-net无线模块与传感器数据做分包提取与模数转换,在得到系统能识别的数据后与一些不会实时改变的信息(如本地塔机高度、前后臂长、坐标位置、工地大小、形状、障碍物信息等)一起存入数据库,数据库将得到的数据送入防碰撞算法模块进行分析,并模拟运行状态显示到LCD上。

005.jpg

  系统界面如图5所示。右侧状态区用来提示系统各种工作状态,包括碰撞预警、异常状态预警等,并显示本地塔机实时运行状态,方便驾驶员清楚地了解本塔机运行情况。左边是工作区域模拟运行区,本地塔机为蓝色,其他塔机为绿色,当系统判断有大概率碰撞危险产生时,以红色间断闪烁作为警示。图5中三台设备相互间隔地分布在非空旷的100 m~400 m范围内,在不添加任何信号放大设备的情况下,系统仍然能够稳定运行。

5 结论

  本文总结了传统基于ZigBee等无线通信技术搭建的塔机监控系统的弊端,提出采用WiMi-net无线模块与Qt搭建基于新型无线网络的塔机监控系统。实验证明,该系统传输距离远、实时性能好、交互能力强。但在实际工程实践中,无线传输还需考虑信号干扰、传输安全等诸多问题,下一步工作将围绕相关课题展开。

参考文献

  [1] FETTE B A.认知无线电技术[M].赵知劲,郑仕链,尚俊娜,译.北京:科学出版社,2008.

  [2] 郭长顺.ZigBee技术MAC层协议的研究、改进与仿真[D].沈阳:沈阳工业大学,2010.

  [3] 杨世超.基于CC2430的ZigBee节点设计及MAC层协议改进[D].上海:上海交通大学,2012.

  [4] 李皓明,周悦.无线传感器网络在塔式起重机监控系统中的研究与应用[J].建筑机械,2012(13):69-71.

  [5] 宋宇宙,苏娟,何清.塔机在线无线远程监控系统设计[J].传感器与微系统,2012,31(2):102-105.

  [6] 郑夕健,李林,费烨.塔机群WLAN通信系统研究[J].山东通信技术,2009,29(1):11-14.


此内容为AET网站原创,未经授权禁止转载。