DIY Hella IBS Batteriecomputer

  • @wolkenschaufler


    Ich kann den Sensor jetzt vollständig auslesen und parametrieren. Eine Frage hätte ich aber noch, evtl. weißt du da was: Wie wird die Restlaufzeit im Display der Hella IBSControl berechnet? Wird die vom Sensor berechnet und vom Display ausgelesen oder berechnet das Display die verbleibende Zeit selber?


    MfG

    Knaus BoxStar Solution 2017 130PS Multijet, 260Watt Solar + DIY Hella IBS Batteriemonitor, AHK + Atera DL3

    Einmal editiert, zuletzt von breezer ()

  • Die Dokumentation hat mir wenig neue Erkenntnisse gebracht. Letztendlich habe ich den Code auf Github verwendet und etwas erweitert -> https://github.com/frankschoeniger/LIN_Interface
    Ich habe noch zwei Funktionen zum Parametrieren der Batterien hinzugefügt:


    #define Starter 1 //BatTyps
    #define GEL 2
    #define AGM 3


    setNomCap(7); //Normkapazität parametrieren (7AH)
    setBatTyp(AGM); //Batterietyp setzen


    void setNomCap (byte cap) {


    byte i = 0;


    LinMessage[0] = 0x00;
    LinMessage[1] = 0x02;
    LinMessage[2] = 0x03;
    LinMessage[3] = 0xb5;
    LinMessage[4] = 0x39;
    LinMessage[5] = cap;
    LinMessage[6] = 0xff;
    LinMessage[7] = 0xff;
    LinMessage[8] = 0xff;

    byte cksum = LINChecksum(9);


    LinMessage[0] = 0x3c;

    serialBreak();
    linSerial.write(0x55); // Sync
    while (i < 9) {
    linSerial.write(LinMessage); // Message (array from 1..8)
    i++;
    }
    linSerial.write(cksum);
    linSerial.flush();
    }


    void setBatTyp (byte BatTyp) {


    byte i = 0;

    LinMessage[0] = 0x3c;
    LinMessage[1] = 0x02;
    LinMessage[2] = 0x03;
    LinMessage[3] = 0xb5;
    LinMessage[4] = 0x3a;


    LinMessage[6] = 0xff;
    LinMessage[7] = 0xff;
    LinMessage[8] = 0xff;

    switch (BatTyp) {

    case Starter:
    //3c 02 03 b5 3a 0a ff ff ff 01
    LinMessage[5] = 0x0a;
    serialBreak();
    linSerial.write(0x55); // Sync
    while (i < 9) {
    linSerial.write(LinMessage[I]); // Message (array from 1..8)
    i++;
    }
    linSerial.write(0x01);
    linSerial.flush();
    break;

    case GEL:
    //3c 02 03 b5 3a 14 ff ff ff f6
    LinMessage[5] = 0x14;
    serialBreak();
    linSerial.write(0x55); // Sync
    while (i < 9) {
    linSerial.write(LinMessage[I]); // Message (array from 1..8)
    i++;
    }
    linSerial.write(0xf6);
    linSerial.flush();
    break;

    case AGM:
    //3c 02 03 b5 3a 1e ff ff ff ec
    LinMessage[5] = 0x1e;
    serialBreak();
    linSerial.write(0x55); // Sync
    while (i < 9) {
    linSerial.write(LinMessage[I]); // Message (array from 1..8)
    i++;
    }
    linSerial.write(0xec);
    linSerial.flush();
    break;

    }
    [/I][/I][/I]

    Knaus BoxStar Solution 2017 130PS Multijet, 260Watt Solar + DIY Hella IBS Batteriemonitor, AHK + Atera DL3

  • @wolkenschaufler


    Doch deine Informationen haben mir auch weitergeholfen.


    Ich habe mir ein kleines Mäusekino gebastelt welches mir ein paar wichtige Informationen anzeigt, z.b. Temperatur innen, außen usw.
    Neben den Batterieinformationen für Versorungsbatterie und Starterbatterie lasse ich mir noch Daten vom Solarregler anzeigen, welcher über Modbus kommuniziert...


    So sieht dann die Anzeige aus, die Daten sind erstmal nur Demowerte...


    Knaus BoxStar Solution 2017 130PS Multijet, 260Watt Solar + DIY Hella IBS Batteriemonitor, AHK + Atera DL3

  • Hallo Zusammen,


    ich habe Probleme den IBS 200 in Betrieb zu nehmen. Ich habe die Schaltung nachgebaut, erhalte aber leider gar keine Antwort vom Sensor.
    Mit dem Scope / Logic Analysator sieht man, dass das Programm zwar auf dem LIN-Bus sendet, aber der Empfänger bleibt still.
    Ich habe das Programm testweise angepasst, dass alle möglichen IDs abgefragt werden, aber es gibt gar keine Antwort.


    Kann hier jemand bestätigen, dass die Steckerbelegung wie folgt ist
    Pin1 == oberer Pin Richtung Deckel == +Ubat Pluspol der Batterie
    Pin2 == unterer Pin == LIN-Bus Signal
    (siehe Bild)


    Besten Dank
    Bernd

  • Bin einen Schritt weiter. Hatte noch ein Problem, dass mein Frame-Break nicht verläßlich erzeugt wurde. Erhalte nun Antworten vom Sensor, aber nicht auf den zu erwartenden IDs.


    Die Pinbelegung ist wie oben beschrieben!


    Antworten bekomme ich auf PID 0x21?, 0x22, 0x23?, 0x24?, 0x25, 0x26,0x30? (Bei den Fragezeichen bin ich mir bei der Checksumme nicht sicher).


    Das ist dann wohl ein Sensor TYP B. Weiß jemand von euch auf welchen ID's was zurückgegeben wird?


    Besten Dank
    Bernd

  • Nein, du hast den Sensor Typ 1. Die ID 0x21 ist identisch mit der ID 0x27.


    Wie schon erwähnt hab ich die offizielle Dokumentation, darf Sie aber aus Datenschutzrechtlichen Gründen nicht weiter geben. Was ich anbieten kann, sind die Log Dateien wenn man auf dem Bus lauscht und das Orginal Display als Masterknoten installiert hat.


    Gruß Max

  • Hallo Max,


    danke für deine Antwort.


    Auf den originalen ID's erhalte ich keine Antwort. Deshalb die Annahme von Typ 2.
    Im Anhang ist ein Ausschnitt von meinem Scan. Auf PID 0x22 scheinen Spannung, Strom und Temperatur zu sein, der Rest ist ist ohne Doku Kaffeesatzleserei.
    Ich habe gerade nochmal ein Blick auf die Logs geworfen, die du hier hochgeladen hattest. Die PIDs sind ja bei dir bei deinen beiden Sensoren erstaunlicherweise gleich. Ich dachte, die beiden unterschiedlichen Typen dienen dazu, zwei Sensoren gleichzeitig an einem Bus zu betreiben, oder?
    Ich werde mal versuchen, die Doku von Hella zu bekommen. Ohne Doku macht das für mich leider keinen Sinn..


    Gruß
    Bernd

  • Guten Abend zusammen,


    ich habe mir auch vorgenommen einen Batteriemonitor mit dem IBS200 zu bauen.


    Spannung und Strom bekomme ich auf PID 0x28 zurück.
    Da ich jetzt verschiedene Aussagen zu PID´s und Sensortyp gelesen habe meine erste Frage:


    Wer kann mir sagen um welchen sensor es sich handelt (Typ1 - Typ2 bzw Sensor1 - Sensor2)?


    Momentan versuche ich mich daran dem Sensor beizubringen wie viel AH die Batterie hat und was für ein Typ die Batterie ist.


    Ich habe dazu den hier im Beitrag von breezer bereitgestellten Code verwendet um die Batterie-Kapazität zu senden.
    Scheint auch zu funktionieren da ich danach die PID 0x2C auslese -> 2C: FF:F4:1:D9:0:32:FE:12: und das 6´te Byte 0x32 -> 50 entspricht genau das was ich zuvor gesendet habe.


    Kann mir jemand bestätigen das ich da richtig vorgehe?


    Die nächste Sache wäre der Batterietyp:
    Hier habe ich auch das Beispiel von breezer benutzt, kann nach dem senden des Batterietyp´s aber bei keiner PID eine Plausible Veränderung feststellen die auf den veränderten Batterietyp hinweist.



    Würde mich freuen von einem von euch zu hören.


    Mit freundlichen Grüßen
    Fabian

  • @xspots


    du hast einen Sensor 2, so wie ich auch, der Sensor 1 hat andere PIDs.


    Bezüglich der Parametrierung der Batterieparameter sieht es wohl so aus wie du es beschrieben hast.
    Der Sensor speichert den neuen Kapazitätswert anscheinen richtig ab, da er nach der Parametrierung den neuen Wert zurück gibt.
    Den eingestellten Batterietyp kann man laut der Doku nicht auslesen, der wird bei keinem Datenframe zurückgegeben.
    Ich gehe aber davon aus oder hoffe es zumindest, dass er den Batterietyp übernimmt. Jedenfalls wird nach dem Sendern das recalibration-bit zurückgesetzt, d.h. die Batterie wird neu angelernt.


    Ich habe mich bei den Frames zum Parametrieren auf das LOG von @wolkenschaufler gestützt
    Nach dem Senden der Parameter mit 3c als erstes Byte tauch in den LOGs immer ein Frame mit 7d als erstes Byte auf, keine Ahnung was das aussagt... -> evtl. ein Response Frame???


    Vermutlich ist die Doku die ich habe auch nicht vollständig diesebezüglich, evtl. kann @wolkenschaufler uns da auf die Sprünge helfen?

    Knaus BoxStar Solution 2017 130PS Multijet, 260Watt Solar + DIY Hella IBS Batteriemonitor, AHK + Atera DL3

    11 Mal editiert, zuletzt von breezer ()

  • Vermutlich ist die Doku die ich habe auch nicht vollständig diesebezüglich, evtl. kann @wolkenschaufler uns da auf die Sprünge helfen?


    Bezüglich was genau? Es fällt mir ohnehin schwer, euch hier im dunkeln tappen zu lassen und ich weiß alles :affehand: Ich war an der selben Stelle bevor ich die Doku von Hella erhalten habe. Aber mir sind leider die Hände gebunden, da ich die Daten nicht weiter geben darf.


    Gruß Maximilian

  • Bezüglich was genau?


    Wie das Handling zum Parametrieren ist, wie kann ich sicher sein das der Batterietyp korrekt gesetzt wurde?
    Die Normkapazität kann ich ja über das Frame 2c zurücklesen und sehe das mein neuer Wert gesetzt wurde.
    Aber wie ist das bei dem Batterietyp...?

    Knaus BoxStar Solution 2017 130PS Multijet, 260Watt Solar + DIY Hella IBS Batteriemonitor, AHK + Atera DL3

  • Aber wie ist das bei dem Batterietyp...?


    Der Batterietyp wird nicht zurück geben.


    Wenn dann nur über den Response-Frame vom Slave (75Ah_AGM):

    Code
    00013.906  3c 01 03 b5 3a 1e ff ff ff ed ERR
    00013.956  7d 01 03 7f 3a 12 ff ff ff 30 ERR


    Aber ich kann mir in diesem Fall auch nicht erklären, warum der Slave hier mit 12 antwortet. Hat aber so seine Richtigkeit...


    Konnte ich euch weiter helfen?


    Gruß Max

  • @wolkenschaufler


    Ja das hilft sehr mir weiter,


    Meinen tests entnehme ich das der Sensor das setzen des Batterietyp´s übernommen hat da nach der Kalibrierungszeit (~3h ?) das PID:0x2C - Bit 5 - 1 ist.


    Momentan beschäftige ich mich mit SOC und SOH. Meinen Recherchen zufolge ist SOC in der Antwort von PID: 0x2B Bit 0 geteilt durch 2 und SOH Bit 1 geteilt durch 2.
    Was mir komisch vorkommt ist das ich einen SOC von 0 haben soll und einen SOH von 127.


    Momentan habe ich ein Ladegerät an meiner Batterie.
    Die entnehmbare Kapazität steigt auch (Antwort von PID: 0x2C Bit2 + Bit3 geteilt durch 10 )



    Mit freundlichen Grüßen
    Fabian

  • @xspots schaue dir diesen Code an: https://github.com/frankschoeniger/LIN_Interface


    da sind die wichtigsten Frames enthalten z.b.:

    Code
    readFrame(0x2B);
    
    
    
    
    soc = int(LinMessageA[0]) / 2;
    soh = int(LinMessageA[1]) / 2;


    und z.b. das Recalibration-bit:

    Code
    readFrame(0x2C);
    
    
    AvCap = (float((LinMessageA[3] << 8) + LinMessageA[2])) / 10;       //Dischargeable Capacity
    int Calib = bitRead(LinMessageA[5], 0);

    Knaus BoxStar Solution 2017 130PS Multijet, 260Watt Solar + DIY Hella IBS Batteriemonitor, AHK + Atera DL3

  • @breezer


    Ja den Code habe ich mir auch angeschaut.
    Daher habe ich ja auch die Information Bit 0 und Bit 1.
    Aber der daraus resultierende Wert für:
    SOC = 0 und ein SOH = 127 ist doch nicht normal oder?
    Die Werte sollten sich doch zwischen 0 und 100 bewegen?!


    Mit freundlichen Grüßen
    Fabian

  • Momentan beschäftige ich mich mit SOC und SOH. Meinen Recherchen zufolge ist SOC in der Antwort von PID: 0x2B Bit 0 geteilt durch 2 und SOH Bit 1 geteilt durch 2.


    Ja, das ist richtig.

    Was mir komisch vorkommt ist das ich einen SOC von 0 haben soll und einen SOH von 127.


    Bist du sicher, dass er sich kalibriert hat? Es darf dazu eine gewisse Zeit (?) kein Strom fließen.


    Gruß

  • @wolkenschaufler


    habe die Kalibrierung gestern Abend gestartet und keinen Verbraucher Bzw kein Ladegerät an der Batterie gehabt.


    Allerdings habe ich vorher wahrscheinlich den Kalibrierungsvorgang mehrfach neu gestartet durch das rumprobieren mit dem Batterietyp.


    Ich werde den Kalibrierungsvorgang heute noch einmal durchlaufen lassen und dann morgen früh nochmal schauen.

  • @wolkenschaufler


    das die 12 beim Batterietyp setzen im Response-Frame zurückgegeben wird taucht anscheinen nur bei dem Sensor 1 auf. Beim Sensor 2 wird der zuvor geschriebene Wert im Response zurückgeben laut deinem LOG.


    In deinen LOGs gibts es immer 3 Diagnostic-Frames (0x3c) : 3c 02 03 b5 39... -> Kapazität, 3c 02 03 b5 3a... -> Batterietyp, aber wozu ist das dritte -> 3c 02 06 b2 3a...???

    Knaus BoxStar Solution 2017 130PS Multijet, 260Watt Solar + DIY Hella IBS Batteriemonitor, AHK + Atera DL3

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!