1、有轨电车轨道模块中实时操作系统的应用:该文主要介绍将实时操作系统应用于有轨电车轨道模块控制系统,通过实时系统弥补离散控制系统实时性差的问题。采取基于LPC1700的实时多任务操作系统C/OS-进行有轨电车轨道模块的通信控制,从而实现了各个模块通信的实时性。关键词:实时操作系统;轨道模块;LPC1700;C/OS-中图分类号: TP31 文献标识码:A 文章编号:1009-3044(2023)18-4341-03The Application of Real-time Operating System in the Track Module of the TramZHAO Sheng-yan,
2、LING Xiao-ming(Lanzhou Jiaotong University, Lanzhou 730070, China)Abstract: In this paper, a real-time control system was used to the orbital module control system of the trams main track, through the real-time system we solved the problem of poor real-time in discrete control system.By using the re
3、al-time multitasking operating system named C/OS-which based on LPC1700,we control the communication of the trams track module and implement the real-time communication of the modules.Key words: RTOS(real-time operating system); orbital module; LPC1700; C/OS-1 概述在城市各种公共交通工具中,城市轨道交通具有运量大、速度快、平安可靠、污染底
4、等特点1。而在轨道交通控制系统中,轨道模块控制系统是交通运营方面极为重要的一个环节。传统的轨道模块控制系统是离散模块,离散模块无法实现各个模块的通信的实时性。因此,为了更好地提高系统的实时性,研究将实时操作系统应用于轨道模块,已成为完善控制系统十分重要的一个方面。基于以上原因,该文研究了有轨电车轨道模块控制中实时多任务操作系统C/OS-的应用,并通过实际应用验证了其可行性。采用基于LPC1700的实时多任务操作系统C/OS-进行有轨电车轨道模块控制时,首先要将C/OS-移植到LPC1700微处理器上。C/OS-是一个完整的,可移植、固化、裁剪的占先式实时多任务内核。C/OS-是在PC机上开发和
5、测试的,但C/OS-的实际对象是嵌入式系统,并且很容易移植到不同架构的微处理器上2。该文将简单介绍如何将C/OS-移植到LPC1700上并且实现有轨电车轨道模块控制系统中多任务的运行。计算机在执行应用程序时,经常要用I/O设备进行数据的输入和输出,而I/O设备在工作时总是需要一段时间的。于是在I/O设备工作期间,如果CPU没有其他任务,那么就只能等待,因此就会使计算机运行一个应用程序所花的时间比拟长,也就是说,这种系统的实时性较差。多任务运行的实现实际上是靠CPU在许多任务之间转换和调度。CPU只有一个,轮番效劳于一系列任务中的某一个。多任务运行使CPU的利用率到达最高,并使应用程序模块化3。
6、该文就是使用了多任务,将一个大的应用程序分成相对独立的多个任务来完成,从而给应用程序的设计和维护也提供了极大的方便。2 基于LPC1700的C/OS-的移植1) 移植要求在将实时操作系统应用在有轨电车轨道模块控制系统中时,我们采用了LPC1700微处理器,移植过程在Keil Vision4集成开发环境上完成。由于LPC1700微处理器支持并能产生中断、具有堆栈指针、具有CPU内部存放器入栈和出栈指令,并且Keil Vision4的C编译器可直接在C语言中开关中断,并支持内嵌汇编指令4。所以,以Keil Vision4为开发平台,以LPC1700作为目标微处理器来移植C/OS-是完全可行的。2)
7、 需要移植的主要内容需移植的C/OS-的软件体系结构如图1所示。从图中我们可以明确知道对于C/OS-的移植主要是编写OS_CPU.H、OS_CPU_C.C和OS_CPU_A.ASM三个文件中的代码5。3) 移植后的测试在验证移植的C/OS-是否正常工作时,首先不加任何应用代码来测试移植好的C/OS-,也就是说,应该先测试内核自身的运行状况。这样做的好处是:如果有些局部没有正常工作,我们可以明白是移植本身的问题,而不是应用代码产生的问题。在进行此次移植代码的测试时,采用了以下四个步骤6: 确保C编译器、汇编编译器及链接器正常工作; 验证OSTaskStkInit()和OSStartHighRdy
8、()函数; 验证OSCtxSw()函数; 验证OSIntCtxSw()和OSTickISR()函数。3 有轨电车正线联锁控制系统实时多任务的实现C/OS-的任务有两种:用户任务和系统任务。由应用程序设计者编写的任务,叫做用户任务;由系统提供的任务叫做系统任务。用户任务是为了解决应用问题而编写的;系统任务是为应用程序提供某种效劳或为系统本身效劳的6。下面的任务就是针对有轨电车轨道模块所设计的用户任务,轨道模块实现对轨道区段的状态采集,将状态信息传至联锁CPU模块进行联锁运算,确保行车平安,以下是轨道模块相关功能的实现方式。1) 双ARM同步任务的实现在建立此任务时,由于每次任务执行的时间必须相同
9、,因此让双ARM同步任务的执行时间是0.5ms。具体实现方法是:首先为双ARM同步任务配置堆栈空间,其代码为static OS_STK stkARM_synTask256,并在main()函数中创立此任务,代码为OSTaskCreate(CupledTask, (void x)0, &stkCupledTasksizeof(stkCupledTask) / 4 - 1,12)。其次让定时器0每隔0.5ms中断一次,在每次中断时,用消息邮箱发送消息给所有的任务。发送消息邮箱的具体步骤是:定义消息邮箱指针:OS_EVENT xMybox;在main()函数中创立消息邮箱:Mybox = OSMbo
10、xCreate(void x)0),最后发送消息:OSMboxPostOpt(Mybox,(void x)1,OS_POST_OPT_BROADCAST)。当处于挂起状态的双ARM同步任务接收到消息时,就会立刻进入就绪态,当其他更高优先级的任务运行结束后,此任务即刻进入运行态。进入主机调试窗口观察到的结果如图2所示。进入从机调试窗口观察到的结果如图3所示。2) 采集外线状态任务的实现由于信号采集任务的优先级高于数据处理任务的优先级,即信息传递的上游任务的优先级高于下游任务的优先级,所以让采集外线状态任务的优先级高于双ARM同步任务的优先级3。在函数main()中创立此任务,其代码为:OSTas
11、kCreate(GatherTask, (void x)0, &stkGatherTasksizeof(stkGatherTask) / 4 - 1, 8)。同样地,当任务接收到消息邮箱发送来的消息后,且任务处于就绪态任务的最高优先级时立刻进入运行态。其采集到的外线状态的结果如图4所示。3) 解析联锁命令任务的实现解析联锁命令任务是比拟关键的任务,为防止由于联锁命令的漏解析,使得控制系统发出错误的控制指令,我们将此任务的优先级设得比拟高,创立任务的代码为:OSTaskCreate(ParseTask, (void x)0, &stkParseTasksizeof(stkParseTask) /
12、 4 - 1, 6),当有新数据到达时,判断第一路、第二路有无命令,如果有命令,判断是否为请求命令,假设是请求命令,且有请求数据时,读取请求数据的帧序号。4) 驱动继电器动作任务的实现将驱动继电器动作任务创立为主任务,且优先级为创立的任务中最高的优先级:OSTaskCreate(mainTask, (void x)0, &stkMainTasksizeof(stkMainTask) / 4 - 1,4),我们在安排任务的优先级时,设计了一定的冗余,这样就为以后增加新任务提供方便,即当要创立新的任务而不知道优先级是多少时,就可以在不改变现有任务优先级的情况下,很容易根据需要找到一个适宜的空闲优先
13、级。驱动继电器动作的命令如图5所示。5) CPU运行灯控制任务的实现CPU运行灯控制任务的实现采用接收二值信号量的方法,二值信号量的使用范围是:被控制方总能够及时响应控制方发出的信号,完成相应处理器任务,并在下一次信号来到之前进入等待状态6。OSTaskCreate(CupledTask, (void x)0, &stkCupledTasksizeof(stkCupledTask) / 4 - 1,12)是创立CPU运行灯控制任务的代码,中断处理函数每到100ms时给CPU运行控制任务发送二值信号量:OSSemPost(CpuSem),当任务接收到二值信号量时,即刻进入就绪态。6) 串口2发送
14、数据任务的实现与CPU运行灯控制任务类似,串口2发送数据任务也通过接收二值信号量的方法,当定时器0每隔50ms时,发送信号量,任务先进行发送数据的配置,包括帧头、帧尾、第一路采集状态数据、第二路采集状态数据、数据校验和等,待接收到信号量时即刻向CPU发送数据7。如图6所示为执行CPU通过串口2向监测CPU发送的数据,其中FE是帧头,EF为帧尾,55和55分别是第一路和第二路轨道采集状态,33和44分别为第三路和第四路轨道采集状态,66为故障信息,78为校验和。从图中我们可以看出监测CPU能成功地接收到执行CPU发送的数据。4 总结针对有轨电车轨道模块控制系统中,实时性较差的问题,采用了基于LP
15、C1700的C/OS-实时操作系统,已实现各模块通信的实时性。从文中通信数据结果中可以看出,采用了实时操作系统C/OS-的各模块能有效满足有轨电车轨道模块控制系统实时性的要求,可以对轨道区段的状态信息进行实时采集,并将状态信息传至联锁CPU模块进行联锁运算,确保了行车平安,具有一定的现实意义。参考文献:1 耿幸福,徐新玉,张国保.城市轨道交通行车组织M.北京:人民交通出版社,2023:2-10.2 Jean J.Labrosse.嵌入式实时操作系统C/OS-M.邵贝贝,等,译.北京:北京航空航天大学出版社,2003:116-281.3 任哲.嵌入式实时操作系统C/OS-原理及应用M.北京:北京航空航天大学出版社,2023:42-187.4 周立功等.深入浅出Cortex-M3LPC1700(上册)M.广州:广州致远电子,2023:213-377.5 顾凤玉,施国梁,杨涛.基于LPC2478的C/OS-的移植及多任务的实现J.知识与技术,2023,5(7):1776-1779.6 周航慈.基于嵌入式实时操作系统的程序设计技术M.北京:北京航空航天大学出版社,2023:50-160.7 周立功,等.深入浅出Cortex-M3LPC1700(下册)M.广州:广州致远电子,2023:142-200.