Teilnehmermodus v1.0
Teilnehmermodus Protokoll Spezifikation v1.0 - BMS CAN LIN Kommunikation
Überblick - BMS Kommunikationsprotokoll für Entwickler
Das Teilnehmermodus Protokoll ist ein standardisiertes BMS Kommunikationsprotokoll für die Kommunikation mit SaftkistePRO Batteriemanagementsystemen mit Unterstützung für CAN-Bus und LIN-Bus Schnittstellen. Diese technische Spezifikation definiert die Nachrichtenstruktur, Signaldefinitionen und Implementierungsanforderungen für Entwickler, die Teilnehmermodus-kompatible BMS-Geräte integrieren möchten.
BMS Protokoll Features - CAN und LIN Bus
- Dual-Bus-Unterstützung: CAN 2.0B und LIN 2.1
- Umfassende BMS-Daten: Batteriestatus, Zellspannungen, Schutzfunktionen und Diagnose
- Standardisiertes Nachrichtenformat: Konsistent über alle Teilnehmermodus-Geräte
- Echtzeit-Überwachung: Kritische Daten mit 100ms Aktualisierungsraten
- Fehlererkennung: Integrierte Fehlerberichterstattung und Schutzmechanismen
CAN LIN Nachrichten-Übersicht - BMS Datenstruktur
| Nachricht | CAN ID | LIN ID | Länge | Update-Rate | Beschreibung |
|---|---|---|---|---|---|
| States | 0x770 | 0x10 | 8 Bytes | 100ms | Alle Boolean-Status-Flags |
| Parameters | 0x771 | 0x11 | 4 Bytes | 1000ms | Software-/Hardware-Versionen |
| Serial_Number_1 | 0x772 | 0x12 | 8 Bytes | 5000ms | Geräte-Seriennummer (Teil 1) |
| Serial_Number_2 | 0x773 | 0x13 | 8 Bytes | 5000ms | Geräte-Seriennummer (Teil 2) |
| General_Readings | 0x774 | 0x14 | 8 Bytes | 100ms | Spannung, Strom, Temperatur |
| Cell_Voltages | 0x775 | 0x15 | 8 Bytes | 100ms | Einzelne Zellspannungen |
| Capacity | 0x776 | 0x16 | 7 Bytes | 1000ms | SOC, SOH, Kapazitätsdaten |
| Cumulativ_Ah | 0x777 | 0x17 | 8 Bytes | 1000ms | Kumulierte Lade-/Entladung |
| Uptime | 0x778 | 0x18 | 8 Bytes | 10000ms | System-Laufzeitzähler |
| Time_To_Go | 0x779 | 0x19 | 4 Bytes | 1000ms | Geschätzte Restlaufzeit |
Nachrichten-Definitionen
States (0x770 / 0x10)
Zweck: Konsolidierte Boolean-Status-Flags für alle BMS-Zustände, Schutzfunktionen und Fehler.
Bit-Layout:
| Byte | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
|---|---|---|---|---|---|---|---|---|
| 0 | Any_Fault_Active | Any_Protection_Active | Force_Off_Pin_State | User_Main_Switch_State | Is_Heating | Is_Balancing | Is_Discharging | Is_Charging |
| 1 | High_Current_Charge_Prot | High_Cell_Voltage_Prot | Low_Cell_Voltage_Prot | Pre_Warning_Charge_Shutdown | Pre_Warning_Discharge_Shutdown | Low_SoC | Allowed_To_Discharge | Allowed_To_Charge |
| 2 | Switch_Fault | Low_Temperature_Discharge_Prot | Low_Temperature_Charge_Prot | High_Temperature_Discharge_Prot | High_Temperature_Charge_Prot | High_Current_Discharge_Prot | High_Current_Charge_Prot | Reserviert |
| 3 | Critical_Alert | Switch_Forced_Off | Shunt_Delta_Fault | Voltage_Delta_Fault | Temperature_Fault | Voltage_Fault | Switch_Fault | Reserviert |
| 4-7 | Reserviert (0x00) | |||||||
Signal-Definitionen:
-
Is_Charging: Batterie wird aktiv geladen -
Is_Discharging: Batterie wird aktiv entladen -
Is_Balancing: Zellbalancing ist aktiv -
Is_Heating: Batterieheizung ist aktiv -
Any_Protection_Active: Beliebiger Schutzmechanismus ist ausgelöst -
Any_Fault_Active: Beliebige Fehlerbedingung liegt vor -
Critical_Alert: Kritischer Systemfehler erfordert sofortige Aufmerksamkeit
Parameters (0x771 / 0x11)
Zweck: Software- und Hardware-Versionsinformationen.
Byte-Layout:
| Byte | Feld | Typ | Bereich |
|---|---|---|---|
| 0 | Software_Version_Major | 8-bit unsigned | 0-255 |
| 1 | Software_Version_Minor | 8-bit unsigned | 0-255 |
| 2 | Software_Version_Patch | 8-bit unsigned | 0-255 |
| 3 | Hardware_Version | 8-bit unsigned | 0-255 |
Serial_Number_1 & Serial_Number_2 (0x772-0x773 / 0x12-0x13)
Zweck: 16-stellige ASCII-Seriennummer-Identifikation.
Format: ASCII-Zeichen, null-terminiert wenn kürzer als 16 Zeichen.
General_Readings (0x774 / 0x14)
Zweck: Primäre Batteriemessungen.
Byte-Layout:
| Bytes | Feld | Typ | Einheit |
|---|---|---|---|
| 0-3 | Voltage | 32-bit unsigned, little-endian | mV |
| 4-5 | Current | 16-bit signed, little-endian | mA |
| 6-7 | Temperature | 16-bit unsigned, little-endian | 0,5°C |
Berechnungen:
- Spannung:
Rohwert * 1 mV -
Strom:
Rohwert * 1 mA(negativ = Entladung, positiv = Ladung) - Temperatur:
Rohwert * 0,5°C
Cell_Voltages (0x775 / 0x15)
Zweck: Überwachung einzelner Zellspannungen.
Byte-Layout:
| Bytes | Feld | Typ | Einheit |
|---|---|---|---|
| 0-1 | Cell1_Voltage | 16-bit unsigned, little-endian | mV |
| 2-3 | Cell2_Voltage | 16-bit unsigned, little-endian | mV |
| 4-5 | Cell3_Voltage | 16-bit unsigned, little-endian | mV |
| 6-7 | Cell4_Voltage | 16-bit unsigned, little-endian | mV |
Capacity (0x776 / 0x16)
Zweck: Batteriekapazität und Zustandsinformationen.
Byte-Layout:
| Bytes | Feld | Typ | Einheit |
|---|---|---|---|
| 0-1 | State_Of_Charge | 16-bit unsigned, little-endian | 0,5% |
| 2-3 | State_Of_Health | 16-bit unsigned, little-endian | 0,5% |
| 4-5 | Dischargeable_Capacity | 16-bit unsigned, little-endian | 0,1Ah |
| 6 | Nominal_Capacity | 8-bit unsigned | 2Ah |
Berechnungen:
- SOC:
Rohwert * 0,5%(Bereich: 0-100%) - SOH:
Rohwert * 0,5%(Bereich: 0-100%) - Entladbare Kapazität:
Rohwert * 0,1 Ah - Nennkapazität:
Rohwert * 2 Ah
Cumulativ_Ah (0x777 / 0x17)
Zweck: Lebensdauer-Energiezähler.
Byte-Layout:
| Bytes | Feld | Typ | Einheit |
|---|---|---|---|
| 0-3 | Cumulativ_Discharged_Ah | 32-bit unsigned, little-endian | Ah |
| 4-7 | Cumulativ_Charged_Ah | 32-bit unsigned, little-endian | Ah |
Uptime (0x778 / 0x18)
Zweck: System-Laufzeitverfolgung.
Byte-Layout:
| Bytes | Feld | Typ | Einheit |
|---|---|---|---|
| 0-3 | Uptime | 32-bit unsigned, little-endian | Sekunden |
| 4-7 | Uptime_Since_Last_Reset | 32-bit unsigned, little-endian | Sekunden |
Time_To_Go (0x779 / 0x19)
Zweck: Geschätzte verbleibende Laufzeit.
Byte-Layout:
| Bytes | Feld | Typ | Einheit |
|---|---|---|---|
| 0-3 | Time_To_Go | 32-bit unsigned, little-endian | Sekunden |
BMS Implementierungsanforderungen - CAN LIN Konfiguration
CAN-Bus-Konfiguration
- Protokoll: CAN 2.0B Standard Frame
- Baudrate: 500 kbps (empfohlen)
- Byte-Reihenfolge: Little Endian
- Knotenname: "Saftkiste"
LIN-Bus-Konfiguration
- Protokoll: LIN 2.1
- Baudrate: 19200 bps
- NAD: 0x01
- Produkt-ID: 0x1234, 0x5678
Timing-Anforderungen
- Kritische Nachrichten (States, General_Readings, Cell_Voltages): ≤ 100ms
- Status-Nachrichten (Capacity, Parameters): ≤ 1000ms
- Identifikations-Nachrichten (Serial Numbers, Uptime): ≤ 10000ms
Fehlerbehandlung
-
Überwachung der
Any_Fault_ActiveundCritical_AlertFlags - Implementierung von Timeout-Erkennung für fehlende Nachrichten
- Validierung der Datenbereiche gemäß Signaldefinitionen
BMS Code-Beispiele - CAN LIN Implementierung
CAN-Nachrichten-Parsing (C)
typedef struct {
uint8_t is_charging : 1;
uint8_t is_discharging : 1;
uint8_t is_balancing : 1;
uint8_t is_heating : 1;
uint8_t user_main_switch : 1;
uint8_t force_off_pin : 1;
uint8_t any_protection : 1;
uint8_t any_fault : 1;
} states_byte0_t;
void parse_states_message(uint8_t* data) {
states_byte0_t* states = (states_byte0_t*)&data[0];
if (states->any_fault) {
// Fehlerbedingung behandeln
}
if (states->any_protection) {
// Schutzfunktion behandeln
}
}
void parse_general_readings(uint8_t* data) {
uint32_t spannung_mv = *(uint32_t*)&data[0];
int16_t strom_ma = *(int16_t*)&data[4];
uint16_t temp_raw = *(uint16_t*)&data[6];
float temperatur_c = temp_raw * 0.5f;
printf("Spannung: %u mV, Strom: %d mA, Temp: %.1f°C\n",
spannung_mv, strom_ma, temperatur_c);
}
LIN-Schedule-Implementierung
// LIN Schedule-Tabelle
lin_frame_t schedule[] = {
{0x10, 10}, // States - 10ms
{0x14, 10}, // General_Readings - 10ms
{0x15, 10}, // Cell_Voltages - 10ms
{0x16, 100}, // Capacity - 100ms
{0x11, 1000}, // Parameters - 1000ms
};
Konformitätstests
Nachrichten-Validierung
- Überprüfung, dass alle Nachrichten-IDs übertragen werden
- Prüfung der Timing-Anforderungen
- Validierung der Datenbereiche und Skalierung
- Test der Fehler-Flag-Funktionalität
Integrations-Checkliste
Versions-Historie
| Version | Datum | Änderungen |
|---|---|---|
| 1.0 | 01.11.2025 | Erstveröffentlichung |
Kontakt: Für technischen Support und Protokoll-Updates wenden Sie sich an das Entwicklungsteam.