Re: Daly BMS kann nicht gelesen werden
Verfasst: Mi 19. Jan 2022, 21:27
Ulrich hat die Funktion Daly auslesen vermutlich nach den Vorgaben des Daly-Protokolls erstellt.
Dies passt soweit auch, jedoch wird dort eine max Anzahl (48) von Zellen verwendet.
In der Funktion "function eSmart3_auslesen" werden die ankommenden Daten auf Länge
geprüft. Da diese jedoch von den Zellen (BMS-Typ) abhängig sind, werden die Daten verworfen
wenn sie nicht der Prüfung "Datenlänge" entsprechen und eine Fehlermeldung generiert.
Die Antwort vom Daly-BMS ist immer 13 Byte. Ausgenommen sind die Zellspannungen.
siehe viewtopic.php?p=13012#p13012
Der Code muss so aussehen: kleinstes Ganzzahliges vielfaches von Zellen des BMS und 3.
genaue oder nächstgrößere Anzahl durch 3 teilbar.
10 Zellen /3 =3.333 -----> 4 (4*13)
16 Zellen /3 =5,333 ----> 6 (6*13)
24 Zellen /3 = 8 ------> ok 8 (8*13)
Dieser Wert wird dann mit 13 multipliziert und so eingetragen werden (XX)
Ulrich hätte sicherlich eine automatische Lösung als Vorschlag?
Gruß
Dies passt soweit auch, jedoch wird dort eine max Anzahl (48) von Zellen verwendet.
In der Funktion "function eSmart3_auslesen" werden die ankommenden Daten auf Länge
geprüft. Da diese jedoch von den Zellen (BMS-Typ) abhängig sind, werden die Daten verworfen
wenn sie nicht der Prüfung "Datenlänge" entsprechen und eine Fehlermeldung generiert.
Die Antwort vom Daly-BMS ist immer 13 Byte. Ausgenommen sind die Zellspannungen.
siehe viewtopic.php?p=13012#p13012
Der Code muss so aussehen: kleinstes Ganzzahliges vielfaches von Zellen des BMS und 3.
genaue oder nächstgrößere Anzahl durch 3 teilbar.
10 Zellen /3 =3.333 -----> 4 (4*13)
16 Zellen /3 =5,333 ----> 6 (6*13)
24 Zellen /3 = 8 ------> ok 8 (8*13)
Dieser Wert wird dann mit 13 multipliziert und so eingetragen werden (XX)
Code: Alles auswählen
elseif (strlen( $Ergebnis ) == XX) { // Hier muß XX eingetragen werden
1-3 $Ergebnis1 = substr( $Ergebnis, 4, 8 ); so viele Zeilen wie laut Rechnung (16Zellen ---> 6Zeilen)
4-6 $Ergebnis1 .= substr( $Ergebnis, 17, 8 );
7-9 $Ergebnis1 .= substr( $Ergebnis, 30, 8 );
10-12 $Ergebnis1 .= substr( $Ergebnis, 43, 8 );
..... $Ergebnis1 .= substr( $Ergebnis, 56, 8 );
..... $Ergebnis1 .= substr( $Ergebnis, 82, 8 );
immer fortlaufend , mit einer Folge von 13
$Dauer = 0; // Ausgang vorbereiten..
$OK = true;
$Ergebnis = $Ergebnis1;
}
Gruß