李彦儒, 申 萍
(北京交通大学 北京 100044)
随着近年来我国交通运输网络的迅速发展,城市轨道交通建设取得了巨大的成就,然而城轨列车与地面控制中心的通信需求仍亟待满足。 一方面,城轨列车需要向地面控制中心发送车辆状态信息,以便地面控制中心能够动态地监控车辆运行状态,例如当前车速、轮轴温度、蓄电池电压、牵引单元状态等;另一方面,城轨列车发生故障时需要及时向地面控制中心发送报告,以便地面控制中心能够准确、实时地诊断故障问题[1-2]。 4G 移动技术的适时发展为城轨列车与地面控制中心的实时、大数据通信提供了理论基础。本文在4G 移动网络的基础上,应用开源、安全且代码风格良好的嵌入式Linux 操作系统,对实现实时、高速、可靠的通信所需解决的部分关键性技术难点进行了研究与分析,提供了相应的解决策略。 对实现城轨列车与地面控制中心实时、高速、可靠的通信需求具有重要的意义。
城轨列车与地面控制中心通信系统结构如图1 所示,分为车载通信系统与地面维护中心两部分。 车载通信系统包括列车数据采集设备、嵌入式控制器以及4G 路由器。嵌入式控制器运行Linux 操作系统,实时地通过RJ45 以太网接收列车数据采集设备发送的车辆常规及故障信息, 并通过4G 路由器将车辆信息发送到4G 移动网络。 地面控制中心采用Windows 服务器版本, 从4G 移动网络接收车辆信息并进行分析,判断车辆的运行状态,并对车辆信息进行显示、存储。如有需要则将分析结果反馈至城轨列车。
图1 通信系统结构Fig. 1 Structure of communication system
当城轨列车发生故障时,嵌入式控制器必须快速地做出响应,将故障信息发送至4G 移动网络,这就对操作系统的实时性有很高的要求。 然而常规Linux 是非实时操作系统[3],因此必须对其进行改进,使其成为实时操作系统,然后将改进后的实时Linux 操作系统移植到嵌入式Linux 控制器中。 同时,4G 移动网络采用动态IP 地址分配策略,在规定的时间内没有通信数据则自动解除已分配的IP 地址, 需要在通信是检测网络状态。 在城轨列车高速运行过程中,还可能会因为通信信号质量问题导致数据发送中断、 数据包错误等情况。为了满足可靠的通信需求, 必须对利用4G 移动网络通信时的通信策略进行优化,加入网络连接状态检测机制、数据包校验机制、网络故障重传机制等。
常规Linux 操作系统为非实时操作系统, 无法满足本文中通信系统对实时性能的要求。 约束Linux 操作系统实时性能的因素主要包括以下3 个方面[4]:
1)内核的不完全可抢占特性
优先级高的进程中断优先级低的进程被称为内核抢占,Linux 系统没有提供完整的抢占机制。
2)时钟粒度粗糙
Linux 3.0 版本内核的时钟频率小于1 200 Hz,时钟周期大于0.8 ms,无法满足实时任务调度需求。
3)中断关闭
Linux 操作系统经常为了保护系统关键数据而关闭系统中断。 导致系统不能实时响应外部中断。
基于以上3 方面的原因,Linux 为非实时操作系统。 为了满足城轨列车与地面控制中心的实时通信, 必须对Linux 操作系统内核的实时性进行改进。
目前对Linux 操作系统的实时性能改进主要有两类方法:
1)Linux 内核源代码级修改
对Linux 系统内核中与调度方式、中断处理、时钟与定时等相关数据结构进行修改。 这种方式需要开发人员对内核代码有深入的了解,且改造工作量巨大[5-6]。
1)双内核法
将一个规模较小的实时内核插入到底层硬件与Linux 操作系统内核之间。 实时任务在实时内核中运行,当有非实时任务时,Linux 内核才会工作。 双内核法改造工作量小,能够保证两个内核工作的稳定性,能够提供更为丰富的功能。 目前采用双内核法的实时内核有Xenomai、RTLinux、RTAI 等[7]。
对比两种方法,可以发现双内核法更容易实现,能够提供的功能也更多。 故本文采用双内核法对Linux 的实时性改进,最终选用Xenomai 实时内核。加入实时内核后的Linux 实时内核结构如图2 所示:
本文选用Xenomai 2.4.4 稳定版,Linux 内核选用2.6.24版本。 对Linux 内核的实时性改进步骤如下:
1)增加ADEOS 可适应域环境资源虚拟层。
在获取源代码的基础上, 为Linux 内核加载arm 平台下ADEOS 补丁文件,命令如下:
# $xenomai_root/xenomai -2.4.4/scripts/prepare -kernel.sh╞arch=arm ╞adeos=$xenomai/
_root/ksrc/arch/arm/patches/adeos-ipipe-2.4.4 -arm-* --linux=$linux_tree
2)配置实时内核选项
成功加载ADEOS 补丁后,选择以下Linux 内核选项保证Xenomai 实时内核正常使用:
Xenomai,实时内核的主程序;
Nucleus,开启实时内核对多线程机制、线程抢占调度机制的支持;
Debug support,开启实时内核调试模式,方便系统运行过程中出现错误时调试;
Interfaces 子选项, 选择需要的编程接口, 勾选POSIX API、Native API、Real-Time Driver Model, 确保在编写应用程序时能够使用这些编程接口。
图2 Xenomai/Linux 实时内核结构Fig. 2 Xenomai/Linux real-time kernel structure
嵌入式Linux 移植的关键在于内核的配置与编译, 并将配置好的内核下载到嵌入式控制器中[8]。
1)设置目标处理器
修改内核源码目录顶层Makefile 文件的ARCH 及CROSS_COMPILE 字段,确保编译后的内核可以在ARM 架构的处理器上运行。
2)配置内核
使用图形化配置工具menuconfig 对内核选项进行配置,裁剪不需要的内核功能及驱动程序来尽量缩小内核体积使其适应嵌入式处理器。
3)配置开发板晶振频率
本文应用于嵌入式控制器上的三星S3C2440 处理器晶振频率为12 MHz, 为了使内核与之匹配, 对内核文件arch/arm/mach-s3c2440/mach-smdk2440.c 进行相应配置:
s3c24xx_init_clocks(12000000);
4)修改NAND Flash 分区表
NAND Flash 是程序运行的内存空间,嵌入式控制器配备64MB NAND Flash,通过修改内核文件arch/arm/plat-s3c24xx/common-smdk.c 文件, 可以将NAND Flash 划分为如表1 的3 个分区:
表1 NAND Flash 分区Tab. 1 The NAND Flash partition
5)内核编译及下载
对配置好的内核进行编译, 生成名为uImage 的内核文件,之后通过JTAG 及tftp 软件将uImage 下载至嵌入式控制器中。
常规网络通信采用客户端—服务器方式,服务器运行并等待客户端连接。 客户端有数据传输请求时与服务器建立连接并发送数据。 根据4G 移动网络IP 自动分配的机制特点,并考虑到城轨列车在运行过程中通信信号质量的变化,必须对城轨列车在运行时与地面控制中心的通信策略进行优化。优化后的通信策略如图3 所示。
图3 优化后的通信策略Fig. 3 Communication strategies after optimization
本文优化策略的实现基于Linux 操作系统下的Internet domain socket 网 络 通 信 库,遵 循POSIX 标 准[9]。 采 用 流 式socket 通信模型。
1)网络状态检测
为了确保车载通信系统与地面维护中心通信时已建立连接,在嵌入式控制器调用write()函数将信息发送到4G 网络后,如果函数返回错误值-1,且错误代码为EAGAIN,则表示本次数据传送不成功,删除当前建立的socket,重新调用connect()函数建立与地面控制中心的连接,之后再次发送信息。
2)数据包校验
流式socket 的特点是不存在信息边界。 在传送常规/故障信息时, 必须显式地在信息前加入信息总长度以及校验值信息。 为了尽量减少对嵌入式控制器的资源占用,同时最大情况地保证数据的可靠性,本文采用CRC 校验算法。地面控制中心在接收到信息后,需要对信息再次进行校验计算,并与信息中的校验值相比较,如果不同则向车载通信系统反馈错误。
3)网络故障重传
车载通信系统通过write()函数向地面控制中心发送常规/故障信息后, 如果地面控制中心反馈信息显示发送成功,则立即调用read()函数接收地面控制中心的反馈信息;如果反馈信息显示发送不成功,则重新调用write()函数发送信息。 本文规定重新传送的次数为5 次,如果最终传输仍不成功,表示当前通信信号质量太差,程序返回错误值,并等待一段时间后再次发送信息。
本文采用用运行服务器版Windows 的工控机平台作为地面控制中心, 采用运行Linux 的嵌入式控制器及4G 路由器作为车载通信系统。 通信配置如表2:
表2 实验通信配置Tab. 2 Experimental configuration for communication
通信实验平台如图4,图中框1 代表地面维护中心,框2代表嵌入式控制器,框3 为4G 路由器。
图4 实验平台Fig. 4 Experimental platform
本实验分如下情况进行测试:
1) 网络传输速率测试
车载通信系统分5 次向地面控制中心传送300 MB 的单个 文 件, 测得 传 输 时 间 分 别 为112 s、121 s、131 s、125 s 及122 s。 平均传输速率为2.45 MB/s, 经校验传输前后文件的MD5 值相同。
2)实时Linux 内核性能测试
在车载通信系统上分别采用常规Linux 内核及改进后的实时Linux 内核, 以512 ms 为时间间隔, 周期性的发送100 Byte 数据进行50 次本地回环测试。 测试结果如图5所示。
3)常规/故障信息发送测试
图5 本地回环测试Fig. 5 Local loopback test
车载通信系统采用实时Linux 内核及优化后的通信策略,与采用常规Linux 内核及常规通信策略进行对比测试,以5 min 为最大时间间隔随机向地面控制中心发送4096Byte数据,所传送的数据大小足以表示常规/故障信息。 测试结果如图6 所示。 图6 曲线中的断点代表本次发送失败。
图6 信息发送测试Fig. 6 Information transmission test
本文对Linux 操作系统进行了实时性,优化了城轨列车与地面控制中心的通信策略,并进行实验验证,得出如下结论:
1)采用4G 移动通信网络完全能够满足高速通信的需求。
2)改进后的实时Linux 操作系统在实时性能方面有了很大的提升,能够实时响应采集车辆数据采集设备的信息发送请求。
3)采用改进后的实时Linux 操作系统与优化的通信策略,明显的缩短了信息发送时间,同时有效地保证了通信的可靠性。 完全能够满足城轨列车与地面控制中心实时、高速、可靠的通信需求。
[1] 刘永超. 基于Web的高速列车故障诊断专家系统关键技术研究[D]. 大连:大连交通大学,2012.
[2] 邵位. 列车故障诊断专家系统智能技术研究[D]. 大连:大连交通大学,2014.
[3] 韩守谦, 裴海龙,王清阳. 基于Xenomai的实时嵌入式Linux操作系统的构建[J].计算机工程与设计,2011,32(1):98-102.
[4] BI Chun-yue,LIU Yun-peng,WANG Ren-fang. Research of key technologies for embedded Linux based on ARM[C].International Conference on Computer Application and System Modeling,2011:1231-1240.
[5] 刘胜,王丽芳. 基于多核PC的Linux系统实时性改造[J]. 微电子学与计算机,2013,30(8):120-123.
[6] 严丽萍,宋凯,邓胡滨. 基于嵌入式应用的Linux内核实时性改进研究[J]. 计算机工程与设计,2011,32(1):121-124.
[7] 王涛. 基于交换式以太网的列车通信网络实时性研究[D].北京交通大学,2014.
[8] 李文,张建泽. 基于S3C2440的嵌入式Linux系统移植[J]. 化工自动化及仪表,2010,37(9):88-92.
[9] Michael Kerrisk. The Linux Programming Interface [M].Beijing:Post & Telecom Press,2014.