关键词: VB;燃料电池发动机;串行数据通信;PID控制
前言
为了保护地球环境,以燃料电池代替燃油发动机是未来汽车发展的趋势。燃料电池汽车与传统汽车的区别主要在于由燃料电池动力系统替换了传统的内燃机动力系统。显然,其发动机系统的研究成了燃料电池电动汽车研发的关键。因此,在研发过程中,需要对发动机的各系统进行实时监控,记录各种相关试验数据,分析其运行特性,为发动机控制策略的不断改进提供依据,同时对整车性能进行评估。因此,燃料电池发动机车载控制系统的开发具有很重要的现实意义。
VisualBasic6.0提供了丰富的控件,可以方便、快捷地开发燃料电池发动机车载系统的整个软件程序,达到对现场各个参数有效监控的目的。同时,VB中PID控制算法也可以对燃料电池水量、温度、压力等各个监控量进行实时整定。
1 燃料电池车载监控系统的软件设计
Visual Basic(简称VB),是微软公司推出的强有力的系列开发软件之一。不但提供了良好的界面设计能力,而且在微机串口通信方面也有很强的功能,它提供的串行通信控件MSComm32.OCX,全面提供了使用RS-232进行数据通信的所有协议,我们可以使用不同的工作方式来处理和解决燃料电池车载监控系统通信软件设计的所有问题。
1.1 主控界面设计
燃料电池主控界面的设计是整个上位机软件设计的重点之一,它直接影响发动机系统监控效率的高低。因此,清晰、人性化的界面设计是整个软件开发的重要前提。
以VB6.0为软件平台开发的燃料电池车载监控系统的主控画面如图1所示。 通过该主界面可以完成对系统主要设备运行状态的实时监控,包括用不同的颜色来表示设备的启、停,用文本框显示系统主要的运行参数,如电压、电流、压力等,利用CommandButton控件的Click事件完成布尔变量的发送,从而实现对开关和阀门的开启、关闭控制。同时,添加各种控件,导入图片,并通过设置其不同属性,达到了美观、实用的效果。
图1 燃料电池车载监控系统主画面
1.2 通信程序设计
燃料电池发动机车载监控系统的通信包括上位机和下位机的通信。主要是PC机和下位机硬件之间通过串口线完成数据的传输,以期对工业现场采集的信息进行适时准确地监控。
1.2.1 通信协议
在串行通信的实现过程中,底层为通信工作以及操作系统和计算机硬件提供了有力的支持,但是为了实现特定的用户功能,必须在软件中制定基于应用的通信协议。在开发燃料电池串行数据通信程序的过程中,通过长期的调试和不断的总结,最终得到一套完整而可靠的通信协议.该协议一共分为3层,分别为:
1.物理层。规定了电子电气方面的特性及原始位流在物理链路上的传输,提供了原始位流传输信道;
串行通信口:RS-232串口
硬件接口:DSP输出的TTL电平经专用集成块转换成RS-232信号
波特率:9600
字符格式:8位数据位,1位停止位
差错校验:无奇偶校验
2.数据链接层。定义了数据帧作为信息传输单元,使用差错校验和帧应答等技术,屏蔽物理路上的噪声,使传输通道变成一条可靠的信道;数据链接层为数据的准确通信提供了充足的信息。表1描述了设备数据包传输的结构。
表1 数据包传输结构
LENGTH——数据包字节总数;
TYPE——命令类型。分为系统型(0X00)、具体型(0X11,0X13,0X15,0X16,0X17,0X18,0X1A,0X1B)和多协议型(0X14);
CMD——命令的ID号。决定命令类型为命令信息还是应答信息;
DATA——由CMD决定数据字节长度;
CHKSUM——校验和码。循环冗余校验是一种常用的校验码。
3.应用层。负责建立通信伙伴之间的连接关系,实现操作同步,报警及数据完整性等管理任务。对用户及用户程序提供以下功能:
(1)选择控制多台下位机定时,即时或适时跟踪采样现场信息,将数据送数据库保存,数据库存储一定时段的数据,程序具有对数据二次处理,绘制曲线图及报警等功能;
(2)设置采样参数;
(3)当通信线路中断或通信失败时,往下位机发出报警信息;
1.2.2 上位机工作流程
燃料电池发动机车载监控系统的上位机软件分为手动程序和自动程序,自动程序是通信程序设计的最终版,一旦进入开机工作状态,就能够自动完成对下位机的监控功能,包括发送和接收信息。(‘*******为注释部分)
(1) 发送信息程序段。其工作流程如下图2。简单代码举例如下:
Private Sub Cmdstop_Click() ‘***********发送开机命令***********
byteout(0) = &HAA
byteout(1) = &H55
MSComm1.Output = byteout
End Sub
(2)接收信息程序段。接收部分需要准确采集现场上传的适时参数,如温度、电流、电压、水位等,以便分析和改进整车性能,是通信程序设计的重点,通过VB中MSComm控件的OnComm事件来完成。其工作流程如下图3,简单代码举例如下:
Private Sub MSComm1_OnComm() ‘***数据接收
Dim buf() As Variant
Dim buf1(1 To 2) As Byte
buf = MSComm1.Input ‘***通过MSComm的Iutput属性接收数据
buf1(1) = buf(0)
buf1(2) = buf(1)
Text1.Text = buf1(2) * 256 + buf1(1)
End Sub
图2 上位机发送信息流程图
图3 上位机接收信息流程图
2 控制程序设计
PID控制是比例,积分,微分控制的缩写。它具有原理简单、使用方便、适用性广和鲁棒性强等特点,在工业控制领域具有强大的生命力。改变P可提高响应速度,减小静态误差,但太大会增大超调量和稳定时间;I与P的作用基本相似,但要使静态误差为0,必须使用积分;D与P,I的作用相反,主要是为了减小超调,减小稳定时间。在仿真和实验中,如果被控对象的结构和参数不能完全把握,或者得不到精确的数学模型,而且其它常规的控制方法难以实现,这时,系统控制器的结构和参数必须依靠经验和现场调试来确定,采用PID控制技术最为方便。
现阶段,我们对燃料电池电堆的模型不是十分了解,还不能通过有效的测试手段来获得系统的参数,因此,采用增量PID控制算法比较适合。在VB中,增量PID控制算法是通过自定义Function函数及调用该函数来实现的。
自定义Function函数:
Public Function PID(ByVal P As Single, I As Single, D As Single, PIDset As Single, PIDreturn As Single, DeltaPIDpre_1 As Single, DeltaPIDpre_2 As Single) As Single ‘********增量PID计算自定义函数**********
‘**P——PID比例系数;I——PID积分系数;D——PID微分系数
‘**PIDset——PID设定值
‘**PIDreturn——PID反馈值
‘**DeltaPIDpre_1——PID偏差前值
‘**DeltaPIDpre_2——PID偏差前前值
Dim PIDout As Single ‘**PID输出值**
Dim DeltaPID As Single ‘**PID偏差值,为中间变量**
DeltaPID = PIDset - PIDreturn
PIDout = P * (DeltaPID - DeltaPIDpre_1) + I * DeltaPID + D * (DeltaPID - 2 * DeltaPIDpre_1 + DeltaPIDpre_2)
DeltaPIDpre_2 = DeltaPIDpre_1
DeltaPIDpre_1 = DeltaPID
End Function
要对输入的控制量进行PID调节,只需简单的调用上述函数即可。
例如,在对电堆的输入温度进行控制时,调用上述函数过程如下:
Private Sub MSComm1_OnComm() ‘*******数据接收***********
Dim Mid As Single
Mid = Format(Round((buf1(5) * 256 + buf1(4) - 4095 / 5) * 125 / 4095, 2), "0.0") ‘*****输入电堆温度*****
Text1.Text = Mid + PID(outTP, outTI, outTD, outTPIDset, outTPIDreturn, outTDeltaPIDpre_1, outTDeltaPIDpre_2)
‘**********outTP——温度P, outTI——温度I, outTD——温度D, outTPIDset——温度设定, outTPIDreturn——温度, outTDeltaPIDpre_1——温度前值, outTDeltaPIDpre_2——温度后值
End Sub
3 数据存储程序设计
VB语言提供了多种操纵数据库的方法,使用Ado Data控件访问数据库就是一种很常用的操纵方法。通过设置和操纵其属性就可以实现与数据库的连接,通过绑定数据感知控件就能提供一个访问数据库的界面,用来对数据库数据的浏览,添加,删除,修改等操作。整个过程实现和操作起来非常简单方便。具体连接步骤如下:
(1)建立Access数据库
(2)引用Ado Data控件和数据感知控件DataGrid
(3)分别设置Ado Data控件的ConnectionString、CommandType、RecordSource三个重要的属性以及DataGrid控件的DataSource属性
在设置Ado Data控件的ConnectionString属性的最后,将出现“测试连接”的按扭,通过单击此按扭可以清楚的了解到数据库连接成功与否,非常简单方便。具体程序的编写格式为:
数据库画面名称.Adodc1.Recordset.AddNew
数据库画面名称.Adodc1.Recordset.Fields("日期") = Date
数据库画面名称.Adodc1.Recordset.Fields("时间") = Format(Now, "h:mm:ss")
数据库画面名称.Adodc1.Recordset.Fields("参数名称") =接收到的参量数据
数据库画面名称.Adodc1.Recordset.Update
数据库的设计需要特别注意的是:
1.在Access数据库定义的各个参数的名称、类型、出现的顺序以及格式都必须与代码中的“参数名称“完全一致。
2.设置Ado Data控件的ConnectionString属性的时候,必须选择正确的数据库所在路径。
4 结束语
现场调试表明,该车载监控系统能够长时间稳定工作,并且抗干扰能力较强,能方便有效地监控现场的各种实验数据。其数据库管理操作也具有极大的灵活性和控制力。
本文作者创新点:
1. VB中PID控制算法的实现,以调整电堆温度、压力、水位等各种监控参数;
2. 基于VB的串口通信技术在燃料电池车载监控系统中的应用。
参考文献
【1】 冀常鹏,包剑 基于CANBUS的汽车发动机控制器研究 技术 2005
【2】 王文东,陈实,吴锋 温度、压力和湿度对质子交换膜燃料电池性能的影响 能源研究与信息 Vol.19 No.1 2003
【3】 张永宏,胡德金 基于Visual Basic的串行通信技术在自动化监控系统中的应用 组合机床与自动化加工技术 2003年第10期
【4】 夏临闽,胡仁杰 串行通信中数据正确性的保证 电子工程师2000年第11期
【5】 宋娟,罗志平,全书海 基于PID算法的燃料电池实验室组态王监控系统 微计算机信息 2006年第22卷第1—1期第28页