如何通过bms系统获取数据,进行数据分析,驱动业务改进

html-css010

如何通过bms系统获取数据,进行数据分析,驱动业务改进,第1张

数据分析师中国统计网——一位资深数据分析师的分享

一、掌握基础、更新知识。

基本技术怎么强调都不过分。这里的术更多是(计算机、统计知识), 多年做数据分析、数据挖掘的经历来看、以及业界朋友的交流来看,这点大家深有感触的。

数据库查询—SQL

数据分析师在计算机的层面的技能要求较低,主要是会SQL,因为这里解决一个数据提取的问题。有机会可以去逛逛一些专业的数据论坛,学习一些SQL技巧、新的函数,对你工作效率的提高是很有帮助的。

统计知识与数据挖掘

你要掌握基础的、成熟的数据建模方法、数据挖掘方法。例如:多元统计:回归分析、因子分析、离散等,数据挖掘中的:决策树、聚类、关联规则、神经网络等。但是还是应该关注一些博客、论坛中大家对于最新方法的介绍,或者是对老方法的新运用,不断更新自己知识,才能跟上时代,也许你工作中根本不会用到,但是未来呢?

行业知识

如果数据不结合具体的行业、业务知识,数据就是一堆数字,不代表任何东西。是冷冰冰,是不会产生任何价值的,数据驱动营销、提高科学决策一切都是空的。

一名数据分析师,一定要对所在行业知识、业务知识有深入的了解。例如:看到某个数据,你首先必须要知道,这个数据的统计口径是什么?是如何取出来的?这个数据在这个行业, 在相应的业务是在哪个环节是产生的?数值的代表业务发生了什么(背景是什么)?对于A部门来说,本月新会员有10万,10万好还是不好呢?先问问上面的这个问题:

对于A部门,

1、新会员的统计口径是什么。第一次在使用A部门的产品的会员?还是在站在公司角度上说,第一次在公司发展业务接触的会员?

2、是如何统计出来的。A:时间;是通过创建时间,还是业务完成时间。B:业务场景。是只要与业务发接触,例如下了单,还是要业务完成后,到成功支付。

3、这个数据是在哪个环节统计出来。在注册环节,在下单环节,在成功支付环节。

4、这个数据代表着什么。10万高吗?与历史相同比较?是否做了营销活动?这个行业处理行业生命同期哪个阶段?

在前面二点,更多要求你能按业务逻辑,来进行数据的提取(更多是写SQL代码从数据库取出数据)。后面二点,更重要是对业务了解,更行业知识了解,你才能进行相应的数据解读,才能让数据产生真正的价值,不是吗?

对于新进入数据行业或者刚进入数据行业的朋友来说:

行业知识都重要,也许你看到很多的数据行业的同仁,在微博或者写文章说,数据分析思想、行业知识、业务知识很重要。我非常同意。因为作为数据分析师,在发表任何观点的时候,都不要忘记你居于的背景是什么?

但大家一定不要忘记了一些基本的技术,不要把基础去忘记了,如果一名数据分析师不会写SQL,那麻烦就大了。哈哈。。你只有把数据先取对了,才能正确的分析,否则一切都是错误了,甚至会导致致命的结论。新同学,还是好好花时间把基础技能学好。因为基础技能你可以在短期内快速提高,但是在行业、业务知识的是一点一滴的积累起来的,有时候是急不来的,这更需要花时间慢慢去沉淀下来。

不要过于追求很高级、高深的统计方法,我提倡有空还是要多去学习基本的统计学知识,从而提高工作效率,达到事半功倍。以我经验来说,我负责任告诉新进的同学,永远不要忘记基本知识、基本技能的学习。

二、要有三心。

1、细心。

2、耐心。

3、静心。

数据分析师其实是一个细活,特别是在前文提到的例子中的前面二点。而且在数据分析过程中,是一个不断循环迭代的过程,所以一定在耐心,不怕麻烦,能静下心来不断去修改自己的分析思路。

三、形成自己结构化的思维。

数据分析师一定要严谨。而严谨一定要很强的结构化思维,如何提高结构化思维,也许只需要工作队中不断的实践。但是我推荐你用mindmanagement,首先把你的整个思路整理出来,然后根据分析不断深入、得到的信息不断增加的情况下去完善你的结构,慢慢你会形成一套自己的思想。当然有空的时候去看看《麦肯锡思维》、结构化逻辑思维训练的书也不错。在我以为多看看你身边更资深同事的报告,多问问他们是怎么去考虑这个问题的,别人的思想是怎么样的?他是怎么构建整个分析体系的。

