当前位置: 永盛彩票网站  >> 理科专业  >> 查看详情

交通运输工程-----轨道监测系统设计(2)

来源: 长沙中视澜庭教育咨询有限公司  日期:2018-01-11 15:20:45  点击:187 
轨道环境监测系统设计

 
 一  轨道监测理论概述
1.1嵌入式系统概述
嵌入式系统(Embedded System)是嵌入式的计算机系统的简称,它是为实现特定的应用功能而开发的一种嵌入在设备内部的专用计算机系统,其具有以下的共同点:一是专用性;二是隐蔽性;三是高可靠性;四是实时性;五是硬件优化;六是软件固化。
     嵌入式系统广泛应用于各个领域,只要涉及到控制、显示、监测的电子系统多数应用了嵌入式技术。设计带有显示性能、存储性能和分析性能的轨道状态监测嵌入式系统,顺应了当今信息时代的信息化、云存储和云计算的前沿和趋势。
1.2  MMA7455介绍
  (1)工作原理
  MMA7455加速度传感器由两部分组成:G-单元和信号调理ASIC电路。 G-单元是密封的机械结构,其实现了电容感应转换为电压输出。
 
其测量等效于在两个固定的电容极板A, B之间有一个可移动的极板,当系统受到加速力时,C极板会偏离初始位置,与A板和B板的相对距离发生改变,但C板与A板和B板的距离变化值△d是保持不变的,中间极C板的偏离会导致A板和B板上的电容值变化。信号调理ASIC电路则是将G-单元等效的2个电容值经过电路模数运算计算出加速度值,并使加速度与输出电压成线性关系。开发者可以通过I2C或SPI通信直接读取MMA7455内部寄存器包含加速度方向的数字量。
   
 1.3 CC2530微控技术
    采用新一代低功耗zibgee片上系统CC2530作为网络传感器节氛的核心,该芯片遵循IEEE802.15.4标准,同时RF收发器为2.4GHz,可编程的输出功率高达4.SdBm,超低功耗,有5种运行模式。芯片内核采用优化的8位8051微控制器内核,有强大的5通道DMA功能。该芯片系统资源和外围接口丰富,内部集成安全协处理器、看门狗定时器及电池监视和温度传感器,支持多种工作模式,硬件支持CSMA/CA,21个I/O口、3个定时器和多种通信接口。
本文针对车辆测控就是利用CC2530微控技术并基于zigbee技术系统,将轨道车辆的温度、采光及安全系数收集以数传、存储并传输至系统计算机。目前基于zigbee的网络测控系统发展迅猛,具有良好的研究应用前景。

二、嵌入式系统软件设计
嵌入式系统按照软件量的大小可以分类为低端式和高端式。低端式与高端式最大的区别为是否具有操作系统,本文的设计需要应用到LinuxOS,属于高端嵌入式系统 
2.1无线数据采集与存储系统的硬件平台设计
传感器节点以低功耗的CC2530作为zibgee解决方案的核心,同时精心设计了复位、电源、时钟电路模块以及2.4GHz天线硬件接口的PCB布局,为了方便人机交互和实时显示还设计了键盘接口和液晶接口电路。另外对于基站节点,还另外设计了USB数据海量存储模块。考虑到CC2530已经承担着zigbee协议、数据采收等任务,可用资源已比较有限,因此本设计采用STC89C52+CH375为一个模块完成对数据的存储工作。CC2530周期性的通过串口将数据打包发送给STC89C52,STC89C52引发中断程序将数据保存在定义好的缓冲区buffer中,当buffer填满后,再由CH375周期性写入到U盘。因此基站节点有两颗8051核的单片机为其工作。

2.1.1数据采集与存储系统的软件平台设计
 Zibgee是当前流行的无线传感器网络的通信协议,其遵循IEEE802.15.4和Zigbee联盟标准,因此选用该协议对于软件平台的标准化意义重大。该平台以Chipcon的Z-stackZigbee协议栈为核心为核心实现。
