电池组信息采集分析系统上位机软件设计
2012-06-29郭令
郭 令
(凯迈(洛阳)电子有限公司,河南 洛阳 471000)
随着锂离子电池组的发展,电动汽车、大型能源存储系统逐步进入了应用领域。为了使锂离子电池组在应用过程中更加安全可靠,对锂离子电池组的在线监测必不可少[1]。
本文基于C#语言设计了一种电池组信息采集分析系统,主要用于锂离子动力电池组的运行监测和历史数据管理。C#语言是.Net技术的核心开发语言,采用面向对象的程序设计技术,提供了开发Windows应用程序的最简捷、最有效地方法,使用户从繁琐且复杂的工作中解脱出来,用户不必掌握太多的编程知识就能够创建出高难度的图形化应用程序[2]。
1 系统概述
采集分析系统上位机软件通过CAN总线和电压/温度采集器实现信息交互,由于上位机没有CAN接口,因此在上位机软件和电压/温度采集器中间增加了一个通讯转换适配器USB-CAN。系统结构如图1所示。
图1 系统结构图
其中,每个采集器实现8支电池的电压、温度数据采集、数据收发等功能,USB-CAN适配器实现USB与CAN总线的协议转换,上位机软件实现数据通信、数据显示、数据管理等功能。该系统可实时在线检测电池组中所有单体电池电压、温度等参数,并根据这些基本参数计算、显示电池组总电压、当前最高电压、最低电压、最高温度、最低温度,并且动态绘制电池组总电压实时曲线,同时,系统还具有电压及温度上下限报警、数据记录、历史数据查询、历史数据曲线绘制、导出Excel文件、数据库备份及恢复等功能。数据库采用SQL Server 2000。
CAN总线是德国BOSCH公司从20世纪80年代初为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通信协议,它是一种多主总线,通信速率可达1 MBPS。
2 软件设计
2.1 主程序
上位机软件和采集器通过CAN总线进行数据传输,通讯协议基于CAN2.0B规范,总线通讯速率为250 kBPS,帧格式为29位标识符的扩展帧,帧类型为数据帧,每帧通讯数据长度固定为8个字节。数据传输采取主从方式,上位机每隔一定间隔发送数据请求帧,各采集器收到后回送相应的数据,正常情况下上位机软件使用广播命令,各采集器收到后将自己的数据发出,如果上位机软件等待超时时间后未收到某个采集器的数据,则单独对该采集器发送数据请求。
上位机软件需要完成周期发送请求数据、数据采集、数据处理、超时处理及数据存储等任务。系统软件设计采用C#的定时器事件处理方式,包括定时发送请求数据、定时数据采集和定时超时处理。主程序负责数据处理。程序流程图见图2。
定时器是定期引发事件的组件,是为Windows窗体环境设计的。主要属性有Enable属性和Interval属性,Enable属性用于指定定时器是否启用,Interval属性是获取设置引发事件的间隔。本程序采用了Tick事件,该事件在指定的Interval值已经过去而且定时器处于启用状态时发生。
当开始采集数据时,进行系统初始化设置,包括读取报警参数设置、是否保存数据、采集器的个数等,然后开始定时发送请求数据。
在发送请求数据处理事件中,需要初始化数据变量,保护电压数据、温度数据和成功发送次数,如果发送请求数据成功,则同时开启定时数据采集和定时超时处理。
定时数据采集事件每隔5 ms执行一次,采集过程中记录采集信息,如果所有要请求的数据都采集成功,则同时停止该采集事件和超时处理事件,并使能数据处理函数。
如果在数据采集的过程中,在允许的超时时间内没有采集到所有的数据,则超时处理事件执行。超时处理事件中,判断是否是第一次执行该事件,如果是第一次,则向没有采集到数据的采集器单独发送请求命令。如果是第二次执行,则说明已经单独发送了数据请求命令,如果仍旧有数据没有采集到,则停止该次循环的数据采集,即停止数据采集定时事件和超时处理定时事件,并修改异常状态变量、触发数据处理函数。
数据处理函数实现数据分析、报警判断、详细数据显示、图形显示和数据保存。数据保存函数执行的条件有两个:一是选中了保存,二是没有选中保存,但是在数据处理过程中发现了异常数据,如过压、欠压、过高温、过低温等,则将该时刻所有的数据信息保存。
2.2 数据存储
按照规范设计的方法,考虑数据库及其应用系统开发全过程,将数据库设计分为六个阶段[3]:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施以及数据库运行和维护。
根据系统需求,设计了4张数据库关系表:
(1)电压/温度信息表:记录电池的电压和温度信息;
(2)总信息表:记录总电压值、当前最高电压、最低电压、最高温度和最低温度;
(3)报警阈值设置:记录设置的报警参数,包括单体电压上限、单体电压下限等;
(4)报警历史记录:记录满足报警条件的电池数据。
为了提高数据处理性能,数据库设计中使用了存储过程技术。
存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,使用时可由应用程序通过一个调用执行,而且运行用户声明变量、有条件执行以及强大的编程功能。可以在单个存储过程中执行一系列SQL语句。存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快。
系统设计了3个存储过程,分别用来向数据库表中插入电压/温度信息、总信息和报警历史。
为了保证相同时刻的数据信息存储到数据库中的一致性,在同时向数据库中插入电压/温度信息和总信息时,使用了事务技术。
事务保证多个数据更改在一起处理,这个成为不可分割性。事务启动之后,就必须成功完成,否则SQL Server将撤销该事务启动之后对数据所做的修改。
3 系统测试
系统主界面如图3所示。当单击开始采集时,系统开始采集电池组单体电压、温度,并在“实时数据显示”中显示。
在“当前总信息”中显示当前最高电压、最低电压、总电压、最高温度、最低温度以及对应的电池通道。
在“通讯状态”中显示当前通讯情况以及报警信息。
当最高电压、最低电压、总电压、最高温度、最低温度中有任意一项满足报警条件或者手动单击【停止采集】按钮时,系统便停止采集数据,并形成Excel文件,记录该停止时刻电池组的详细数据信息。
图3 主界面
当报警条件成立时,PC机主板蜂鸣器和音响同时发出报警声音提示,直到单击【解除报警】按钮,该报警解除。
根据以上设计结合公司自主开发的采集器进行了长时间连续的电池系统实际测试,结果如图3所示。实验结果表明,该系统能够准确反映电池组状态以及异常信息。
4 结论
本系统基于C#语言,采用了模块化的程序设计思路,实现了电池组状态信息实时采集、分析、显示和记录,数据记录采用了数据库技术,有助于离线分析电池性能。基于记录的电压数据,有助于实现基于电压数据的电池成组技术。
目前,该系统已经应用于本公司的产品测试中。本系统没有采集电流数据,在以后的系统设计中还要加上电流数据分析以及电池剩余电量计算,有助于进一步研究电池剩余电量计算方法并提高计算精度。
[1]吴赟,蒋新华,解晶莹.基于LabWindows/CVI的BMS测试系统设计[J].电源技术,2009,33(7):621.
[2]明日科技.Visual C#开发技术大全[M].北京:人民邮电出版社,2007.
[3]萨师煊,王珊.数据库系统概论[M].3版.北京:高等教育出版社,2003.