基于 VxWorks的复杂道口监控系统软件研究
2011-05-14袁成奎
蒋 爽 袁成奎
随着铁路的飞速发展,平交道口日益增多,道口的安全问题逐渐提上日程。目前,道口控制系统软件设计主要是基于单片机微控制器实现的,单片机的实时性较差,利用一个调度程序完成多任务的处理,增加了道口控制软件设计的难度与复杂度,随之而来的一些不可预测的故障也成为了道口控制的安全隐患。
VxWorks操作系统是一个实时、多任务的操作系统,采用了中断驱动和基于优先级的抢占式调度方式,拥有丰富的任务间通信机制。由于其具有高可靠性和高安全性,目前在许多工业领域得到应用。道口控制系统要求实时准确地反映列车接近、到达、离去的道口作业过程,是一个典型的实时、多任务、安全苛刻的控制系统。
本文提出的基于 VxWorks道口控制软件的设计方法,就是将复杂的道口控制处理任务交给 Vx-Works操作系统进行处理,以满足道口控制的实时多任务的要求,并简化了道口程序设计的复杂性。
1 道口控制软件特点分析
道口控制软件是根据检测到的传感器信息,进行逻辑运算来判断列车在道口中的行进过程。根据列车行进进程对道口设备进行控制,在保证效率的同时,协调公路和铁路的安全问题。
列车经过道口主要分为 3个阶段:接近、到达和离去。道口控制软件不断采集各个传感器的状态信息,以确定列车的行进阶段,进而控制道口防护设备。对于不同的行车阶段,软件上要有相应的进程变量,保证各种关系和时序的顺序执行。
在实际的复杂道口作业中,经常是多辆车同时作业,有的列车接近、有的列车到达、有的列车出清等。道口图形如图 1所示。
图 1 道口图
图 1中 J1至 J11是两个方向的列车接近传感器和离去传感器,D1至 D4是到达通知传感器。可能会存在下面这种情况:列车 A刚越过接近传感器 J1,此时列车 B在到达通知传感器 D2位置,而列车 C已经到达离去传感器 J10的位置。复杂道口经常会出现多车进行作业,并且所处的进程也是不同的。
根据复杂道口控制程序的实时、多任务的特点,必须设计一套安全、可靠的调度程序来完成各个任务之间的操作。基于单片机的处理方法是为每个过程设计一个进程标志,通过对进程标志进行赋值来调用下一个进程模块。该方法的主要问题是无法实现高优先级任务的实时调度,只能按照设计的顺序执行程序,这样就降低了任务的响应速度和程序的执行效率,而且还容易产生数据的误操作。
2 基于VxWorks复杂道口控制软件设计
2.1 可行性研究
VxWorks操作系统是一个实时多任务操作系统,基于优先级抢占的任务调度特性刚好满足道口控制软件的特点与要求。可以将道口控制软件划分成 VxWorks的系统任务,交由该操作系统内核调度便可实现道口软件控制功能。信号量是提供任务间通信的最优选择,也是提供任务间同步和互斥的主要手段,可以实现道口数据的保护。Tornado是 VxWorks的集成开发环境,内部带有 VxSim仿真器和交叉调试器CrossWind,这样可以在不依赖硬件的情况下对道口控制软件进行开发和调试。因此,基于VxWorks的道口控制软件的开发是可行的。
2.2 任务划分与优先级确定
VxWorks操作系统的多任务处理中,可以对 C语言程序进行模块划分,将模块函数作为taskSpawn()一个参数,调用 taskSpawn()就可以触发相应的函数。根据道口软件的功能需求将其分解成不同的功能模块,并将它们设置成 VxWorks操作系统下的任务。
VxWorks具有 256个系统优先级,优先级 0最高,255最低。在对道口任务进行划分时就对每个任务进行优先级等级设计,不同模块的优先级应有所不同。对于进行逻辑判断的模块优先级可以设置高一些,对于驱动和采集接口模块可以设置成较低的优先级。程序中包括以下几个任务:
1.中断任务处理。中断任务实现 2个功能。一是可以通过上位机界面的功能按钮来单独控制道口设备;二是将道口设备状态信息传送到上位机。
2.传感器信息采集任务。采集传感器状态信息,并将其转化成道口控制软件能识别的数据信息。
3.驱动道口设备任务。通过输出设备将驱动变量输出到相应的驱动电路上,以驱动声光报警设备和栏木机。
4.单独控制按钮信息接收任务。接收上位机的操作信息,对操作命令进行命令解析。如果符合操作要求就执行相应的任务模块。
5.逻辑运算模块。逻辑运算模块是道口控制软件的核心,主要是根据传感器信息判断列车的走行阶段,自动进行声光报警和栏木机的控制。
各个任务优先级及与操作系统之间的关系如图2所示。
图 2 道口软件优先级划分与确定
系统上电启动后,VxWorks首先会执行系统任务,如根任务,之后根据各个任务不同优先级来执行软件的各个模块。
2.3 任务间通信
VxWorks提供了多种任务间通信机制,如信号量、消息队列和管道等。在道口控制程序中采用的就是信号量,并且各个状态标志都采用全局变量,存在于内存中。因此,可以采用共享内存的通信方式,并以二进制信号量方式实现对共享数据的互斥访问。
在逻辑处理过程中需要一个严格的时序,并且需要满足一定的条件才能执行。因此可以为逻辑运算的每个模块设置相应的二进制信号量,当条件满足时启动该任务,任务结束后再释放下一个任务的信号量。这样实现了任务按一定时序的独立运行,并且实现了道口数据的互斥访问,提高了道口控制软件的安全性。
3 设计实例
在基于VxWorks的操作系统中,道口控制机采用 Motorola生产的 PowerPC系列的微处理器自制开发板。开发板上集成了串口、并口、以太网口及固态电子盘接口,通信卡、CAN卡、底层硬件驱动程序和板级支持包都是出厂时已设置好的,只要将 VxWorks操作系统移植到固态电子盘中,进行相应配置就可以应用。
根据软件开发流程,对该道口进行功能需求分析和详细设计之后,在集成开发环境 Tornado2.0下进行基于 C语言的软件开发。通过其集成的ViSim和 CrossWind仿真调试之后,将 VxWorks操作系统和应用程序代码一同下载到道口控制机中。通过实际的调试,系统运行稳定,能够实现道口控制的基本功能。
与基于单片机的道口控制系统相比,该系统具有以下优点:
1.不用设计单独的任务调度函数。
2.具有高可靠性的运行环境。
3.系统实时性好,响应速度快。
4.采用结构化、模块化设计思想,程序简单清晰。
4 结束语
与基于单片机的道口控制系统相比,基于 Vx-Works实时多任务操作系统的道口控制系统具有更多的优点。不仅提高了整个系统的可靠性和安全性而且减少了程序设计的复杂性,使程序结构更加清晰,提高了数据的安全性。因此将 VxWorks应用在对实时性、安全性要求苛刻的复杂道口控制系统中具有一定的现实意义。
[1] 秦荥英.DX 3型道口信号设备[M].北京:中国铁道出版社,1994.
[2] 周启平.VxWorks开发指南与 Tornado使用手册[M]北京:中国电力出版社,2004.
[3] 李方敏.VxWorks高级程序设计[M].北京:清华大学出版社,2004.
(责任编辑:张 利)