基于VC++的机车数据监控系统
扫描二维码
随时随地手机看文章
摘 要:机车数据监控系统运用VC++实现了对一内燃机车运行数据的实时监控。通过计算机的串口传输内燃机车数据仪中采集到的各种数据,如机车型号、机车类型、累计运行时间等等,监控机车的运行状态以实现对机车的控制。设计的重点在于系统管理的软件方面,具体来说是系统上位机的设计。以MFC (Microsoft Foundation Class Library)思路用类来实现串行通信和多线程编程, 并辅助以开放式数据接口(ODBC)在应用程序中实现数据库功能。
1 引言
随着铁路信息化数字化的发展,提出了机车的在线实时监控,要求对车载设备的相关数据进行实时采集和存储。这对为技术人员提供及时准确的机车信息,保证列车运行的安全有着重要的意义。
本文介绍一种基于VC++的机车实时监控系统,是由后台控制监控系统和前台采集系统所组成的一个分布式集成网络。当控制监控系统与内燃机车进行通讯,则后台控制监控系统显示计算机显示的就是机车数据记录仪采集到的各种机车数据。
2 功能分析
2.1 上位机的软件功能主要有以下几点:
1)与下位机(机车数据仪)进行通信,完成对下位机的读写;
2)能够对数据进行有效的识别,提取数据中的有用信息(如机车型号,机车编号,机车标称功率等);
3)对有效数据进行处理,能够以曲线或图表形式显示车辆运行状况;
4)为数据的查找与定位提供方便的手段,便于局部数据分析;
5)具有存档、打印功能。
2.2 上位机主控程序功能划分:
3 软件实现
3.1 通讯协议
所谓通讯协议就是通讯双方为了达到正确传送和接收数据而达成的一组通讯规定。它包括发送/接收数据的格式、数据编写与解读方法以及通讯参数的设定。在通讯协议中,通讯参数的设定是通讯的前提,包括串口的选取,波特率设定,有无奇偶校验,数据位的位数,以及停止位的位数。下面介绍一下数据的格式和数据传送。
数据格式: 定位数据从0开始。第0-第3字节=0x57, 0x77, 0x44, 0x4C为当量里程记录仪转储数据文件类型标识头;累计数据共176字节,占数据文件中的第24字节到第199字节;瞬时数据从第256字节开始,一直到结束,数据长度=瞬时数据的数据帧数×数据帧长;瞬时数据帧长包含帧校验码。文件尾占3字节=0x45, 0x4e, 0x44。
数据传送:累积数据每176个字节数据为一个数据块;瞬时数据的数据长度=瞬时数据的数据帧数×数据帧长;瞬时数据帧长包含帧校验码。
下位机每发送一个数据块,随即就发该数据块的校验和,如果检验和有误,就重发该数据块;如果数据未读完,重复本操作,直到数据读完。 命令中的校验占一个字节,[校验]=([命令]+[目标代码]+[数据].字节1+…+[数据].字节n)mod 0x100。执行结果返回值中的校验也占一个字节,[校验]=([执行结果代码]+[数据].字节1+…+[数据].字节n)mod 0x100。
3.2 通讯流程
监控系统与下位机(机车数据记录仪)的通讯只需用到以下几条命令:查询下位机硬件工作状态、查询下位机数据纪录状态、读累计数据、读瞬时数据、写数据。在上位机发出命令之前,下位机处于等待状态;当命令发出之后,下位机探测所发出的命令并判断该命令是否对自己操作。如果是,则按命令要求返回所要求的数据;如果不是,则不回应;下位机收到采集系统送过来的数据以后,对它进行分析和数据转换,然后进行显示和保存。
将上位机的各种命令独立地建立一个类MasterCommand,就用来处理上位机向下位机发送的命令。以下是对这个类的定义。
//命令码,命令码长度,命令显示字串,获取的数据长度/最大长度,数据放置起始位置,数据标识定义位置
MasterCommand(char *comCode, const int &comCodeLen, CString comDispStr, const int &getDataLen, const int &dataPos, const int &dataSignPos)
{
init(comCode, comCodeLen, comDispStr, getDataLen, dataPos, dataSignPos);
}
3.2.1 查询
A. 查询下位机硬件工作状态
用户通过串口发送命令,如果命令正确执行,则返回硬件的工作状态,根据数据交换
命令集可以判断硬件工作得是否正常。程序将将硬件工作状态显示在用户界面上,让用户可以很方便地了解硬件的工作状态,如果发现硬件有工作不正常的状态,就可以对硬件进行相应的处理。
B. 查询下位机数据纪录状态
用户通过串口发送命令,如果命令正确执行,则返回下位机数
据记录状态,根据数据交换命令集可以判断数据记录是否正常。如果数据记录不正常,用户也可以在界面上看到是哪方面出了问题,可以进行相应的处理。
3.2.2 读数据
A. 读累计数据
用户在上位机发送读累计数据的命令,下位机收到命令后向上位机返回执行结果。执行结果返回值:[执行结果代码] [数据] [校验]。
其中: [执行结果代码] 和 [校验] 均占一个字节。当命令校验失败或执行失败时,下位机只返回 [执行结果代码] 和 [校验] 码。累计数据一共占176个字节,在当量仪数据存储格式中对每一个字节都有详细的定义。在程序中按照格式将数据取出来,并在用户界面显示出来。在所有数据正确接收后用户可以选择保存数据,以供以后进一步地查看,对数据进行分析。
B. 读瞬时数据
瞬时数据从第256字节开始,数据长度=瞬时数据的数据帧数×数据帧长;瞬时数据帧长包含帧校验码。
3.2.3 写数据
主机下送数据到从机,写当量记录仪中的所有累计数据。执行正确时返回上位机要求写入的数据(二进制表示)。便于上位机校验。
4. 界面设计
控制系统的界面共有四个,它们是主界面、累计数据显示界面、选择写入下位机数据界面。
⑴ 主界面
主界面是系统运行的主要界面,它的作用向下位机是发送各种命令和对串口通讯的参数进行设置,通过各种命令才会实现系统采集实时数据和进行监控的功能。也只有在发送各种命令时才会调用和显示其他功能界面(如累计数据显示界面等),也就是说主界面是其他功能界面的联系纽带。
在主界面的设计中采用了组合框、树形视图、列表框等控件,在界面下方的列表框中可以显示运行的程序、出错报告及系统的状态等。
(2)累计数据显示界面
此界面的作用是当上位机完成了采集下位机的累计数据时,可以由用户选择是否显示采集的累计数据。用户检查了机车的累计数据后,可以在界面对累计数据进行更改,然后就将数据进行保存,以便将来对数据进行管理。
(3) 选择写入下位机数据界面
上位机采集到的数据都可以保存,若下位机此时的数据有必要进行更改,可以从以前采集到的数据中选择一份写入下位机,也就实现了系统的控制功能。
5. 小结
本系统在实际应用中运行良好,数据的完整性、实时性和程序的可靠性高。它操作简便,具有很强的易用性。
来源:过往烟云0次