该轨道车辆软件体系结构如图2.2所示,其中最底层为物理层,主要是采用扩频通信的调制方式,控制RF收发器工作;第二层为媒体访问控层,该层遵循IEEE802.15.4协议,负责设备问的无线数据链路建立、维护和结束;第三层为网络层,该层负责建立新的网络、处理节点的进入和离开网络、根据网络类型设置节点的协议堆栈、使网络协调器对节点分配地址、保证节点之问的同步、提供网络的路由;第四层为应用层,由应用子层、设备对象等构成,用户的程序开发主要在该层进行,有大量的API接口函数可以调用。
 2.1.2CH375 USB数据存储模块软件设计
 存储模块软件部分设计的工作主要有:CH375芯片驱动程序和文件系统两部分。由于CH375芯片已内置USB Mass-Storage专用通讯协议固件,故在主机端无需编写Mass-Storage的协议,只需要对USB存储设备类命令进行详细宏定义,以供系统调用即可.
 在驱动编写过程中,CH375芯片驱动程序最基本的四个函数是CH375WaitIntQ,CH375ReadDatQ,CH375WriteCmd()和CH375WriteDatQ。该四个函数是扇区读写操作、文件系统数据追加最终要调用的底层函数。完成底层基本函数后,对U盘的操作主要是通过disk初始化函数、读写扇区三个函数实现,即CH375 InitDiskQ,CH375Read_SectorQ,CH375es WriteSectorQ.
中断程序在驱动程序中的核心,中断程序通常直接操作芯片底层硬件,如初始化USB存储设备、USB设备读写数据块等,产生中断信号通知MCU,并给出中断状态字,由主机MCU作出判断。CH375中断函数已经由Mass-Storage固件完成,CH375_  Wait_ Int()主要是使用查询方式,等待中断标志,获取中断状态。
  在完成了CH375ReadSector()和CH375 wirte Sector()等驱动程序的编写之后,本文在在参考fatfs等目前常用的嵌入式文件系统基础上,主要实现了fat32文件系统的初始化、文件创建、数据追加功能,实现了轨道车辆温度、采光及安全系数数据的存储.
2.1.3实验与验证
   基站将其他节点发送来的温度数据,进行简单处理后,通过串口批量送入数据模块存储到U盘中。首先主机会检测U盘是否已插入到卡槽,待检测到U盘后,就开始初始化U盘和文件系统,检测磁盘分区和扇区容量(将程序运行的状态发送到串口上),随后在根目录创建txt格式的文件,并返回输出“文件已存在”。
  存储器模块周期的从基站串口读取打包好的温度值,保存在定义好的缓冲区buffer中,当缓冲区填满后,再周期性调用FAT32Add_ Dat()保存到U盘。
 
   2.2Linux操作
 嵌入式Linux内核(kernel)是整个Linux操作系统的核心,直接管理硬件,并通过系统调用为上层应用提供服务。内核的主要作用有:进程管理与调度、进程通信、内存管理、虚拟文件管理、网络接口。
 本系统的Linux内核移植具体步骤如下:
 ①登陆Linux内核下载官网:www.kernel.org,下载Linux内核,为了适应OK210开发板,不下载最新的版本,选择下载版本号为Linux2.6.35.7的内核,最终的源代码压缩包为Linux2.6.35.7.tar.gz;
 ②解压内核源代码压缩包到arm目录下:
    #tar zxvf Linux2.6.35.7.tar.gz
 ③进入Linux内核目录:
   #cd android-kernel-samsung-dev/
 ④配置内核文件,可以将配置文件拷贝至配置菜单,也可以手动配置:
a.拷贝配置文件
   #make distclean
   #cp ok210p_android_ config .config
b.手动配置
#make menuconfig
弹出以下可视化配置界面,如图4.4所示。
⑤完成内核配置后,编译内核:
   #make zImage
    此编译过程可能历时比较长,最后显示:Kernel: arch/arm/boot/zImage is ready,表
