当前位置:主页 > 体育 > 正文

燃料电池发动机监控系统软件设计

未知 2019-07-19 10:53

1 引言

  车用燃料电池具有效率高、启动快、环保性好、响应速度快等优点,是取代汽车内燃机的理想解决方案。燃料电池汽车的最大优点是清洁、无污染,在全球环境保护问题日益突出的今天,燃料电池汽车作为环保型汽车越来越受到人们的重视。为提高燃料电池发动机系统的可靠性,需要对发动机的各系统状态进行实时监控,记录试验数据,分析其运行特性,为发动机控制策略的不断改进提供依据,同时对整车性能进行评估。因此,燃料电池发动机监控系统的开发具有很重要的现实意义。

2 系统概述

  2.1 系统结构简介

本系统由软件和硬件两部分组成,如图1所示。它以高性能的dsp为核心,开发出控制燃料电池发动机的嵌入式控制器。不仅能完成对燃料电池发动机的控制,并对整车较为严重的电磁干扰做了相应的处理,增强了控制系统的抗干扰性和稳定性;与其配套的上位机监控软件是一个拥有良好人机界面的试验数据监控和记录中心。系统中dsp的任务主要是完成数据的采集与处理,算法的实现与驱动,并通过串口与上位机通信,将采集到的数据传送给上位机,并接收上位机发来的控制命令。而系统的上位机对燃料电池发动机工作状态实现实时监控,完成数据的转换、存储及查询功能。上位机软件是在windows2000/xp操作系统下利用vc++ 6.0开发完成的,由于篇幅所限,本文重点介绍上位机监控软件的设计与实现。

图1 燃料电池发动机控制器结构图

  2.2 监控软件的总体设计

本系统需要监控一系列的参数,记录历史数据及显示实时曲线图,并实时地显示报警事件,提供诊断信息,使监控人员可以及时了解异常情况,查询故障内容。控制器的主要控制对象有氢气供给、空气供给、冷却水循环、电堆功率等,监控软件对其中关键参数进行实时显示、报警显示及数据存储等。根据系统分析确定的目标和功能,采用模块化设计方法,进行了系统的界面结构设计。本系统由多个模块组成,每一个模块完成一项独立的功能,模块与模块之间通过数据相关联。其关系如图2所示。

图2 监控系统结构图



3 主要功能模块设计

  3.1 信息显示模块

  完成对系统主要设备运行状态的实时监控,包括用不同的颜色来表示设备的启、停状态,用编辑框实时显示主要的运行参数,如电压、电流、压力、温度等,并设置报警信号。

  同时,由于控件较多,各部分功能不同,引入属性页使不同用途控件分页表示,达到屏幕美观且操作方便的效果。燃料电池车载监控系统的主控画面如图3所示。

图3 燃料电池车载监控系统主界面

  3.2 串行通信模块

完成数据通信并对所收到的数据进行处理、分析、存盘。把接收到的数据进行范围转换后存放到事先定义好的结构体内,并检查每个参数值是否超限,若超限则置报警标志并报警;该软件正常使用时处于长期连续运行状态,通过串口接收数据的工作一直进行。

  (1)通信协议。在串行通信中,为了实现特定的用户功能,必须在软件中制定通信协议。在开发燃料电池串行数据通信程序的过程中,通过长期的调试和不断的总结,最终得到一套完整而可靠的通信协议。该协议一共分为3层,分别为物理层和数据链接层。

物理层。规定了电子电气方面的特性及原始位流在物理链路上的传输,提供了原始位流传输信道;串行通信口:rs-232串口,硬件接口:dsp输出的ttl电平经专用集成模块转换成rs-232信号,波特率:19200,字符格式:8位数据位,2位停止位。