四、业务、行业、商业知识。

当你掌握好前面的基本知识和一些技巧性东西的时候,你应该在业务、行业、商业知识的学习与积累上了。

这个放在最后,不是不重要,而且非常重要,如果前面三点是决定你能否进入这个行业,那么这则是你进入这个行业后,能否成功的最根本的因素。 数据与具体行业知识的关系,比作池塘中鱼与水的关系一点都不过分,数据(鱼)离开了行业、业务背景(水)是死的,是不可能是“活”。而没有“鱼”的水,更像是“死”水,你去根本不知道看什么(方向在哪)。

如何提高业务知识,特别是没有相关背景的同学。很简单,我总结了几点:

1、多向业务部门的同事请教,多沟通。多向他们请教,数据分析师与业务部门没有利益冲突,而更向是共生体,所以如果你态度好,相信业务部门的同事也很愿意把他们知道的告诉你。

2、永远不要忘记了google大神,定制一些行业的关键字,每天都先看看定制的邮件。

3、每天有空去浏览行业相关的网站。看看行业都发生了什么,主要竞争对手或者相关行业都发展什么大事,把这些大事与你公司的业务,数据结合起来。

4、有机会走向一线,多向一线的客户沟通,这才是最根本的。

标题写着告诫,其实谈不上,更多我自己的一些心得的总结。希望对新进的朋友有帮助,数据分析行业绝对是一个朝阳行业,特别是互联网的不断发展,一个不谈数据的公司根本不叫互联网公司,数据分析师已经成为一个互联网公司必备的职位了。

-

从事BMS软件设计已有一段时间了,自觉还没有真正的入门,不过还是有一些心得是想可以分享的,也是对自己的知识做一个梳理吧。在我梳理之前,我发现网上已有相关的梳理,竟然软件架构都差不多,我就借鉴了一下。

首先,电池管理系统(BMS)是电池与用户之间的纽带,主要对象是二次电池,主要就是为了能够提高电池的利用率,防止电池出现过度充电和过度放电,可用于电动汽车,电瓶车,机器人,无人机等。

接下来,我会从信号采集,数据处理和控制逻辑,进行解析我眼中的BMS。

一、信号采集

顾名思义,电池管理系统,首先管理的对象是电池。我们就必须对当前电池的状态有一个细致的了解,也不能什么都不知道就用开始电池。电池的状态,主要表现为以下的几个方面。

电池的单芯电压

电池的温度

电池组的总电压

电池组的总电流

电池组的绝缘电阻

下面,我就对电池信息的采集,做一简单的说明:

1. 单芯电压的检测

电池的成组方式一般是串联加并联。以我的理解,串联主要是加大整个电池模组的电压,并联就是增加电池的可充放电电流。

我们都知道,想要能驱动电机工作,就必须给它一定的能量,能量怎么来的,学过物理的都知道

P= V*I

想要 P 变大,不就得使电流电压变大吗?

再说电池,一节电池的最大放电电流和最大充电电流都是固定的。并联简单的就是将这两个值成倍的放大。

那么,单芯电压到底怎么测?就是将并联的单芯当做一节电池使用,这节电池的两端电压,就是单芯电压了。很简单的,不是吗?

原理虽然说起来是很简单,不过精度要求却是挺高的,这是硬性要求。我们一般的电池OCV曲线,是上下抖中间平的的样子。电池的电压稍有变化,SOC的变化就很大了。

2. 电池的温度检测

相对于电压的高精度要求,温度的检测不是那么的严格了。一般来说在2°的误差内,都是可接受的。温度的检测,相对来说也是简单多了,我了解的大多数做BMS的厂商,用的都是NTC来做检测的。

NTC检测温度的原理,就是温度值和对应温度下电阻值一一对应,一般和另一个电阻分压一个标准电压。使用单片机ADC功能就可以简单的得到温度值。

3. 电池的总电压采集

总电压,即观察电池整个模组的电压状况。一般来说,没什么太大的用处,只是作为一个参考值,来用。总电压除以电池的串联数,就是一个大概的单芯电压平均值。

总电压的大小不定,这是由车辆本身的需求决定,就我所见到的电压等级150V~800V不等。

那么,总电压如何采集?

常用的一种方法就是,将总电压使用电阻等比例分压,AD采集采样电阻的两端电压。需要注意的是,动态电压的变化是十分不稳定的,所以必须的消抖电路和消抖程序都是需要的。

4. 电池的总电流采集

工作模式有充有放,电流因此有正有负。