示本次内核编译成功。
 ⑥在内核源码目录的arch/arm/boot中得到内核映像zImage,由于OK210开发板装
机的默认设定,将该文件重命名为zImage-210,作为本次编译的内核文件。
    
   2.3 MMA7455驱动程序
   
MMA7455运行于Linux系统的设备驱动主要有三个文件:SSPV210_ MMA7455.c,SSPV210MMA745S.h和M akefile,源文件(.c格式)实现了时序操作的功能函数,系统通过头文件(.h格式)调用驱动函数接口,而Makefile是负责执行编译命令的shell脚本,MMA7455设备驱动的关键伪代码详见附录1.
  (3)加速度传感器的X、Y、Z三轴的数据均在内置芯片的三个不同的寄存器中,所以需要定义加速度计的三轴输出寄存器地址;
       #define  accXreg  0x06
       #define  accYreg  0x07
       #define  accZreg   0x08
   (4) MMA7455传感器提供了8位模式可选的灵敏度和量程,定义加速度计的感应精度,分别对应士2g,士4g,士8g量程范围,由于均满足轨道振动测量的量程要求,所以选取士2g的量程,确保足够高的灵敏度和解析度;
      #defineACC 2G RANGE   0x05
       #defineACC 4G RANGE  0x09
       #define ACC 8G RANGE  0x01
  (5)定义并初始化X, Y, Z三轴的数字信号变量;
       char Xdata=O,Ydata=O,Zdata=0;
  (6)主机通过SPI时序读写MMA7455的程序主要包含初始化、模块挂载、SPI读字节、SPI写字节等函数;
     挂载模块初始化函数和退出函数:
     static int - init spi_init(void)
     static void - exit spi_exit(void)
     指定模块初始化函数和退出函数的应用:
     module_ init(spi_init);
     module_ exit(spi_exit);
     挂载成功,打开SPI接口函数:
     static int spi_open(struct mode *inode,struct file *filp)
     输入SPI设备的句柄,初始化SPI:
     void acc_ init(int fd);
     void showAcc(void);
    打开SPI设备的IO通道管理的函数:
     static int spi_ioctl(struct mode *inode, struct file *file, uint RdrWr, char*spiBuf写一个字节到SPI的函数:
   static void writeByte(const char c)
   从SPI读一个字节的函数:
   static char readByte(void)
   SPI主机向MMA745去5加速度计写入指令函数:
void spiWrite2acc(int fd,unsigned char reg,char data);
SPI主机读取MMA74_5_5加速度计值函数:
void spiReadacc(int fd,unsigned char reg,char *rdbuf);
  (5)从寄存器读取X, Y, Z轴的数据的函数定义如下:
void readAcc(int fd)
{
  spiReadacc (fd, accXreg, &Xdata);
  spiReadacc (fd, accYreg, &Ydata);
  spiReadacc (fd, accZreg, &Zdata);
}
输入参数:SPI设备的句柄号fd
函数功能:实现Xdata,Ydata,Zdata数据的读取
应用层通过定时l0ms调用驱动层的API,来读取三轴加速度的数据,实现固定的频率采集加速度信号。主要是通过应用层的xyz_ dataRead.cpp和Frequency_Control.cpp源代码来实现
 
2.4诊断算法设计
   由于本系统要实现状态的在线监测,所以研究的对象可以细化为在4t时间段内机车上Y轴、z轴的时域加速度信号,因此,分别Y轴和Z轴的均方根值()、方差()、峭度指标( )、脉冲指标()、峰值指标()、裕度指标()作为BP神经网络的输入量,所以,本系统构建的BP神经网络输入层有12个节点,所以神经网络的输入是12维向量,见式(2.1)所示。
                (2.1)
  机车的左一(L1)、左二(L2)、右-(R1)、右二(R2)位置均有加速度传感器测点,一个测点对应一个神经网络,需要构建4个神经网络,每个神经网络的输入向量分别为,、、 。本系统构建的BP神经网络有7个输出节点,分别对应本系统识别的7个故障类型,所以该神经网络的输出是7维的向量。
 
隐含层的节点个数的选择对神经网络的性能会造成影响,确定隐含层节点数目利用经验公式:
                                               (2.3)
   其中,h是隐含层节点数目,m是输入层节点数目,n是输出层节点数目,a是1-10之间的调节常数,其隐含层范围是:,最终神经网络隐含层折中选择使用9个节点。
    如图2.4所示,本系统最终选用的神经网络分为三层,其中输入层有12个节点,隐含层有9个节点,输出层有7个节点。

2.5改进的BP-ANN程序设计
鉴于神经网络是基于Linux开发环境,因此对改进的BP神经网络进行C++编程,改进的BP神经网络的C++实现的伪代码详见附录2,关键部分的程序设计如下:
   (1)定义BP神经网络的基本参数:层数LAYER,最大训练次数ITERS,单个样本允许的误差S_ERROR,每次迭代允许的误差ACCU,每次迭代允许的评估误差P_ERROR等。
  (2)定义结构体类型的样本向量,包括输入向量和输出向量:
     struct Data
    {
    Vector x;//输入向量
    Vector y;//输出向量
    
   (3)定义BP-ANN的类,包括公有(public)和私有(private)两种类型的成员;
    ① private成员变量有输入层、隐含层、输出层节点数量,输入与输出数居结构体,网络权值三维数组,BP网络节点的阀值数组,每个神经元节点经S型函数转化后的输出值数组,学习规则中变化的学习率delta数组等。
    ② public成员函数有:
    结构体类型的数据获取的函数:
    void GetData(const Vector)
    进行神经网络训练的函数:void Train()
    进行神经网络预测的函数:Vector Forecast (const Vector)
    ③private成员函数有:
    BP-ANN标准算法API函数:
        网络初始化函数:void InitNetWork()
        正向传播子过程函数:
        逆向传播子过程函数:
       void ForwardTransfer()
       void ReverseTransfer(int)
       计算w和b的调整函数:void CalcDelta(int)
       更新权值和阀值函数:void UpdateNetWork()
       计算单个样本的误差函数:Type GetError(int)
        计算所有样本的精度函数:Type GetAccu()
  BP-ANN改进后增加的API函数:
      通过迭代调整学习率计算函数:void CalcLearningRate(int)
      计算所有样本的故障评估率函数:GetPErrorQ
     计算改进Sigmoid的函数:Type Sigmoid(const Type, int, int, int, int)
      (4)定义输入训练的数据组数NUM,假设对于7种状态,每种状态有100组样本,则数据组数NUM=700;定义每组数据的维数VIM,输入向量是12维数组,分别对应Y向、Z向的加速度的12个特征值;定义输入数据的NUM X VIM的样本矩阵。
       #define  NUM  700
       #define  VIM   12
      double sample[NUM,VIM]=...//此处通过文件程序进行读取数据。
  2.6应用程序设计
   (1)新建Qt项目
  启动Qt软件。
   点击Creat Project,弹出新建项目的窗口,点击选择Qt Widget Project,再选择Qt GUIApplication,点击Choose。弹出GUI Application的窗口,在Location版面填写创建的文件OBTFD,以及选择文件所在路径,点击Next;切换到Targets版面,勾选Desktop和Use Shadow Building,点击Next;切换到Details版面,可重新命名各个文件的名字,也可选择不改动,保留默认,勾选Generate form,点击Next;切换到Summary版面,确认一下即将所生成的文件,最后点击Finish,生成软件设计的基本文件。
   (2)Qt控件编程
   Qt程序的框架结构,是通过继承Qt类来实现的,根据用户需求编写自定义类,实现特定功能。如图2.7所示为Qwidget类继承关系,包括加速度传感器外设数据获取的类QAccelerationDevice,改进的BP神经网络故障识别的类QAlgorithm和QBpNetWork。
    (3)软件集成
    整体软件设计完善之后,点击“编译”一“连接”一“执行”,弹出在Ubuntu系统下的初级窗口软件;更改编译器为Qt4.7.1(qt4.7.1)Release,再次执行编译、连接、执行,生成在OK210开发板中运行的Qt程序。将Qt程序加载至开发板有两种方法:①通过NFS挂载的方式,将Qt程序添加至移动设备的应用程序目录下面,并进行注册;②将Qt程序先放到Linux系统文件的应用程序目录下面,然后再编译生成新的文件系统,再安装至OK210开发板中。
 
 三、系统集成与测试
 3.1系统测试和算法检验
  3.1.1在线振动测试的模拟
   经过反复测试、调试和修改,最终确定了系统的网络模型和诊断算法,并随之建立Linux系统下的轨道状态监测软件,并集成了软件和硬件。最终完成的设计能够采集动态加速度数据,并将振动信号波形、加速度值以及特征值显示在LCD液晶电子显示屏上。将该系统的传感器探头,置于某振动机械设备中进行了初步的振动测试。图3.3为振动信号在线采集的波形显示实物图,图3.4为综合数据的动态显示实物图(右侧的信息日志功能待完善),图中表明该系统下位机传感器和上位机图形界面、软件应用均能够正常工作,并与DASP振动采集器所采集到的曲线和数据进行简要对照。结果表明,该系统的信号采集和交互控制的设计初步成功。
    3.1.2诊断算法的检验
    由于采集条件不够完善,借鉴了某铁道研究所在某型号的列车上测试的加速度数据进行算法的检验与测试。该数据包含了两种工况下Y轴和z轴方向的数据,两种工况即平顺和不平顺,该数据可用于检验自行改进的神经网络的训练效果和测试效果。
图3.5为列车平顺状态的一部分时域加速度信号曲线,图3.6为列车不平顺状态的一部分时域加速度信号曲线。表3.2为列车平顺状态下的一部分加速度信号的特征向量,表3.3为列车不平顺状态下的一部分加速度信号的特征向量。

由于可借鉴的数据只有平顺和不平顺两类工况,因此利用改进的BP神经网络无法检验对于六种不平顺是否具有准确的分类能力,但可以对于两种数据进行二分类的识别即有故障F。和无故障F。表3.4列出了改进的BP神经网络算法对于平顺和不平顺两种路况的测试结果,设计改进后的神经网络输出节点为2,分别选用80组样本用于网络训练和网络测试,两种状态类型训练的通过率都比较高,而测试的通过率也基本符合。
 
将以上160组测试数据随机分成为4个测点的数据,用来模拟机车四测点的情况,每个测点都有40组数据,每次测试随机从每个测点取出一个样本,即每次测试都有4个样本,恰好模拟了机车上L1、L2、R1、R2四个测点上的振动数据,所以总共要完成40次测试。故障评估的程序是TestEvaluate.c文件,对故障评估的算法在Linux系统下进行检验,在终端运行命令行如下所示:
   root@ubuntu:-/ForLinuxBP/TestBP# gcc TestEvaluate.c -o TestEvaluate
root@ubuntu:-/ForLinuxBP/TestBP# ./TestEvaluate
模拟机车四测点的情形,测试40次,如图3.7所示截图表明故障评估测试完成。
 
图3.7故障评估测试运行截图
由图可知,进行了1-40的样本测试;“Evaluation”后面的百分数为故障评估值,大于50%表示不平顺,小于50%表示平顺;“Real:”后面的字母表示实际状况,FO表示平顺,Fu表示不平顺;最后一项“True”和“False”表示故障评估是否正确;并且最后一行输出全体样本的准确率。因此,40组测试样本由故障评估算法最终100%通过,说明本系统的故障评估算法设计基本成功。
附录:
附录1:MMA7455驱动源代码
(1.1)S5PV210 MMA7455.c
 (1.2)S5PV210 MMA7455.h
(1.3)Makefile
 

相关新闻

    暂无信息