基于ARM9的车载智能显示终端设计与应用
2010-05-04丁国君王立德
马 钊,严 祥,丁国君,王立德
(北京交通大学 电气工程学院,北京100044)
目前大部分旧型车和部分运行车辆还没有安装机车通信网络和故障检测智能显示系统,驾驶员所能获取的机车运行信息内容较少,行车故障也无法记录,给列车安全运行带来了隐患。因此,对其进行智能化,现代化的技术改造是必要的。目前国内机车行业使用的智能显示单元主要有以下两种,即基于DSP+CPLD(显示驱动)的显示终端和基于X86架构工业PC机的显示终端[1]。这两种显示系统开发较容易,但易受振动、灰尘、潮湿、高温以及其他环境问题的影响,电能消耗量大,运行不稳定,升级困难,容易出现故障和数据丢失。这些机车需要一套高性价比且安全稳定的列车故障检测显示系统。提出了基于CAN网络、ARM和 Windows CE5.0嵌入式系统的车载网络智能显示终端(IDT)。通过车载网络、数据采集模块和故障检测模块将采集到的机车状态和故障信息发送到司机室显示屏,提示司机采取相应的故障处理措施。同时机车运行数据由显示模块以无线方式传回地面机务段,地面人员可以及时跟踪了解机车状态。
1 系统硬件结构设计
设计的核心处理器采用32位RISC的ARM920T内核S3C2440A处理器,配备64 MB的NAND Flash和64 MB的SDRAM。S3C2440处理器是一款低功耗、高度集成的微处理器,主频达到了400 MHz,具有丰富的接口资源,能够满足本系统的设计需求。LCD显示屏采用的10英寸LCD工业屏,能够保证在较宽的温度范围正常工作;控制接口采用9个按键的按键条,相比触摸屏,虽然牺牲了性能但保证了控制的稳定性。系统对外接口主要有以太网接口、USB主机及设备接口、按键IO接口、SPI接口、串口等。由于S3C2440本身并没有集成CAN控制器,因此本设计采用其SPI接口与外部设备C8051F041单片机进行,再通过CAN网络与列车上其他网络节点相连。
图1 系统硬件结构
图1中可以看到,Flash存储系统引导数据;SDRAM作为系统运行动态内存;SD卡用于故障信息存储;LCD模块显示信息;键盘鼠标通过USB口输入;串口实现对GPRS的控制和通讯;按键IO接口实现对显示屏的相关操作。由于列车工作环境恶劣,在硬件设计时为了保证抗电磁干扰性和系统稳定性,核心板采用6层设计,底板采用4层设计。其中S3C2440处理器和NAND FLASH、SDRAM设计在核心板上,其余接口和电源电路设计在底板。
2 系统平台设计
2.1 操作系统定制
机车网络的信息量比较多,对于显示终端来说,需要同时进行较多的任务以完成网络传输,数据分离,人机界面,外设控制等功能,因此,选用具有多任务、具备多媒体特性的操作系统是必要的。文中选用Windows CE嵌入式操作系统,其开发软件丰富,模块化的设计使系统可大可小,可根据需求进行定制,稳定性和移植性好,支持多种CPU,并对各种文件系统提供完备支持[2]。Windows CE操作系统的开发工具为微软提供的Platform Builder 5.0(后文简称PB),用来定制和生成系统镜像,并导出对应镜像的SDK(Software Development Kit)。SDK应用于编写基于该系统镜像的应用程序[3]。操作系统开发流程如图2所示。
图2 Win CE系统开发流程
2.2 SPI驱动程序设计
通常Wince会给出支持多种CPU常用设备的驱动程序,如LCD驱动、USB驱动、串口驱动等;但有时由于平台采用了特定的硬件设备,其驱动程序在PB中并没有给出,这时就需要用户针对实际的硬件自行开发,以满足个性化的需求。本系统所涉及的SPI接口驱动就属于此类。所以自行开发了SPI流接口驱动程序,供上层操作界面应用程序调用。采用流接口方式编写系统SPI驱动程序,主要涉及 3部分:编写驱动程序;编写SPI.def文件;将驱动导入注册表。
以PB为开发工具进行驱动程序编写,首先在项目工程中包含S2440.H头文件[4],然后直接调用VirtualAlloc命令,申请虚拟内存,VirtualAlloc函数是最底层的分配虚拟地址空间的函数。它用进程的地址空间或者全局地址空间内分配符合条件的地址空间并且自动用0初始化提交的物理存储器。其函数如下所示:
VirtualAlloc(0,sizeof(SSPreg),MEM-RESERVE,PAGE-NOACCESS);
函数若执行成功,将返回已分配好的虚拟空间的首地址,用一个指向结构体的指针变量来接收。在VirtualAlloc函数成功返回后,调用VirtualCopy函数将映射的物理地址绑定到刚刚分配好的虚拟空间地址。
VirtualCopy((PVOID)v-pSSPregs,(PVOID)(SSP-BASE),sizeof(SSPreg),PAGE-READWRITE|PAGE-NOCACHE);
运行在用户状态的驱动程序或应用程序必须用此函数,因为用户模式下的线程没有直接访问物理内存的权利。
有了上述准备工作后,我们可以进行I/O和SPI内存映射函数SPI-InitAddrSPI(void)、SPI-InitAddrIO(void)的编写。以前者为例关键代码如下:
//申请内存空间,大小等同SSPreg结构体,返回空间起始地址指针
v-pSSPregs=(volatile SSPreg*)VirtualAlloc(0,sizeof(SSPreg),MEM-RESERVE,PAGE-NOACCESS);
//虚拟内存映射,将申请的地址绑定到 SSPBASE指向的地址。
VirtualCopy((PVOID)v-pSSPregs,(PVOID)(SSP-BASE),sizeof(SSPreg),PAGE-READWRIT E|PAGE-NOCACHE));
映射成功后,通过对v-SSPregs的操作可以实现SPI相关底层硬件的寄存器配置和读写。接下来就可以进行SPI流接口函数的编写,主要是通过以下几个模块来实现驱动的[5]:SPI-Open();SPI-Close();SPIInit();SPI-Deinit();SPI-Read();SPI-Write();SPIIST()。根据SPI的技术文档,通过上述几个模块对SPI的寄存器进行控制,实现SPI的收发数据。控制通信程序示例如下:
从端口读数据,SPI为按字节收发方式,每收发一个字节调用一次SPI-Write()函数UINT8 SPI-Write(UINT8 Data)
应用程序调用函数CreateFile获取SPI设备句柄,文件系统将会调用SPI驱动例程中的SPI-Open()来响应应用程序的请求。当应用程序调用ReadFile函数读取SPI设备上的字符时,文件系统将会调用SPI驱动例程中的SPI-Read()函数来读取SPI接口设备上的数据。编写完SPI驱动程序后,使用Platform Builder编写并生成DLL文件,定义SPI.def文件,最终生成CEC文件,将其导入Win CE系统后重新编译镜像,修改相应注册表项,就完成了SPI流接口驱动程序的编写。
3 应用程序设计
3.1 程序框架
采用Visual Studio.NET 2003来开发基于.NET Compact Framework的应用程序,使用C++语言,安装上之前生成的SDK,即可进行人机界面应用程序的开发。由于本系统网络数据庞杂,复合度较高,在数据处理同时需要进行界面刷新等任务,是一个多任务系统。因此笔者应用多线程技术,并根据任务的重要性进行线程优先级划分,以充分利用系统资源,保证系统实时性和网络传输的效率。除主线程外,应用程序主要包括3个线程,根据优先级从高到低依次是:(1)SPI通信线程;(2)界面控制线程;(3)按键响应线程。
3.2 故障数据显示存储
司机室IDT最主要的功能就是实现故障数据的接收显示和存储功能,将采集模块和故障检测仪送来的故障代码、状态信息进行显示存储。机车的故障记录是一个相对复杂的过程,主要有两种情况:(1)瞬间故障,触发后又自我恢复;(2)持续性故障,需要人工操作后排除。基于这两种情况,显示屏在显示故障时分两个类别:当前故障和历史故障。当前故障界面为司机提供当前运行状况下依然存在的故障,并根据故障发生的原因给出排除故障的操作提示。历史故障界面提供曾经发生的故障,包括瞬时恢复的故障和已经手动排除的故障,为行车提供一个有力的数据记录,为地面指挥甄别行车故障的发生原因和责任追查提供可靠依据。
设计采用SQL Server CE、RDA(远程数据访问)技术和ADOCE访问数据库实现故障数据的实时显示和存储。在每页可根据按键提示查询需要的故障信息和当前故障。当机车发生故障时,程序主界面的故障标志变红并且闪烁,提示司机查看当前故障页面及相应的指导操作。故障处理功能是在程序中用定时器定时查询实现的。
如图3所示,SPI接口收到的数据是实时接收的,应用程序进行数据分离:由采集模块传送来的数据为机车状态灯信号,如主断、预备、零位、主接地和辅过流等;由故障检测仪传来的数据为网压、电机电压和电流以及故障数据。通过SQL Server CE和ADOCE编程,将故障数据与标准无故障数据进行比较,得到故障号,然后记录当前故障,刷新显示。图4是应用程序其中的一个主界面,此界面主要实现故障数据的实时显示和司机操作提示。
图3 故障处理流程
图4 人机界面当前故障页面
另外,本系统通过GPRS,采用RDA方式使SQL Server CE与地面监控站的SQL Server进行数据同步,使得地面实时掌握机车运行状态,对机车安全运行起到了很好的保障作用。
4 结束语
本文设计的新型列车智能显示终端,将32位多任务嵌入式实时操作系统Window s CE.NET技术引入设计中,用户操作界面友好,系统可扩展能力强,各项功能均达到预期的标准。其发热量低,噪声小,系统稳定可靠,满足应用需求,且拥有体积小,质量轻,安装方便,移动性强,软件更新维护方便等传统工控系统所不具备的优势,为其他嵌入式检测显示系统提供了良好软、硬件设计参考。系统当前安装应用于昆明机务段SS3型电力机车上,运行状态良好。
[1] 王永翔.机车故障诊断系统中的司机室显示屏[J].铁道学报,2006,28(3):67-70.
[2] 何宗键.《Windows CE嵌入式系统》[M].北京:北京航天航空大学出版社,2006:10-22.
[3] 张东泉.Windows CE开发实例精粹[M].北京:电子工业出版社,2007:18-28.
[4] 汪 兵.EVC高级编程及其应用开发[M].北京:中国水利水电出版社,2005:253-273.
[5] 刘学贵.基于Windows CE的SPI驱动程序设计[J].单片机与嵌入式系统应用,2007(7):75-77.