电流,我认为这是所有电子设计中是最需要关注的一个参数。电流,是最容易引发故障,也是最为危险的。

在BMS系统中,电流在SOC的计算,电池均衡策略中都有不可忽视的作用。

5. 电池的绝缘电阻采集

什么是绝缘电阻? 简单来说,就是防触电保护的最小电阻。国标上的要求是0.1mA。我们一般来说都会放大余量,安全问题再怎么关注都不差。

那么,绝缘电阻又是怎么测量的呢?

当前主流的绝缘检测方法有两种,电桥法和交流注入法。使用较多的应该是前者,今天就介绍一种电桥检测法。

二、数据处理

之前一直在思考,什么是程序,程序的本质是什么?

我的理解“ 程序就是一种控制思想,一种因果变化 ”。

为了实现某个功能,具现化为某个状态变量的输出。就要从已有的输入变量中选择合适的变量作为输入。输入通过某种复杂的转换(控制实现/计算实现)得到输出的过程就是程序。

关键:

确保输入输出变量的准确性(数据处理)

从输入到输出实现的可能性(逻辑控制)

数据的处理可以从以下的两个方面考虑:

输出变量的处理

输入变量的处理

数据,我将它分为两类

功能数据

性能数据

功能数据:数据是作为算法的必要输入特意获取的数据,比如上面的采集数据,SOC等

性能数据:数据不作为功能逻辑上的输入,更多的是对软硬件的稳定性安全性的一个评估作用。比如板子的输入电压检测,继电器开关的状态检测,CAN出错等。

变量分两类:数据和状态,有以下的几种处理方式

数据:不同状态下,多个数据,取权重。

数据:

去除在范围之外的数据,多个采样,取有效值的均值。

对于超范围的数据,设置标志位,故障处理。

状态:连续一段时间维持某一状态不变(消抖)

数据,经过处理,如果没有问题就可以作为有效输入数据。在功能被触发的条件下,直接被调用。

那出错了呢?对于这个问题,专门有一个故障处理的模块。实时的将故障点检测出来,发给整车,并且存储起来。

故障等级大致是这样的分的:

一级:只是报警,不做任何处理,可消退

二级:报警,限速,可消退

三级:报警,限速,不可消退

四级:报警,制动,不可消退

具体的哪些故障对应哪个等级,就不说了。

三、逻辑控制

逻辑控制主要有以下的几个部分:

上电自检,确定系统状态

继电器控制,不同状态,不同的继电器数量有不同的控制方式

充电控制,分为快充和慢充,需要分开处理

均衡控制

电池加热控制

1. 上电自检

汽车一共有两个工作模式:放电,充电。其中充电再分为快充和慢充。确定工作模式的方式是,给BMS供电的到底是哪个24V电源,T15/快充/慢充

只有自检通过才允许上高压,也就是闭合对应的继电器。那么,观察哪些信号,就可以确认自检没问题?

所有继电器状态OK

总电流OK

绝缘电阻OK

只存在一个工作模式

自检OK,就可以使能对应的CAN通讯,也可以上高压放电和充电。

2. 继电器控制

继电器的控制逻辑更多的是一个先后顺序

开始放电

吸合负极继电器

吸合预充继电器

吸合放电继电器(正极和电机之间的继电器)

断开预充继电器

停止放电

断开负极继电器

断开放电继电器

开始充电

吸合负极继电器

吸合充电继电器(正极和充电机之间的继电器)

停止充电

断开负极继电器

断开充电继电器

先断负极,再断正极,是为了分担上下电的压力;这种说法保留

通过做过的项目来讲,继电器的控制,要根据不同的客户需求来定

3. 电池加热控制

电池加热主要是在电池充电的时候使用。

温度过低,电池的活性降低,所以需要先给电池加热,后续再充电。

基本的流程:吸合加热继电器,向充电机需求一个电流。此时动力和充电机同时给加热继电器提供电流,只是充电机电流比较大。加热结束,断开加热继电器,同时向充电机需求一个大的充电电流。

4. 充电(快充)控制

所有的控制逻辑在国标GBT 27930-2015中定义的很清楚。严格按照国标来基本不会出什么问题

5. 均衡控制

均衡,是一个比较大的概念,后续再讲

总结

梳理了BMS的一些基本概念,通过这个过程这才发现,我了解的还是太少太生疏了。

留下的问题:

SOC算法和均衡控制算法    这个确实是个难点

标准化设计的一些想法  有待学习

bootloader

自动化生产测试

上位机相关知识

电池知识的深入了解

等等

        愿你出走半生,归来仍是少年…