数据链接层。用帧作为信息传输单元,使用了两种帧:控制帧与数据帧。数据帧包括帧头和负载数据,帧头占6个字节,如表1所示,其中count表示负载数据长度,check1表示第二、三字节的校验和。控制帧只有帧头,长为6字节,如表2所示。为保证可靠的传输,在传输开始前,通过握手建立连接,采用发送/应答/重连/失败方式。

  cmd表示控制信号。

  check2表示第二、三字节的校验和,当cmd=check2=0时,表示传输结束。

  (2) 应用层。实现各监控参数的完整性传输,包括监控数据与校验和。

  每个监控参数用两个字节表示,低位先传。

  校验和占两个字节,对监控数据按位异或校验。

  当通信失败或校验错时,往下位机发出报警信息。



  (3)通信软件设计。vc中进行串口通信通常有三种方法。一是利用microsoft公司提供的activex控件microsoft communications control。这种方法较简单,只需要对串口进行简单配置,但在数据量较大且高速传递时程序易挂起。二是直接采用windows api通信函数,同时利用多线程技术来提高程序的效率。这种方法通信过程稳定,适用于要求较高的通信环境,但使用较复杂。第三种方法是利用第三方提供或自己编写的通信类,只要理解这种类的几个成员函数就能方便的使用,且通信稳定。本程序采用第三种方法,使用了由remon spekreijse提供的多线程串口类cserialport,并在此基础上进行了一些改进,使之能用于本程序。

  由于篇幅所限,本文只列出部分关键代码。

  (1) 初始化程序段

//初始化com1
// m_serialport是cserialport类的对象,//在头文件中定义

if(m_serialport.initport(this,1,19200,`n`,8,2,ev_rxflag|ev_rxchar,1024))
{
m_serialport.startmonitoring();
//启动串口监视线程 m_bserialportopened=true;
// m_bserialportopened为串口打开标志
}

  (2) 串口通讯程序段

  串口需要对下位机进行控制以及准确采集现场上传的实时参数,如温度、电流、电压、水位等,以便分析和改进整车性能,是通信程序设计的重点。其工作流程如图4所示.

图4 上位机收发数据流程图

  由于原类只能发送字符(ascii文本),不能处理二进制发送,而本系统需要发送二进制数据,所以需要对原类进行一些改进,添加一个发送函数:

void cserialport::writetoport(byte *bt, int n)
{
assert(m_hcomm != 0);
memset(m_szwritebuffer,0,sizeof(m_szwritebuffer));
memcpy(m_szwritebuffer, bt, n);
//将待发送数据复制到发送缓冲区
m_nwritesize=n;
setevent(m_hwriteevent); //触发写事件
}
则发送代码为:
m_serialport.writetoport(sendon,4);
// sendon为字节型发送数据
串口接收简单代码举例如下:
long c******::oncomm(wparam ch, lparam port)
{

count++;
buf[count]=ch;
checksum=checksum^ch;
if(count==buf1)//全部字节接受完毕
{
if(checksum)//校验错
{
afxmessagebox(接收校验出错);
::sendmessage(m_hwnd,wm_resend,(wparam)0,(lparam)0);
// wm_resend为重发消息
}
else
{
byte dol=*(char*)(buf+2);
//接受处理数据
byte doh=*(char*)(buf+3);

}
connectdb();//连接数据库



  3.3 数据管理模块

  采集来的数据主要存放在数据库中,方便用户查询各历史数据、显示数据曲线和打印功能。vc语言提供了多种操作数据库的方法,使用odbc(开放数据库连接)访问数据库就是一种很常用的操作方法。另外,通过dbgrid control(网格控件)和microsoft remotedata control的协同工作就能提供一个访问数据库的界面,用来进行数据库数据的浏览,添加,删除,修改等操作。整个过程实现和操作起来非常简单方便。具体连接步骤如下:

  (1) 建立access数据库。

  (2) 在工程中加入datagrid和remotedata control控件。remote-data控件在数据库和datagrid控件中起着桥梁作用,完成同数据库的绑定。然后对两控件属性进行设置。

   (3) 由于odbc数据源需要手动在控制面板中添加注册,不方便程序的移植,于是程序通过代码动态配置数据源。

  部分程序如下:

char* szdesc;
szdesc=new char[256];
sprintf(szdesc,dsn=%s? description=toc support sourc
e?dbq=%s? file=microsoftacces -s? defaultdir=%s?? ,controlh
-istory,lpszfile,spath);
// controlhistory为数据源名称,//lpszfile为数据库名称,spath为数据库所//在路径
if(false==sqlconfigdatasou -rce(null,odbc_add_dsn,microsoft
access driver (*.mdb)\0,(lpcstr)szdesc))
afxmessagebox(sqlconfigda -tasource failed);
(4) 加入数据到数据库
while(m_bisconnected (iii==1)) // m_bisconnected
与iii为连接数据库标志
{
m_set.open();
m_set.addnew();

if(m_set.canupdate())
m_set.update();

}

4 结束语

  现场调试表明,该监控系统能够长时间稳定工作,并且抗干扰能力较强,能方便有效地监控现场的各种实验数据,其数据库管理操作也具有极大的灵活性.

标签