崔建明
(长安大学 信息工程学院,陕西 西安 710064)
车辆感知是支持车联网技术(Internet of Vehicle,IoV)的主要技术内容之一,在文献[1]中车联网技术被定义为:指利用先进传感器技术、网络技术、计算技术、控制技术、智能技术,对道路和交通进行全面感知,实现多个系统间大范围、大容量数据的交互,对每一个车辆、每一个道路的状态进行多方面、全时段的控制,以提供交通安全及交通效率。从定义中可以看出“车联网”技术本质就是无处不在的感知,这样感知过程需要有效的传感器及双向信息交互。车联网的研究关注的重点在于车-车、车-路的宏观通讯技术,以及车辆自身的微观状态感知,大多数微小设备感知信息是单向传递,缺乏对部件的控制与操作回馈的双向信息传递,故此需要完善,文中基于这个需求进行了研究。技术主要内容把嵌入式的BOA[2]技术引入到车联网技术当中。此方法可以通过与CAN(Controller Area Network)总线、控制中心的智能程序集成,达到集中监控与调整设备整体的关键部件参数,即智能部件感知的目的。甚至通过具有独立的虚拟地址技术对关键部件设置独有地址,达到远程感知。对此,本文做了部分研究工作,首先,介绍了基于BOA的面向车联网构架结构,其次,对关键技术GoAhead的Web Server迁移到VxWorks做详细的介绍,最后,给出一个对车联网中的关键部件进行管理的简单例程。
在车联网系统中需要感知具体的关键部件的健康状态,运行信息等。车联网技术感知模型如图1所示,车辆感知信息通过(OBU)与路边设备(RSU)建立无线通信,经过网关接入互联网。
图1 “车联网”感知模型Fig.1 Sensor model of IoV
“车联网”感知模型相比来说较为宏观,如果微观层面上需要在“车联网”内部具有感知车辆内部设备的数据交互,达到被感知设备与管理系统或数据中心建立通信关系。借助BOA技术建立关系如图2所示,达到双向交互目的。
图2 被感知设备与远程数据中心建立通信关系Fig.2 Communication relationships be establish the be sensing equipment and the remote data centers
对一些具体的仪器组件是通过传感器的方式感知获取数据,缺少对信息的交互能力。如果部件感知过细,可以看出对传输的环境要求将有所提高。如图3所示,(a)表示为感知的是目标的整体,而(b)感知的为目标的各个组成部分,(c)则是通过集中控制器与部件和控制中心联系,通道数量减少,降低复杂程度与成本。目前,“车联网”的信息交互是处于一个集中的层面上体现,如天气情况、健康状态、交通冲突与否。在本项研究中,建立一个BOA连接一个被感知部件与控制中心或数据中心的机制,达到感知更加细微,实现整体更多有效决策。
实现“车联感知”的计算模式,是依靠各类嵌入式BOA服务微系统的应用,集成各个部件异构传感数据的平台,集收集传感数据和指令发送于一体。目前嵌入式BOA服务器软件中,GoAhead Web Server是一款可移植性强,免费的嵌入式WEB服务器,它是运行于嵌入式操作系统之上的应用层软件[3]。VxWorks操作系统是美国风河公司设计开发一种嵌入式实时操作系统(RTOS),因其良好的持续发展能力、高性能的内核、友好的开发环境、卓越的可靠性和实时性,被广泛应用于通信、航空、航天等实时性要求极高的领域中。并结合安防监控系统的视频传感器控制器给出了应用实例。
通过分析,具有局部控制器的部件感知降更具优势,故此需要建立虚拟地址与外围控制的关系,达到控制中心与微部件的信息交互。如图3中的 (c)所示,c.1….c.4都集成了BOA的技术,这样局部控制与部件见建立映射关系,如图4所示。其中BOA0为与外界感知的总接口,而BOA 1到BOA 6……等分别为在BOA 0下的虚拟端口地址控制的部件接口。通过这种虚拟独立地址的技术完全可以避免由于IP地址不足带来的弊端,并且可以便于整体管理感知微部件。当然BOA支持IPv6[6],那么地址分配可以采用实地址方式进行信息交互。
图3 感知对象改进Fig.3 Improve the objects of sensing
图4 控制器与部件BOA映射Fig.4 Mapping the controller and the BOA
BOA是单任务的HTTP服务器,与其他传统的Web服务器不同的是当有连接请求到来时,它并不为每个连接单独创建进程,也不通过复制自身进程来处理多链接,而是通过建立HTTP请求列表来处理多路HTTP连接请求,同时它只为CGI程序创建新的进程,这样就在最大程度上节省了系统资源,这对嵌入式系统来说是关键[2]。同时它还具有自动生成目录、自动解压文件等功能,因此,BOA具有很高的HTTP请求处理速度和效率,在嵌入式系统中具有很高的应用范围。GoAhead就是这样一类Web Server的工程应用软件。目前有支持 GoAhead[4]的嵌入式操作系统包括 Windows CE,pSOS,Embedded Linux,uCOS,VxWorks,QNX 等。 这种嵌入式 BOA技术的 Web Server支持 ASP,嵌入式 JavaScript,标准 CGI,内存中的CGI处理GoForms,扩展的API,每秒可处理大于50个请求[5]。支持硬件构架ARM7,ARM9等,并满足VxWorks操作系统和GoAhead工程运行的需要。
首先关键部件本身能够ARM7/ARM9硬件构架控制,这是一个基本条件,如图5所示。在本例中采用ARM7作为主要控制硬件平台部分。
图5 车联网BOA系统构建Fig.5 Build the BOA of IoV
操作系统是应用软件正常工作的平台,BOA属于应用软件的类型,它具备Web Server功能属性。为了完成这个工作,需要借助能够应用在VxWorks平台上的GoAhead软件。移植GoAhead关键是让VxWorks在ARM7硬件平台上具有很好的运行状态,故此需要开发板级支持包(BSP),用于建立操作系统与硬件之间的中间层。然后移植TFFS(True File Format System)文件系统,这样VxWorks操作系统映像文件、GoAhead的工程映像文件及Web文档就可以运行在嵌入式系统硬件平台上。
当目标板中需设计一个用于接受用户指令的进程,加入到系统的多个正在运行的进程当中,系统采用称为ROUNDROBIN[10]的调度方式进行轮转调度。
为方便程序调试和系统集成,分别对EOS(Embedded Operation System)环境和应用程序进行配置。首先,进行移植准备。建立一个可下载的(downloadable)的VxWorks工程,调试成功后再将VxWorks映像和GoAhead.out文件一起上传到tffs1中,在 VxWorks的 usrAppInit()函数中加载 goahead.out文件,然后再启动Web Server。
UsrAppInit中的关键代码如下:
#ifdef USER_APPL_INIT
USER_APPL_INIT;
#endif
ioDefPathSet (“/tffs1”);/* 设定当前的路径为 tff1 的根目录*/
if(loadGoaheadModuleAndRun()==OK)
printf(“GoAhead Webserver READY. ”);
}
如 果 设 置 websSetDefaultPage(T(“controltree.html”)) /*
设置默认主页*/
对于完成的正常能够运行的项目,在浏览器中输入地址http://192.168.1.1/controltree.html即可以访问/tffs1/webs/controltree.html文件。
板级支持包BSP(Board Support Package)是介于嵌入式硬件和EOS之间的一层系统软件,负责向 VxWorks提供与硬件环境的基本接口,其移植的主要过程有:
第一步 配置嵌入式处理器的CPU型号,主频等相关参数,为整个软件系统提供底层硬件支持;
第二步 根据硬件模块配置相关设备驱动和系统中断服务程序;
第三步 定制总线及芯片引脚功能,配置存储空间映射和存储空间大小;
第四步 定制EOS功能,为软件系统提供一个多任务工作环境。
BSP的配置是系统重中之重,合理的配置能够保证系统稳定运行。
选择好的调试方法,可以提高学习和项目开发的效率。目前VxWorks程序开发中常用的调试方法有网络和串口调试方法,在本应用系统中选择网络调试。正确的配置方法是在所建立的Bootable工程的VxWorks组件中选择WDB连接和END驱动,所生成的VxWorks映像通过网络加载到内存运行。主机端还需要在Target Server配置和目标机相连,配置中BackEnd选择wdbrpc,目标机的IP设置为192.168.1.11,核心文件指向主机FTP下载目录中的VxWorks映像,最选择all symbol并选中Synchronize Target/Host Symbol Table。配置如果正确,即可启动Target Server。
此时可以在当前工作空间下建立一个可下载的应用程序模块,在该模块下新建一个程序文件Multitasks.c,经编译生成Multitasks.o,下载到目标机,最后在主机的wShell中输入Mutiltasks,在超级终端中即可以看到任务的执行情况,其中代码如下:
void pt1(void);
void pt2(void);
Mutiltasks(){/*一个多任务例程*/
int tId1,tId2;/* 任务 ID*/
tId1=taskSpawn (“tpt1”,90,0x100,2000,pt1,0,0,0,0,0,0,0,0,0,0);
tId2=taskSpawn (“tpt2”,90,0x100,2000,pt2,0,0,0,0,0,0,0,0,0,0); }
void pt1 (void){printf(“Hello, I am task tprint1. ”); }
void pt2 (void){printf(“Hello, I am task tprint2. ”); }
在开发过程中使用应用程序模块是非常方便的,如果要形成最终产品,需要将调试成功的模块迁移到bootable VxWorks映像中,方法是将源程序加入bootable VxWorks项目,并在usrAppInit.C文件中的usrAppInit()函数下添加入口代码Mutiltasks(),代码如下所示。最后编译成符合现场要求的VxWorks映像并完成迁移工作。
void usrAppInit(void) {
#ifdef USER_APPL_INIT
USER_APPL_INIT;
#endif
Mutiltasks ();}
本文针对车联网的特点介绍了目标板上移植嵌入式BOA的方法和步骤,交叉编译环境的建立方法及控制器的设计思路。可以看出,BOA技术支持车联网,可以满足细致部件的感知。
此外,针对于系统的“车联网”技术还需要深入的研究,BOA只是在此研究上的一个基本内容。由于感知是通过虚拟地址映射得到每一个部件的ID,故此需要一个控制中心,在工程中需要控制中心与感知部件总体考虑,文中没有在此内容上有过多描述。在实际应用中采用IPv6地址,还是虚拟地址这取决于成本与技术条件,这些是以后需要深入研究的内容。
[1]WANG Jian,LIU Yan-heng,GAO Wen-bin.Securing internet of vehicles using TCM [J].International Journal of Digital Content Technology and Its Applications,2010,4(7):226-233.
[2]Webserver B [EB/OL].[2000-02-03].http://www.boa.org/documentation/.
[3]Massa A J.Integrating the GoAhead Webserver&eCos[J].Dr.Dobb's Journal,2002,27(11):56-64.
[4]Massa A J.Integrating GoAhead WebServer&eCos:Webbased remote management for small systems[EB/OL].[2002-12-01].http://www.ddj.com/mobile/184405201/.
[5]ZHAOQing-lei,HAN Cheng-shan,WEN Ming,et al.GoAhead Embedded Server’s Design and implementation[J].Control&Automation,2011,27(4):67-69.
[6]Silva C d,Rodrigues B,Mendes J J P C,et al.Design and Construction of Wireless Sensor Network Gateway with IPv4/IPv6 Support[C]//Communications (ICC), 2011 IEEE International Conference on.Washington D.C:IEEE Computer Society,2011.
[7]Shreedhar M,Varghese G.Efficient fair queuing using deficit round-robin[J].IEEEI ACM Transactions on Networking,1996(4):375-385.