袁小刚
(上海交大 高新技术股份有限公司, 上海 200235)
智能交通是准确,实时,有效,综合的运输和管理系统,集成了先进的信息技术、数据通讯传输技术、电子传感技术、电子控制技术以及计算机处理技术。城市的迅速发展,对交通领域提出了新的挑战,传统的电话线路已经不再适应新的发展形势,在一些比较偏远的地方,因为工期以及经济因素,也不适宜铺设光纤。而无线技术因为其快速部署设备,及时有效地建立通讯机制促进了在这个领域的应用。单纯的使用4G技术,又因为其费用较高,无法大面积应用。本项目通过应用ZigBee无线网路技术及4G技术组合,即利用ZigBee组网技术,在某一区域内实现多个信号机联网,然后用手机芯片通过4G网络将该区域的信号机与计算机中心信号服务系统通信,建立起区域内ZigBee+4G无线联网网路框架,成功地联接了多台信号控制机与系统服务器的通信,完成了项目的技术开发目的。
1) 通讯可靠
ZigBee无线网络技术采用了CSMA-CA的碰撞避免机制,同时为需要固定带宽的通信业务预留了专用时隙,避免了发送数据时的竞争和冲突;MAC层采用了完全确认的数据传输机制,每个发送数据包都必须等待接收方的确认信息[1]。
2) 网络的自组织、自愈能力强
ZigBee无线网络的自组织功能强,无需人工干预,网络节点能够感知其它节点的存在,并确定连接关系,组成结构化的网络。增加或者删除一个节点,节点位置发生变动,节点发生故障等,网络能够自我修复,并对网络拓扑结构进行相应地调整,无需人工干预,保证整个系统仍然能正常工作。具备自组织、自愈能力的无线通信网络是长期通信最理想的通信方式。
3) 数据安全
ZigBee无线网络提供了数据完整性检查和签名功能,加密算法采用AES-128,同时各个应用可以灵活确定其安全属性[2]。
4) 成本低廉
ZigBee无线网络工作频段为2.4G免费频率,即无需使用费的无线通信。由ZigBee把某一区域信号控制机组网后,再用4G设备将该区域的设备与信号控制服务器通信,可以极大地降低通信费用和4G设备购置费用。
通过前面对物联网无线网络技术的简要介绍,结合实际情况特点,采用物联网无线网络技术来实现计算机管理中心与路口之间的通信是一个非常理想的解决方案。系统组成,如图1所示。
图1 物联网技术系统组成原理图
1) 目前有些路段无线信号覆盖不够,比如番禺路凯旋路与徐宏中路凯旋路路口之间距离过大,经现场查看和测试,本项目采用基于ZigBee技术的无线信号中继的方式实现路口与数据中心信号的通讯,彻底解决原有无线网络无法覆盖的位置通讯问题,对原有系统来说,是一种切实可行的补充技术。中继器包括无线(含天线)部分、CPU及接口部分、电源部分,实现无线信号的自动接收与发送,使得各个路口可以互相通信。项目地理位置,如图2所示。
图2 物联网技术路口实施图
2) 在有交通信号控制机的路口,设备容易安装和取电,但其中一些中继器的安装和取电比较困难,如果单独拉电线,即费时又耗财。因此本工程中,采用ZigBee和太阳能结合的无线控制系统,无须挖路布设控制线路,各设备之间实现无线自动组网连接,既降低了系统安装成本,更重要的是避免了传统安装方式对交通干扰所带来的经济损失。随时可以施工。而且,也避免了由于城市快速发展,道路拓展等变化对原有预埋管线的干扰。由于系统没有控制线路,抗干扰能力,大大减少了维护成本。
3) 信号控制系统与路口控制机的通信是一个IP或者一个串口对应一个路口,现在的情况是,一个区域内的信号控制机通过网络通信终端结合到了一起,然后通过4G把这些路口的信息发送给服务器信号控制系统,控制系统发送给这些路口的控制命令也是通过该网络终端实现。即,现在通信模式是一对多。所以需要修改控制系统软件,设置一些特殊串口或者IP,本项目中,是使用的串口,选择ZigBee在API模式下中心管理器以绝对地址模式发送数据。在系统中设置了一批串口号,串口号在6000以上的,需要对内容作根据地址做特别解析,以分发到每个路口类实例。ZigBee每个设备都有一个8个字节的设备地址编号,5个终端设备的地址号分别为:
R1: 00 13 A2 00 40 98 7C E5 R2: 00 13 A2 00 40 98 7C E6
R3: 00 13 A2 00 40 98 7C E7 R4: 00 13 A2 00 40 70 1A 83
R5: 00 13 A2 00 40 70 1A 84
接受和发送都信息都需要根据协议,加上终端设备的地址编号,以下是程序部分针对ZigBee串口的关键代码修改:
if (ConnectMode == 0) //普通串口
{
if (CommunicationState < 9) //通讯状态正常
{
try
{
num = ComPort.Read(buffer, 0, t2); //读取串口数据
}
catch
{
}
}
}
///原先的路口都是一个路口对应一个串口
///把一个区域内使用ZIGB的路口的串口设置为同一个串口,并设置主副串口,只有主串口的路口真正读取数据
///主串口读取数据后,根据ZIGB的地址解析,分别把ZIGB数据包分发给相应地址的路口的ZIGB串口
///副串口收到主串口分发的相应有效数据,传给串口buffer即可
else if (ConnectMode == 1) //ZIGB主串口
{
if (CommunicationState < 9) //通讯状态正常
{
int tempLength = 0;
try
{
tempLength = ComPort.Read(tempBuff,0, 300); //读取串口数据
for (int t = 0; t < tempLength; t++)
{
if ((tempBuff[t] == 0x7E) && (tempBuff[t + 1] == 0x00)) //有效包,并且找到了包头
{
int tempNum = tempBuff[t + 2] - 12; //读取包的有效长度
if (tempLength < tempNum + t + 16) ///如果长度小于有效长度+包头包尾+地址码,说明包不完整
{
break;
}
if ((tempBuff[t + 4] == ZigBAddress[0]) && (tempBuff[t + 5] == ZigBAddress[1]) &&
(tempBuff[t + 6] == ZigBAddress[2]) && (tempBuff[t + 7] == ZigBAddress[3]) &&
(tempBuff[t + 8] == ZigBAddress[4]) && (tempBuff[t + 9] == ZigBAddress[5]) &&
(tempBuff[t + 10] == ZigBAddress[6]) && (tempBuff[t + 11] == ZigBAddress[7])) //根据地址码判断,如果地址符合,表示该包属于当前路口
{
for (int i = 0; i < tempNum; i++)
{
buffer[i+num] = tempBuff[t + 15 + i]; //把有效信息放入当前路口串口数据缓存中
}
//当前路口串口数据缓存中数据字节相应增加
num += tempNum;
}
else //如果不是当前,则需要根据地址查找路口
{
for (int i = 0; i < GlobalPointer.MaxIntersectionNum; i++) //遍历所有路口
{
if (GlobalPointer.pointer.Intersections[i] != null) //路口非空
{
if (GlobalPointer.pointer.Intersections[i].ComNum == ComNum) ///如果该路口为同一个串口号
{
if ((tempBuff[t + 4] == GlobalPointer.pointer.Intersections[i].ZigBAddress[0]) &&
(tempBuff[t + 5] == GlobalPointer.pointer.Intersections[i].ZigBAddress[1]) &&
(tempBuff[t + 6] == GlobalPointer.pointer.Intersections[i].ZigBAddress[2]) &&
(tempBuff[t + 7] == GlobalPointer.pointer.Intersections[i].ZigBAddress[3]) &&
(tempBuff[t + 8] == GlobalPointer.pointer.Intersections[i].ZigBAddress[4]) &&
(tempBuff[t + 9] == GlobalPointer.pointer.Intersections[i].ZigBAddress[5]) &&
(tempBuff[t + 10] == GlobalPointer.pointer.Intersections[i].ZigBAddress[6]) &&
(tempBuff[t + 11] == GlobalPointer.pointer.Intersections[i].ZigBAddress[7])) //ZIGB地址符合当前数据包的地址
{
for (int temp = 0; temp < tempNum; temp++)
{
//把有效信息放入该地址的路口的ZIGB串口缓存区
GlobalPointer.pointer.Intersections[i].ZigBBuf[temp + GlobalPointer.pointer.Intersections[i].ZigBBufLength] = tempBuff[t + 15 + temp];
}
//该地址的路口的ZIGB串口缓存区中数据字节相应增加
GlobalPointer.pointer.Intersections[i].ZigBBufLength +=tempNum;
break;
}
}
}
}
}
}
}
}
catch
{
}
}
}
else //ZIGB副串口
{
for (int i = 0; i < ZigBBufLength; i++)
{
// 把ZIGB串口缓存区的数据放到串口缓存区,以供统一解析
buffer[i] = ZigBBuf[i];
}
num = ZigBBufLength;// 串口缓存区的字节数更新为 ZIGB串口缓存区的字节数
ZigBBufLength = 0; //ZIGB串口缓存区的字节数清0
}
1) 设备实施优点
(1)布网更方便
根据需要可随时增加或减少网络设备(T)的数量,增加和减少不用修改网络配置,网络自动检测恢复,相比其它网络的人工管理、维护显得更为方便和节省资源[3]。
(2) 更节能
ZigBee芯片是低功耗数据传输模块,耗电量极低,中继可采用太阳能供电即可满足使用要求。
(3) 系统运行易维护,故障易判断易处理。经现场实测,可有效地实现远程无线遥控。
2) 运营成本对比
(1) ZigBee网络通讯费为零,本方案中无线网络采用了免费的2.4G频段,无任何运营费用。4G芯片流量费用每月只需要一个2G流量包就可满足使用要求。根据实用情况发现,单个节点在接入6个或6个以下的单元时,工作效果最佳。在正式联网时,可以至少减少大半的通讯或者管线敷设费用。
(2) 设备维护费用极低,本方案中采用的无线技术已经很成熟,设备安装维护简单。
参考文献
[1] 王小强. ZigBee无线传感器网络设计与实现[M]. 化学工业出版社, 2012.
[2] 葛广英. ZigBee原理、实践及综合应用[M]. 清华大学出版社, 2015.
[3] 谢金龙. 物联网无线传感器网络技术与应用[M]. 人民邮电出版社, 2016.