| [3] | 1 | /**
|
|---|
| 2 | ******************************************************************************
|
|---|
| 3 | * @file sysdata.h
|
|---|
| [11] | 4 | * @author ECS - Zed Kazharov
|
|---|
| [3] | 5 | * @version V1.0.0
|
|---|
| [11] | 6 | * @date 10-Feb-2023
|
|---|
| [3] | 7 | * @brief System Daten
|
|---|
| 8 | *
|
|---|
| 9 | * Beschreibung
|
|---|
| 10 | * enthält alle Systemdaten. Diese sind via modbus auslesbar und veränderbar
|
|---|
| 11 | *
|
|---|
| 12 | ******************************************************************************
|
|---|
| 13 | */
|
|---|
| 14 | #ifndef __SYSDATA_H
|
|---|
| 15 | #define __SYSDATA_H
|
|---|
| 16 |
|
|---|
| 17 |
|
|---|
| 18 | //--- INCLUDEs -----------------------------------------------------------------
|
|---|
| 19 | #include "main.h"
|
|---|
| 20 | #include "modbus.h"
|
|---|
| 21 |
|
|---|
| 22 | //--- GLOBALE TYPE DEFS --------------------------------------------------------
|
|---|
| 23 |
|
|---|
| 24 | // !!! Tabellenstruktur von LiPro1-x V2 als Vorlage !!!
|
|---|
| 25 | typedef struct __attribute__ ((__packed__))
|
|---|
| 26 | {
|
|---|
| 27 | //---- GERÄTE INFORMATIONEN ---
|
|---|
| 28 | uint16_t deviceTypeId; //0
|
|---|
| 29 | uint16_t reserved0; //1 Reserviert Alignement
|
|---|
| 30 | uint32_t deviceSn; //2-3 Seriennummer
|
|---|
| 31 | uint16_t fwMajor; //4 FW Versionsnummer
|
|---|
| 32 | uint16_t fwMinor; //5 FW Versionsnummer
|
|---|
| 33 | uint16_t fwRevision; //6 FW Versionsnummer
|
|---|
| 34 | uint16_t reserved1; //7 RESERVIERT
|
|---|
| 35 |
|
|---|
| 36 | //--- GERÄTE PARAMETER ALLGEMEIN ---
|
|---|
| 37 | uint32_t baudrate; //8-9 Baudraute
|
|---|
| 38 | uint16_t parityMode; //10 Parity Mode 101 = 'e' = even, 111 = 'o' = odd, 110 = 'n' = none, default even
|
|---|
| 39 | uint16_t stopBits; //11 Aktuell nicht ausgewert, automatische Auswahl nach Modbus standard abhängig vom Parity Mode
|
|---|
| 40 | uint16_t slaveAddress; //12 Slave Adresse
|
|---|
| 41 | uint16_t command; //13 Commnd
|
|---|
| 42 | uint16_t reserved2[6]; //14-19 RESERVIERT
|
|---|
| 43 |
|
|---|
| 44 | //--- GERÄTE PARAMETER GERÄTE SPEZIFISCH ---
|
|---|
| 45 | uint16_t ovpAlarm; //20 Gespeicherter Parameter: OVP Alarm Spannung in mV
|
|---|
| 46 | uint16_t lvpAlarm; //21 Gespeicherter Parameter: LVP Alarm Spannung in mV
|
|---|
| 47 | uint16_t ovpStart; //22 Gespeicherter Parameter: OVP Start Spannung in mV
|
|---|
| 48 | uint16_t ovpStop; //23 Gespeicherter Parameter: OVP Stopp Spannung in mV
|
|---|
| 49 | uint16_t lvpStart; //24 Gespeicherter Parameter: LVP Start Spannung in mV
|
|---|
| 50 | uint16_t lvpStop; //25 Gespeicherter Parameter: LVP Stopp Spannung in mV
|
|---|
| 51 | uint16_t vShutdownStart; //26 Gespeicherter Parameter: Unterspannungsabschaltung Start in mV
|
|---|
| 52 | uint16_t vShutdownStop; //27 Gespeicherter Parameter: Unterspannungsabschaltung Stopp in mV
|
|---|
| 53 | int16_t otShutdownStart; //28 Gespeicherter Parameter: Übertemperaturabschaltung Start in °C * 100
|
|---|
| 54 | int16_t otShutdownStop; //29 Gespeicherter Parameter: Übertemperaturabschaltung Stopp in °C * 100
|
|---|
| 55 | int16_t utpChargeStart; //30 Gespeicherter Parameter: Untertemperaturabschaltung Ladung Start in mV -- AB HIER NEUE PARAMETER ---
|
|---|
| 56 | int16_t utpChargeStop; //31 Gespeicherter Parameter: Untertemperaturabschaltung Ladung Stopp in mV
|
|---|
| 57 | int16_t utpDischargeStart; //32 Gespeicherter Parameter: Untertemperaturabschaltung Entladung Start in mV
|
|---|
| 58 | int16_t utpDischargeStop; //33 Gespeicherter Parameter: Untertemperaturabschaltung Entladung Stopp in mV
|
|---|
| 59 | uint16_t lvpTime; //34 Gespeicherter Parameter: LVP Verzögerung in s
|
|---|
| 60 | uint16_t defaultBalVoltage; //35 Gespeicherter Parameter: Ausgleichsspannung Defaultwert in mV. Wird verwendet wenn kein Mastergerät vorhanden ist
|
|---|
| 61 | int16_t refTemp; //36 Gespeicherter Parameter: Referenz Temperatur
|
|---|
| 62 | int16_t ovpAlarmTempco; //37 Gespeicherter Parameter: Temperaturkompensation OVP Alarmspannung in mV / °C
|
|---|
| 63 | int16_t lvpAlarmTempco; //38 Gespeicherter Parameter: Temperaturkompensation LVP ALarmspannung in mV / °C
|
|---|
| 64 | int16_t ovpStartTempco; //39 Gespeicherter Parameter: Temperaturkompensation OVP Startspannung in mV / °C
|
|---|
| 65 | int16_t ovpStopTempco; //40 Gespeicherter Parameter: Temperaturkompensation OVP Stoppspannung in mV / °C
|
|---|
| 66 | int16_t lvpStartTempco; //41 Gespeicherter Parameter: Temperaturkompensation LVP Startspannung in mV / °C
|
|---|
| 67 | int16_t lvpStopTempco; //42 Gespeicherter Parameter: Temperaturkompensation LVP Stoppspannung in mV / °C
|
|---|
| 68 | int16_t vShutdownStartTempco; //43 Gespeicherter Parameter: Temperaturkompensation Unterspannungsabschaltung Start in mV / °C
|
|---|
| 69 | int16_t vShutdownStopTempco; //44 Gespeicherter Parameter: Temperaturkompensation Unterspannungsabschaltung Stopp in mV / °C
|
|---|
| 70 | int16_t balancerVoltageTempco; //45 Gespeicherter Parameter: Temperaturkompensation Ausgleichsspannung (Standalone Mode) in mV / °C
|
|---|
| 71 | uint16_t balancerVoltageRemote; //46 Remote Setpoint Ausgleichsspannung, diese Register dient zur Steuerung der Balancerspannung von Mastergerät
|
|---|
| 72 | uint16_t writeLocked; //47 1= (Einige) Register sind geschützt, 0 = Kein Schutz vorhanden
|
|---|
| 73 | uint16_t keyAccepted; //48 1= lockKey is correct, gesperrte Register sind freigegeben zum beschreiben
|
|---|
| 74 | uint16_t lockKey; //49 EINGABE ENTSPERR CODE
|
|---|
| 75 | uint16_t newLockKey; //50 EINGABE NEUER Sperrcode
|
|---|
| 76 | uint16_t reserved3[49]; //51-99 RESERVIERT
|
|---|
| 77 |
|
|---|
| 78 | // --- AKTUELLE DATEN ab Adresse 100 ---
|
|---|
| 79 | uint16_t cellVoltage; //100 Zellspannung in mV
|
|---|
| 80 | int16_t cellTemperature; //101 Zelltemperatur
|
|---|
| 81 | int16_t balancerCurrent; //102 Aktueller Ausgleichsstrom in mA --> Neuer Istwert
|
|---|
| 82 | uint16_t otShutdown; //103 Übertemperatur Shutdown Status, 0 = AUS, 1 = AKTIV
|
|---|
| 83 | uint16_t utChargeShutdown; //104 Untertemperatur Ladung Shutdown Status, 0 = AUS, 1 = AKTIV
|
|---|
| 84 | uint16_t utDischargeShutdown; //105 Untertemperatur Entladung Shutdown Status, 0 = AUS, 1 = AKTIV
|
|---|
| 85 | uint16_t voltageShutdown; //106 Spannuns shutdown Status, 0 = AUS, 1 = AKTIV
|
|---|
| 86 | uint16_t lvpDelayCounter; //107 Zähler bis Abschaltung LVP in Sekunden, ACHTUNG, EINHEIT GEÄNDERT IN SEKUNDEN
|
|---|
| 87 | uint16_t balancerPower; //108 Nicht wirklich Power in Watt, sondern DAC Value von 0 bis MAX_DAC_VALUE, Achtung Bereich geändert
|
|---|
| 88 | uint16_t mode; //109 Modus 0 = Autmatisch. Modus 1 = Manuelle Steuerung über Register 12 möglich
|
|---|
| 89 | uint16_t lvpState; //110 Zustand Schaltausgang LVP, 0 = LVP aus, 1 = LVP aktiv (verzögert), 2 = LVP aktiv (unverzögert)
|
|---|
| 90 | uint16_t ovpState; //111 Zustand Schaltausgang OVP, 0 = OVP aus, 1 = LVP aktiv
|
|---|
| 91 | uint16_t maxVoltage; //112 Höchste Spannung seit letztem Reset
|
|---|
| 92 | uint16_t minVoltage; //113 Niedrigste Spannung seit letztem Reset
|
|---|
| 93 | int16_t maxTemperature; //114 Höchste Temperatur seit letztem Reset
|
|---|
| 94 | int16_t minTemperature; //115 Niedrigste Temperatur seit letztem Reset
|
|---|
| 95 |
|
|---|
| 96 | // --- AKTUELLE BERECHNETE PARAMTER ---
|
|---|
| 97 | uint16_t balancerVoltage; //116 Aktuelle Ausgleichsspannung
|
|---|
| 98 | uint16_t ovpAlarmComp; //117 OVP Alarmspannung Temperatur kompensiert
|
|---|
| 99 | uint16_t lvpAlarmComp; //118 LVP Alarmspannung Temperatur kompensiert
|
|---|
| 100 | uint16_t ovpStartComp; //119 OVP Startspannung Temperatur kompensiert
|
|---|
| 101 | uint16_t ovpStopComp; //120 OVP Stoppspannung Temperatur kompensiert
|
|---|
| 102 | uint16_t lvpStartComp; //121 LVP Startspannung Temperatur kompensiert
|
|---|
| 103 | uint16_t lvpStopComp; //122 LVP Stoppspannung Temperatur kompensiert
|
|---|
| 104 | uint16_t vShutdownStartComp; //123 Spannungsabschaltung Start Temperatur kompensiert
|
|---|
| 105 | uint16_t vShutdownStopComp; //124 Spannungsabschaltung Stopp Temperatur kompensiert
|
|---|
| 106 | uint16_t balancerVoltageComp; //125 Ausgleichsspannung Temperatur kompensiert (wenn im Standalone Mode)
|
|---|
| 107 | uint16_t masterMode; //126 Master modus dedektiert
|
|---|
| 108 | uint16_t converterError; //127 Fehler DC / DC Converter
|
|---|
| 109 |
|
|---|
| 110 | // --- weitere historische Daten
|
|---|
| 111 | uint16_t cycleCounter; //128
|
|---|
| 112 | uint16_t criticalUnderTempTime; //129
|
|---|
| 113 | uint16_t criticalOverTempTime; //130
|
|---|
| 114 | uint16_t criticalUnderVoltageTime; //131
|
|---|
| 115 | uint16_t criticalOverVoltageTime; //132
|
|---|
| 116 | uint16_t reserved6[17]; //133-149 RESERVIERT für weitere wichtige Daten
|
|---|
| 117 |
|
|---|
| 118 | // --- AKTUELLE BERECHNETE PARAMTER, Weniger Wichtig, für DEBUG Zwecke, normalerweise keine Übertragung notwendig ---
|
|---|
| 119 | uint16_t chargeTime; //150 Interner Debbug Wert: Ladezeit DC DC Converter
|
|---|
| 120 | uint16_t chargeTransferTime; //151 Interner Debbug Wert: Ladungstransfer Zeit DC DC Converter
|
|---|
| 121 | uint16_t sekVoltage; //152
|
|---|
| 122 | uint16_t SekHvErrorCounter; //153
|
|---|
| 123 | uint16_t SekLvErrorCounter; //154
|
|---|
| 124 | uint16_t cellVoltageUnfiltered; //155
|
|---|
| 125 | }sys_data_struct_t;
|
|---|
| 126 |
|
|---|
| 127 | typedef union sys_data_union
|
|---|
| 128 | {
|
|---|
| 129 | sys_data_struct_t s;
|
|---|
| 130 | bword_t mb[sizeof( sys_data_struct_t) /2];
|
|---|
| 131 | } sys_data_t;
|
|---|
| 132 |
|
|---|
| 133 |
|
|---|
| 134 | //--- GLOBALE DEFINES ----------------------------------------------------------
|
|---|
| [12] | 135 | #define CMD_NOCMD 0
|
|---|
| 136 | #define CMD_SAVE_PARAMETER_TO_EEPROM 1
|
|---|
| 137 | #define CMD_APPLY_MB_PARAMETER 2
|
|---|
| 138 | #define CMD_RESET_FACTORY 3
|
|---|
| 139 | #define CMD_RESET 4
|
|---|
| 140 | #define CMD_SAVE_LOCK_KEY 5
|
|---|
| 141 | #define CMD_RESET_COUNTERS 6
|
|---|
| 142 | #define CMD_RESET_MIN_MAX_VALUES 7
|
|---|
| 143 | #define CMD_DELAY 8
|
|---|
| 144 | #define CMD_SAVE_SN 12345
|
|---|
| [3] | 145 |
|
|---|
| 146 |
|
|---|
| 147 |
|
|---|
| 148 |
|
|---|
| 149 |
|
|---|
| 150 | #define MB_BAUDRATE_DEFAULT 19200 // bit pro sekunde
|
|---|
| 151 | #define MB_PARITY_MODE_DEFAULT 'e' // EVEN - GERADE
|
|---|
| 152 | #define MB_STOPBIT_MODE_DEFAULT 1
|
|---|
| 153 | #define MB_SLAVE_ADDRESS_DEFAULT 1
|
|---|
| 154 | #define MB_MASTER_MODE_DEFAULT 0
|
|---|
| 155 | #define MIN_VOLTAGE_DEFAULT 65535
|
|---|
| 156 | #define MAX_VOLTAGE_DEFAULT 0
|
|---|
| 157 | #define MIN_TEMPERATURE_DEFAULT 32767
|
|---|
| 158 | #define MAX_TEMPERATURE_DEFAULT -32767
|
|---|
| 159 |
|
|---|
| 160 |
|
|---|
| 161 |
|
|---|
| 162 | // ------ DEFAULT CELLPARAMETER ------
|
|---|
| 163 | #define OVP_ALARM_VOLTAGE_DEFAULT 3700 // [mV]
|
|---|
| 164 | #define LVP_ALARM_VOLTAGE_DEFAULT 2800 // [mV]
|
|---|
| 165 | #define OVP_START_VOLTAGE_DEFAULT 3650 // [mV]
|
|---|
| 166 | #define OVP_STOPP_VOLTAGE_DEFAULT 3600 // [mV]
|
|---|
| 167 | #define LVP_START_VOLTAGE_DEFAULT 2900 // [mV]
|
|---|
| 168 | #define LVP_STOPP_VOLTAGE_DEFAULT 3200 // [mV]
|
|---|
| 169 | #define BAL_VOLTAGE_DEFAULT 3600 // [mV] für 14,4 V Ladeschlussspannung
|
|---|
| 170 | #define VOLTAGE_SHUTDOWN_START_VOLTAGE_DEFAULT 2500 // [mV]
|
|---|
| 171 | #define VOLTAGE_SHUTDOWN_STOPP_VOLTAGE_DEFAULT 2600 // [mV]
|
|---|
| 172 | #define OVERTEMPPROTECTION_START_DEFAULT 500 // [°C *10]
|
|---|
| 173 | #define OVERTEMPPROTECTION_STOP_DEFAULT 450 // [°C *10]
|
|---|
| 174 | #define UNDERTEMPPROTECTION_CHARGE_START_DEFAULT 50 // [°C *10]
|
|---|
| 175 | #define UNDERTEMPPROTECTION_CHARGE_STOP_DEFAULT 70 // [°C *10]
|
|---|
| 176 | #define UNDERTEMPPROTECTION_DISCHARGE_START_DEFAULT -150 // [°C *10]
|
|---|
| 177 | #define UNDERTEMPPROTECTION_DISCHARGE_STOP_DEFAULT -100 // [°C *10]
|
|---|
| 178 | #define LVP_TIME_DEFAULT 600 // s
|
|---|
| 179 | #define BASIS_TEMP_DEFAULT 250 // 25°C
|
|---|
| 180 | #define OVP_ALARM_TEMPCO_DEFAULT 0 // [mV / °C]
|
|---|
| 181 | #define OVP_START_TEMPCO_DEFAULT 0 // [mV / °C]
|
|---|
| 182 | #define OVP_STOPP_TEMPCO_DEFAULT 0 // [mV / °C]
|
|---|
| 183 | #define LVP_ALARM_TEMPCO_DEFAULT 0 // [mV / °C]
|
|---|
| 184 | #define LVP_START_TEMPCO_DEFAULT 0 // [mV / °C]
|
|---|
| 185 | #define LVP_STOPP_TEMPCO_DEFAULT 0 // [mV / °C]
|
|---|
| 186 | #define V_SHUTDOWN_START_TEMPCO_DEFAULT 0 // [mV / °C]
|
|---|
| 187 | #define V_SHUTDOWN_STOPP_TEMPCO_DEFAULT 0 // [mV / °C]
|
|---|
| 188 | #define BAL_TEMPCO_DEFAULT 0 // [mV / °C]
|
|---|
| 189 |
|
|---|
| 190 |
|
|---|
| 191 | #define CONVERTER_ERROR_NONE 0
|
|---|
| 192 | #define CONVERTER_ERROR_OUTPUT_VOLT_TOO_HIGH 2
|
|---|
| 193 | #define CONVERTER_ERROR_OUTPUT_VOLT_TOO_LOW 3
|
|---|
| 194 | #define CONVERTER_ERROR_STARTUP_ERROR 4
|
|---|
| 195 |
|
|---|
| 196 |
|
|---|
| 197 | //--- GLOBALE VARIABLEN PROTOTYPEN ---------------------------------------------
|
|---|
| 198 | extern sys_data_t sysData;
|
|---|
| 199 |
|
|---|
| 200 |
|
|---|
| 201 | #define MIN_ADRESS 0
|
|---|
| 202 | #define MAX_ADRESS ((sizeof(sysData)/2)-1)
|
|---|
| 203 |
|
|---|
| 204 | extern accessMode_t accessModeTable[MAX_ADRESS+1];
|
|---|
| 205 |
|
|---|
| 206 |
|
|---|
| 207 | //--- GLOBALE FUNKTIONS PROTOTYPEN ---------------------------------------------
|
|---|
| 208 | void SYSDATA_Init(void);
|
|---|
| 209 |
|
|---|
| 210 |
|
|---|
| 211 |
|
|---|
| 212 |
|
|---|
| 213 | #endif
|
|---|