随着我国机车控制水平的不断提高,微机控制已经成为我国机车控制的重要控制方式,而逻辑控制单元LCU(Logic Control Unit)作为主要完成机车运行逻辑控制、电路故障记录控制等功能的控制模块,是关系机车安全运行的重要部件。与传统触点控制电路相比,LCU具有可靠性高、体积小、通用性好、维护简单方便等优点。
传统的LCU检测包括人力检测、单片机检测和PC机通过串口控制开发板检测[1]。但是随着LCU生产制造水平的提高,传统的检测方法已经不能很好地完成测试任务。
ARM具有设计开发周期短、功耗低、性能优越等特点,能够满足LCU检测的要求。基于Linux操作系统开发的通用LCU检测软件,可以提供多层次、多场合的复用,可节省设备成本,具有巨大的市场前景和经济效益。
1 系统设计原理
LCU检测就是对LCU内部运行逻辑做出测试并进行故障诊断。测试系统通过向被测试的LCU发出初始命令,并查看其输出结果是否与参考输出相同,从而判断被测试的LCU逻辑是否正确。
本文沿用传统继电器控制中的部分概念进行软件分析。传统硬件继电器触点分为“常开触点”和“常闭触点”两类。一条线路的运行结果会反映到另外一个线圈上,因此,继电器控制的输出可以用线圈表示。本文沿用硬件继电器中的名称进行软件逻辑分析。在程序中以BOOL变量TRUE表示触点开状态,FALSE表示触点闭状态。
线路上的信号都可以采用二进制表达,所以测试的范围会根据线路上触点个数呈现指数增长。对于要求不太严格的控制信号,只要求在适当的条件下,得到开通或闭合的结果,其动作的条件为充分不必要条件。对于要求严格的控制信号,不仅要求在确定的条件下得到应有的结果,而且要保证这个条件是充分必要条件。因此,很大程度上测试可能会遍历触点的所有组合,测试的总体消耗时间就会扩充到很大的时间范围。假设一条线路的信号流动经过时间值为ns, 则计算一条包含20个触点的线路的全部测试时间为220ns。
可见,测试情况的选择十分重要。测试复杂性的主要矛盾在于:需要证明充分必要条件的线路的多少以及该线路的触点的多少。工业标准反映在程序中的情况就是保留测试的选择性,便于在后续工作中进行选择和修改。此外,控制程序的算法,进行复合运算,提高测试的效率也是关键所在。
2 嵌入式Linux操作系统移植
交叉编译器的设置是嵌入式系统开发的第一步。所谓交叉编译就是在一种体系结构的机器上编译出能够运行于另一种体系机器上的代码。若要开发在ARM目标板上运行的程序,无论是操作系统还是应用程序,都必须是基于ARM体系指令的二进制代码。但是直接在ARM目标板上开发程序,无论是程序运行速度还是调试手段,都严重制约了开发效率,有些程序的编写更需要在PC机上才能完成。交叉编译的作用,就在于在PC机上开发程序,交叉编译后,再放置到ARM目标板上去执行。
搭建ARM交叉编译器的步骤:(1)编译安装binutils;(2)安装linux 的头文件;(3)编译安装gcc的c 编译器;(4)编译安装 glibc;(5)编译安装gcc的c、c++编译器。
Boot-loader是RAM芯片的引导程序,它的作用是加载操作系统。两个著名的开源Boot-loader,其中一个是U-boot,它的形式就是一个代码包,包中按照Linux一般的编程习惯和不同的目标板,将相应的汇编和C语言代码罗列在对应的文件夹下,让开发人员自行配置。
修改U-boot的过程:(1)基本的硬件初始化;(2)跳转到 Stage2 的 C 入口点;(3)定义函数Nand_init;(4)跳转到Kernel。
……