BMS OVMS Anpassungen
- edriver
- Autor
- Moderator
- Beiträge: 459
- Dank erhalten: 1151
dexter schrieb: Glückwunsch
Aber… ich sehe gerade Pascal hat sich bei dem Frame 0x554 nicht an den Standard gehalten (Abschnitt 5.4). Er überträgt nur vier valide Temperaturen, die drei NTCs des Akkus und einen internen des BMS. D.h. im OVMS müsstest Du mehr auf die Modultemperaturen als auf den Gesamtwert schauen. Module 1-3 = NTC 1-3, Modul 4 = BMS, Modul 5-7 ignorieren (0x00 = -40°C). Das Twizplay wird da wohl auch nicht mit klar kommen.
Beim VirtualBMS hatte ich es so gehalten, dass ich die fehlenden Modultemperaturen mit abgeleiteten Werten fülle. Ich schau mal ob ich dem OVMS das Datenlayout von Pascal beibringe.
Um mit dem OVMS vernünftiges anzeigen zu können müsstest du 1-3 als Akkutemperatur nutzen.
Modul 4= BMS kann auch mal 70°C haben und würde gegen Ladeende wenn der Balancer aktiv wird alles verfälschen.
Wollte damals für die BMS Temperatur keinen neuen Frame aufmachen wenn zugleich Modul 4-7 ungenutzt waren.
Gruß
Pascal
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- dexter
- Moderator
- Beiträge: 6037
- Dank erhalten: 4222
Support für das 3-Temperaturen-Layout ist eingebaut. Und da ich schon dabei war, hab ich auch Metrics für die Zusatzdaten eingeführt, d.h. Du kannst jetzt auch den Fehlerstatus, den Balancerstatus und die interne BMS-Temperatur überwachen:
OVMS# bms status
Voltage:
Average: 4.104V [4.100V - 4.110V]
Deviation: SD 3.49mV [max 3.49mV], 0 warnings, 0 alerts
Temperature:
Average: 29.3C [ 29.0C - 30.0C]
Deviation: SD 0.47C [max 0.60C], 0 warnings, 0 alerts
Cells:
+------------------------------------+--------+
1 | 4.110V 4.100V 4.105V 4.100V 4.105V | 29.0C |
+------------------------------------+--------+
2 | 4.100V 4.105V 4.105V 4.105V 4.105V | 30.0C |
+------------------------------------+--------+
3 | 4.100V 4.100V 4.100V 4.110V | 29.0C |
+------------------------------------+--------+
OVMS# xrt batt temp
P:29C (29C..29C) 1:29C 2:30C 3:29C
OVMS# me li xrt.bms.
xrt.bms.balancing 2,4,8,10,13,14
xrt.bms.error 0
xrt.bms.state1 4
xrt.bms.state2 1
xrt.bms.temp 52°C
xrt.bms.type 1
OVMS# me li v.b.c.
v.b.c.temp 29,30,29°C
v.b.c.temp.alert 0,0,0
v.b.c.temp.dev.max -0.33,0.67,-0.33°C
v.b.c.temp.max 29,30,29°C
v.b.c.temp.min 29,30,29°C
v.b.c.voltage 4.11,4.1,4.105,4.1,4.105,4.1,4.105,4.105,4.105,4.105,4.1,4.1,4.1,4.11V
v.b.c.voltage.alert 0,0,0,0,0,0,0,0,0,0,0,0,0,0
v.b.c.voltage.dev.max 0.00643,-0.00357,0.00143,-0.00357,0.00143,-0.00357,0.00143,0.00143,0.00143,0.00143,-0.00357,-0.00357,-0.00357,0.00643V
v.b.c.voltage.max 4.11,4.1,4.105,4.1,4.105,4.1,4.105,4.105,4.105,4.105,4.1,4.1,4.1,4.11V
v.b.c.voltage.min 4.11,4.1,4.105,4.1,4.105,4.1,4.105,4.105,4.105,4.105,4.1,4.1,4.1,4.11V
Michael
Twike 3 (2001) … Emco Novum (2011) … Twizy 80 (2012) … Mii electric+ (2020)
dexters-web.de
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- dexter
- Moderator
- Beiträge: 6037
- Dank erhalten: 4222
Michael
Twike 3 (2001) … Emco Novum (2011) … Twizy 80 (2012) … Mii electric+ (2020)
dexters-web.de
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Snorre
- Platinum Boarder
- Beiträge: 5822
- Dank erhalten: 3830
dexter schrieb: …ach ja, hab's bislang nur mit simulierten Daten getestet, bitte mal im Live-Betrieb testen
Herzlichen Dank.
Wird noch im Laufe des Tages in Betrieb genommen.
Jetzt gerade habe ich keinen Zugiff auf den Twizy.
Mußte den e-NV200 nehmen.
Bin seit Wochen im Corona-Modus und habe quasi keine Aufträge zum Geld verdienen.
Aber am Wochenende muß ich dann ran.
Na ja, ist aber nicht wirklich schlimm.
Es gibt schlimmere Schicksale als meines.
Twizy Cargo, EZ 07/2014, 110.000 km, Stand 09/2024
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Snorre
- Platinum Boarder
- Beiträge: 5822
- Dank erhalten: 3830
dexter schrieb: …ach ja, hab's bislang nur mit simulierten Daten getestet, bitte mal im Live-Betrieb testen
Sieht (für mich) gut aus.
Der Akku wird gerade geladen:
OVMS# bms status
Voltage:
Average: 3.925V [3.920V - 3.925V]
Deviation: SD 1.20mV [max 2.49mV], 0 warnings, 0 alerts
Temperature:
Average: 24.7C [ 24.0C - 25.0C]
Deviation: SD 0.47C [max 0.47C], 0 warnings, 0 alerts
Cells:
+------------------------------------+--------+
1 | 3.925V 3.925V 3.925V 3.925V 3.925V | 25.0C |
+------------------------------------+--------+
2 | 3.925V 3.925V 3.925V 3.925V 3.925V | 24.0C |
+------------------------------------+--------+
3 | 3.925V 3.925V 3.925V 3.920V | 25.0C |
+------------------------------------+--------+
OVMS# xrt batt temp
P:25C (25C..25C) 1:25C 2:24C 3:25C
OVMS# me li xrt.bms.
xrt.bms.balancing
xrt.bms.error 10
xrt.bms.state1 4
xrt.bms.state2 0
xrt.bms.temp 31°C
xrt.bms.type 1
OVMS# me li v.b.c.
v.b.c.temp 25,24,25°C
v.b.c.temp.alert 0,0,0
v.b.c.temp.dev.max 0.33,-0.67,0.33°C
v.b.c.temp.max 25,24,25°C
v.b.c.temp.min 25,24,25°C
v.b.c.voltage 3.925,3.93,3.925,3.925,3.925,3.925,3.925,3.925,3.925,3.925,3.925,3.925,3.925,3.925V
v.b.c.voltage.alert 0,0,0,0,0,0,0,0,0,0,0,0,0,0
v.b.c.voltage.dev.max 0.00321,0.00464,0.00286,-0.00429,-0.00357,-0.00357,0.00321,0.00321,0.00286,-0.00321,0.00321,-0.00429,0.0025,-0.00464V
v.b.c.voltage.max 3.925,3.93,3.925,3.925,3.925,3.925,3.925,3.925,3.925,3.925,3.925,3.925,3.925,3.925V
v.b.c.voltage.min 3.925,3.925,3.92,3.92,3.92,3.92,3.925,3.925,3.92,3.92,3.925,3.92,3.92,3.92V
Twizy Cargo, EZ 07/2014, 110.000 km, Stand 09/2024
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- dexter
- Moderator
- Beiträge: 6037
- Dank erhalten: 4222
Snorre schrieb:
OVMS# me li xrt.bms. xrt.bms.balancing xrt.bms.error 10 xrt.bms.state1 4 xrt.bms.state2 0 xrt.bms.temp 31°C xrt.bms.type 1
Ja, sieht korrekt aus. Gegen Ende der Ladung solltest Du in "xrt.bms.balancing" beobachten können, welche Zellen zuerst voll sind, die Metrik listet dann die Zellen mit aktiviertem Bypass auf.
Der Fehlercode 10 (=0xA) bedeutet "Interlock" (siehe Manual Abschnitt 5.4), also scheint da was noch nicht ganz richtig verbunden zu sein.
Michael
Twike 3 (2001) … Emco Novum (2011) … Twizy 80 (2012) … Mii electric+ (2020)
dexters-web.de
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- dexter
- Moderator
- Beiträge: 6037
- Dank erhalten: 4222
(bin gespannt ob das Forum inzwischen mit den Unicode-Zeichen klar kommt )
<!--
Web UI page plugin:
eDriver BMS Monitor
Version 0.1 Michael Balzer <dexter@dexters-web.de>
Dependencies:
- none
Installation:
- Type: Page
- Page: /usr/edrvmon
- Label: eDriver BMS
- Menu: Tools
- Auth: Cookie
-->
<style>
td i {
font-style: normal;
}
td i.danger {
color: red;
font-weight: bold;
}
td i.warning {
color: orange;
}
td i.balance {
color: blue;
font-weight: bold;
}
</style>
<div class="panel panel-primary panel-single receiver" id="edrvmon">
<div class="panel-heading">eDriver BMS Monitor</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-5">
<table id="tstate" class="table table-striped table-bordered table-hover" style="width:100%" />
<table id="tcmods" class="table table-striped table-bordered table-hover" style="width:100%" />
</div>
<div class="col-sm-7">
<table id="tcells" class="table table-striped table-bordered table-hover" style="width:100%" />
</div>
</div>
</div>
<div class="panel-footer">
<button type="button" class="btn btn-default" data-target="#cmdres" data-cmd="bms reset">Clear Alerts</button>
<samp class="samp-inline" id="cmdres"></samp>
</div>
</div>
<script>
(function(){
// Code translations:
var statusName = {
0: "OFF",
1: "BMS INIT",
2: "TRANSITION",
3: "TRANSITION2",
4: "CHARGING",
5: "DRIVING",
6: "CHARGING END1",
7: "CHARGING END2",
8: "BMS CONFIG",
80: "BOOTLOADER READY",
81: "BOOTLOADER FLASHING",
};
var errorName = {
0: "ALL OK",
1: "EEPROM ERROR",
10: "INTERLOCK ERROR",
11: "INTERNAL ERROR",
12: "CURRENT SENSOR ERROR",
};
var auxstateName = {
0: "OFF",
1: "ON",
};
var alertName = {
0: '',
1: '<i class="warning">❓</i>',
2: '<i class="danger">⚠</i>',
};
function codeName(map, code) {
if (code == null) return "";
else if (map[code] != null) return map[code];
else return "Code " + code;
}
var $tstate, $tcmods, $tcells;
// Init tables:
$('#tstate').table({
responsive: false,
paging: false,
searching: false,
info: false,
ordering: false,
autoWidth: false,
columns: [
{ title: "Name", className: "dt-body-left", width: "40%" },
{ title: "Value", className: "dt-body-left", width: "60%" },
],
rowId: 0,
responsive: true,
initComplete: function(settings) { $tstate = this.api(); },
});
$('#tcmods').table({
responsive: false,
paging: false,
searching: false,
info: false,
autoWidth: false,
columns: [
{ title: "#", className: "dt-body-center", width: "10%" },
{ title: "Temp", className: "dt-body-right", width: "40%" },
{ title: "Dev", className: "dt-body-right", width: "40%" },
{ title: "Alrt", className: "dt-body-center", width: "10%" },
],
rowId: 0,
responsive: true,
initComplete: function(settings) { $tcmods = this.api(); },
});
$('#tcells').table({
responsive: true,
paging: false,
searching: false,
info: false,
autoWidth: false,
columns: [
{ title: "#", className: "dt-body-center", width: "10%" },
{ title: "Volt", className: "dt-body-right", width: "30%" },
{ title: "Bal", className: "dt-body-center", width: "10%" },
{ title: "Dev", className: "dt-body-right", width: "30%" },
{ title: "Alrt", className: "dt-body-center", width: "10%" },
],
rowId: 0,
responsive: true,
initComplete: function(settings) { $tcells = this.api(); },
});
// Receiver event handling:
$('#edrvmon').on('msg:metrics', function(ev, upd) {
var updkeys = Object.keys(upd).join();
if (/(xrt\.bms\.|v\.b\.[cevs])/.test(updkeys)) {
var dstate = [
[ 'Status', codeName(statusName, metrics['xrt.bms.state1']) ],
[ 'Error', codeName(errorName, metrics['xrt.bms.error']) ],
[ 'Temperature', metrics['xrt.bms.temp']+' °C' ],
[ 'AUX Relay', codeName(auxstateName, metrics['xrt.bms.state2']) ],
[ 'SOC', Number(metrics['v.b.soc']).toFixed(1)+' %' ],
[ 'Voltage', Number(metrics['v.b.voltage']).toFixed(1)+' V' ],
[ 'Current', Number(metrics['v.b.current']).toFixed(1)+' A' ],
[ 'Coulomb used', Number(metrics['v.b.coulomb.used']).toFixed(2)+' Ah' ],
[ 'Coulomb recd', Number(metrics['v.b.coulomb.recd']).toFixed(2)+' Ah' ],
[ 'Energy used', Number(metrics['v.b.energy.used']).toFixed(2)+' kWh' ],
[ 'Energy recd', Number(metrics['v.b.energy.recd']).toFixed(2)+' kWh' ],
];
$tstate.clear().rows.add(dstate).draw();
}
if (/v\.b\.c\.temp/.test(updkeys)) {
var dcmods = [];
for (var i = 0; i < metrics['v.b.c.temp'].length; i++) {
var row = [ i+1,
Number(metrics['v.b.c.temp'][i]).toFixed(0)+' °C',
Number(metrics['v.b.c.temp.dev.max'][i]).toFixed(1)+' °C',
codeName(alertName, metrics['v.b.c.temp.alert'][i]),
];
dcmods.push(row);
}
$tcmods.clear().rows.add(dcmods).draw();
}
if (/(xrt\.bms\.balancing|v\.b\.c\.voltage)/.test(updkeys)) {
var dcells = [];
var bal = metrics["xrt.bms.balancing"] || [];
for (var i = 0; i < metrics['v.b.c.voltage'].length; i++) {
var row = [ i+1,
Number(metrics['v.b.c.voltage'][i]).toFixed(3)+' V',
bal.includes(i+1) ? '<i class="balance">⚖</i>' : '',
(Number(metrics['v.b.c.voltage.dev.max'][i])*1000).toFixed(1)+' mV',
codeName(alertName, metrics['v.b.c.voltage.alert'][i]),
];
dcells.push(row);
}
$tcells.clear().rows.add(dcells).draw();
}
});
})();
</script>
Michael
Twike 3 (2001) … Emco Novum (2011) … Twizy 80 (2012) … Mii electric+ (2020)
dexters-web.de
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- dexter
- Moderator
- Beiträge: 6037
- Dank erhalten: 4222
Michael
Twike 3 (2001) … Emco Novum (2011) … Twizy 80 (2012) … Mii electric+ (2020)
dexters-web.de
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- dexter
- Moderator
- Beiträge: 6037
- Dank erhalten: 4222
Michael
Twike 3 (2001) … Emco Novum (2011) … Twizy 80 (2012) … Mii electric+ (2020)
dexters-web.de
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Goldbacher
- Platinum Boarder
- Beiträge: 3877
- Dank erhalten: 1756
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- dexter
- Moderator
- Beiträge: 6037
- Dank erhalten: 4222
Die Anzeige der Ah-Zähler und des SOC mit auf der Seite soll die Ermittlung/Kalibrierung der nominellen Kapazität vereinfachen.
Michael
Twike 3 (2001) … Emco Novum (2011) … Twizy 80 (2012) … Mii electric+ (2020)
dexters-web.de
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- TwizyChrisy
- 10k Boarder
- Der Trend geht klar zum Zweittwizy äähhh....
- Beiträge: 18653
- Dank erhalten: 10393
Goldbacher schrieb: Meine Überlegung war, anstatt den Akku gegen einen größeren zu tauschen einfach einen Rangeextender-Akku auf den Soziussitz zu stellen oder hinten als Rucksack anzuschrauben. Vom OVMS wird dann nur der Hauptakku überwacht. Das macht aber nichts.
Die Lösung hat hier jemand aus Bamberg? ..... War bei mir am Twizy Frühstück, hatte aber bei so vielen Gästen keine Zeit mir das näher anzukucken.
Mehr Twizys, mehr Freude.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- dexter
- Moderator
- Beiträge: 6037
- Dank erhalten: 4222
Anbei noch ein Update des Monitors. Screenshot:
Michael
Twike 3 (2001) … Emco Novum (2011) … Twizy 80 (2012) … Mii electric+ (2020)
dexters-web.de
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- edriver
- Autor
- Moderator
- Beiträge: 459
- Dank erhalten: 1151
dexter schrieb: Das OVMS macht das nicht vom SOC abhängig sondern erkennt ein normales Ladeende anhand der letzten Ladestromstufe, ist das 0 dann gilt es als Ladeabschluss, sonst als Abbruch.
Das ist das Verhalten des Original-BMS, das ja je nach Twizy auch schon mal bei 97% die Ladung beendet. Im VirtualBMS habe ich das Verhalten nachgebildet indem der API-Call setChargeCurrent(0) automatisch den Stop-Frame auslöst.
Beendest Du die Ladung ohne den Strom auf 0 zu setzen? Was ist dann bei Dir das Erkennungszeichen für einen normalen Abschluss?
Genau Sobald stufe 1 länger als ein paar Minuten aktiv ist wird gestoppt ohne auf 0 zu stellen.
if(MeasuredCellMaxVoltage>(CellMaxVoltage+100)){ /*At least on cell exceeds voltage limit(+100mV), Emergency off*/
UsedWh=0; /*Reset Wh meter*/
BMS_State=CHARGING_END1;
}
if(id155.Data[0]==1 && (systimePwrCtl+500000)<systime){/*Terminate charging after 500s on power level1*/
UsedWh=0; /*Reset Wh meter*/
BMS_State=CHARGING_END1;
}
Im State CHARGING_END1 wird dann folgendes gesetzt.
id424.Data[0]=0x12; /*Stop charging*/
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- dexter
- Moderator
- Beiträge: 6037
- Dank erhalten: 4222
edriver schrieb: Genau Sobald stufe 1 länger als ein paar Minuten aktiv ist wird gestoppt ohne auf 0 zu stellen.
Das heißt Ladeabbruch ist von außen nicht von Ladeschluss unterscheidbar… bzw. so gesehen machst Du ja tatsächlich immer einen Abbruch, entweder weil die Spannung in einer Zelle zu hoch wird oder weil die Zeit in Stufe 1 zu lang wird.
Da könnte ich nur prüfen, ob der Abbruch bei 99,9% in Stufe 1 erfolgte. Aber auch das kann ein echter manueller oder externer Abbruch sein, speziell wenn das BMS nicht auf die richtige Kapazität eingestellt ist.
Ich rege hiermit also an, einen regulären Ladeabschluss einzubauen, der anhand Stromlevel 0 erkennbar ist. Kannst Du evtl. die Zellspannungserkennung statt als Emergency als Normalfall definieren? Das ist ja vermutlich auch beim LG-BMS so, wie Goldbacher schon schrieb.
Michael
Twike 3 (2001) … Emco Novum (2011) … Twizy 80 (2012) … Mii electric+ (2020)
dexters-web.de
Bitte Anmelden oder Registrieren um der Konversation beizutreten.