80 .lastRedundancy0CellVoltageTimestamp = 0u,
81 .lastBaseCelltemperatureTimestamp = 0u,
82 .lastRedundancy0CelltemperatureTimestamp = 0u,
83 .lastStringCurrentTimestamp = {0u},
106 uint32_t previousTimestamp,
107 uint32_t timeInterval);
245 if (!((timestamp == 0u) && (previousTimestamp == 0u))) {
256 uint32_t previousTimestamp,
257 uint32_t timeInterval) {
263 if (((currentTimestamp - timestamp) <= timeInterval) &&
278 bool updatedValidatedVoltageDatbaseEntry =
false;
280 bool baseCellVoltageUpdated =
false;
282 bool useCellVoltageRedundancy =
false;
283 bool baseCellVoltageMeasurementTimeoutReached =
true;
284 bool redundancy0CellVoltageMeasurementTimeoutReached =
true;
301 baseCellVoltageMeasurementTimeoutReached =
false;
304 baseCellVoltageMeasurementTimeoutReached =
true;
311 baseCellVoltageUpdated =
true;
313 baseCellVoltageUpdated =
false;
319 (useCellVoltageRedundancy ==
true)) {
320 redundancy0CellVoltageMeasurementTimeoutReached =
true;
324 redundancy0CellVoltageMeasurementTimeoutReached =
false;
329 if (useCellVoltageRedundancy ==
true) {
330 bool redundany0CellVoltageUpdated =
false;
333 redundany0CellVoltageUpdated =
true;
335 redundany0CellVoltageUpdated =
false;
338 if ((baseCellVoltageUpdated ==
true) && (redundany0CellVoltageUpdated ==
true)) {
346 updatedValidatedVoltageDatbaseEntry =
true;
347 }
else if ((baseCellVoltageUpdated ==
true) || (redundany0CellVoltageUpdated ==
true)) {
349 if (baseCellVoltageUpdated ==
true) {
351 if (redundancy0CellVoltageMeasurementTimeoutReached ==
true) {
355 updatedValidatedVoltageDatbaseEntry =
true;
357 }
else if (redundany0CellVoltageUpdated ==
true) {
359 if (baseCellVoltageMeasurementTimeoutReached ==
true) {
363 updatedValidatedVoltageDatbaseEntry =
true;
372 if (baseCellVoltageUpdated ==
true) {
381 updatedValidatedVoltageDatbaseEntry =
true;
385 if (updatedValidatedVoltageDatbaseEntry ==
true) {
396 return updatedValidatedVoltageDatbaseEntry;
405 bool baseCelltemperatureUpdated =
false;
406 bool useCelltemperatureRedundancy =
false;
407 bool updatedValidatedTemperatureDatbaseEntry =
false;
409 bool baseCellTemperatureMeasurementTimeoutReached =
true;
410 bool redundancy0CellTemperatureMeasurementTimeoutReached =
true;
427 baseCellTemperatureMeasurementTimeoutReached =
false;
430 baseCellTemperatureMeasurementTimeoutReached =
true;
436 baseCelltemperatureUpdated =
true;
438 baseCelltemperatureUpdated =
false;
444 (useCelltemperatureRedundancy ==
true)) {
445 redundancy0CellTemperatureMeasurementTimeoutReached =
true;
450 redundancy0CellTemperatureMeasurementTimeoutReached =
false;
455 if (useCelltemperatureRedundancy ==
true) {
456 bool redundancy0CelltemperatureUpdated =
false;
459 redundancy0CelltemperatureUpdated =
true;
461 redundancy0CelltemperatureUpdated =
false;
464 if ((baseCelltemperatureUpdated ==
true) && (redundancy0CelltemperatureUpdated ==
true)) {
472 updatedValidatedTemperatureDatbaseEntry =
true;
473 }
else if ((baseCelltemperatureUpdated ==
true) || (redundancy0CelltemperatureUpdated ==
true)) {
475 if (baseCelltemperatureUpdated ==
true) {
477 if (redundancy0CellTemperatureMeasurementTimeoutReached ==
true) {
481 updatedValidatedTemperatureDatbaseEntry =
true;
483 }
else if (redundancy0CelltemperatureUpdated ==
true) {
485 if (baseCellTemperatureMeasurementTimeoutReached ==
true) {
489 updatedValidatedTemperatureDatbaseEntry =
true;
498 if (baseCelltemperatureUpdated ==
true) {
507 updatedValidatedTemperatureDatbaseEntry =
true;
511 if (updatedValidatedTemperatureDatbaseEntry ==
true) {
522 return updatedValidatedTemperatureDatbaseEntry;
527 int32_t packCurrent_mA = 0;
541 if (noTimeout ==
STD_OK) {
599 if (voltagePlausible ==
STD_OK) {
621 uint16_t numberInvalidCellVoltages =
640 int64_t sumOfStringValues_mV = 0;
641 int8_t numberOfValidStringVoltages = 0;
644 if (0u != numberOfConnectedStrings) {
651 numberOfValidStringVoltages++;
661 numberOfValidStringVoltages++;
668 if (0 != numberOfValidStringVoltages) {
683 uint8_t validVoltages = 0u;
694 if (((stringPrecharging ==
true) || (stringClosed ==
true)) && (updatedMeasurement ==
STD_OK)) {
704 if (validVoltages > 0u) {
715 bool calculatePower =
false;
716 int32_t packPower_W = 0;
729 if (noTimeout ==
STD_OK) {
739 calculatePower =
true;
747 calculatePower =
true;
753 int64_t stringPower_W =
783 uint16_t nrValidCellVoltages = 0u;
784 int16_t min = INT16_MAX;
785 int16_t max = INT16_MIN;
787 uint16_t moduleNumberMinimum = 0u;
788 uint16_t cellNumberMinimum = 0u;
789 uint16_t moduleNumberMaximum = 0u;
790 uint16_t cellNumberMaximum = 0u;
796 nrValidCellVoltages++;
801 moduleNumberMinimum = m;
802 cellNumberMinimum = c;
806 moduleNumberMaximum = m;
807 cellNumberMaximum = c;
821 if (nrValidCellVoltages > 0u) {
841 uint16_t moduleNumberMinimum = 0u;
842 uint16_t sensorNumberMinimum = 0u;
843 uint16_t moduleNumberMaximum = 0u;
844 uint16_t sensorNumberMaximum = 0u;
845 uint16_t nrValidCelltemperatures = 0u;
846 int16_t min = INT16_MAX;
847 int16_t max = INT16_MIN;
848 float sum_ddegC = 0.0f;
854 nrValidCelltemperatures++;
855 sum_ddegC += (float)pValidatedTemperatures
860 min = pValidatedTemperatures
862 moduleNumberMinimum = m;
863 sensorNumberMinimum = c;
867 max = pValidatedTemperatures
869 moduleNumberMaximum = m;
870 sensorNumberMaximum = c;
884 if (nrValidCelltemperatures > 0u) {
903 uint16_t numberValidMeasurements = 0u;
923 numberValidMeasurements++;
939 numberValidMeasurements++;
948 numberValidMeasurements++;
966 numberValidMeasurements = 0u;
969 noPlausibilityIssueDetected =
STD_OK;
984 *pValidatedVoltages = *pCellVoltage;
986 pValidatedVoltages->
header = tmpHeader;
1000 uint16_t numberValidMeasurements = 0u;
1014 pCelltemperatureRedundancy0
1016 &pValidatedTemperatures
1021 numberValidMeasurements++;
1036 numberValidMeasurements++;
1040 pCelltemperatureRedundancy0
1045 numberValidMeasurements++;
1051 pCelltemperatureRedundancy0
1062 numberValidMeasurements = 0u;
1065 noPlausibilityIssueDetected =
STD_OK;
1081 *pValidatedTemperature = *pCellTemperature;
1083 pValidatedTemperature->
header = tmpHeader;
1128 &mrc_tableCellVoltageBase,
1129 &mrc_tableCellVoltageRedundancy0,
1130 &mrc_tableCelltemperatureBase,
1131 &mrc_tableCelltemperatureRedundancy0);
1134 bool updateCellVoltages =
1138 bool updateCellTemperatures =
1142 if ((updateCellVoltages ==
true) && (updateCellTemperatures ==
true)) {
1144 }
else if (updateCellVoltages ==
true) {
1146 }
else if (updateCellTemperatures ==
true) {
1172 #ifdef UNITY_UNIT_TEST
1178 uint32_t previousTimestamp,
1179 uint32_t timeInterval) {
#define BS_NR_OF_CELL_BLOCKS_PER_MODULE
number of cells per module
#define BS_NR_OF_STRINGS
Number of parallel strings in the battery pack.
#define BS_NR_OF_TEMP_SENSORS_PER_MODULE
number of temperature sensors per battery module
#define BS_NR_OF_CELL_BLOCKS_PER_STRING
#define BS_NR_OF_MODULES_PER_STRING
number of modules in a string
bool BMS_IsStringPrecharging(uint8_t stringNumber)
Returns if string is currently precharging or not.
uint8_t BMS_GetNumberOfConnectedStrings(void)
Returns number of connected strings.
bool BMS_IsStringClosed(uint8_t stringNumber)
Returns string state (closed or open)
#define DATA_READ_DATA(...)
#define DATA_WRITE_DATA(...)
@ DATA_BLOCK_ID_CELL_VOLTAGE_REDUNDANCY0
@ DATA_BLOCK_ID_CELL_VOLTAGE
@ DATA_BLOCK_ID_CELL_TEMPERATURE_REDUNDANCY0
@ DATA_BLOCK_ID_CELL_TEMPERATURE_BASE
@ DATA_BLOCK_ID_CURRENT_SENSOR
@ DATA_BLOCK_ID_CELL_VOLTAGE_BASE
@ DATA_BLOCK_ID_PACK_VALUES
@ DATA_BLOCK_ID_CELL_TEMPERATURE
bool DATA_DatabaseEntryUpdatedAtLeastOnce(DATA_BLOCK_HEADER_s dataBlockHeader)
Checks if passed database entry has been updated at least once.
bool DATA_EntryUpdatedWithinInterval(DATA_BLOCK_HEADER_s dataBlockHeader, uint32_t timeInterval)
Checks if passed database entry has been updated within the last time interval.
STD_RETURN_TYPE_e DIAG_CheckEvent(STD_RETURN_TYPE_e cond, DIAG_ID_e diagId, DIAG_IMPACT_LEVEL_e impact, uint32_t data)
DIAG_CheckEvent provides a simple interface to check an event for STD_OK.
DIAG_RETURNTYPE_e DIAG_Handler(DIAG_ID_e diagId, DIAG_EVENT_e event, DIAG_IMPACT_LEVEL_e impact, uint32_t data)
DIAG_Handler provides generic error handling, based on diagnosis group.
@ DIAG_ID_POWER_MEASUREMENT_ERROR
@ DIAG_ID_CURRENT_MEASUREMENT_TIMEOUT
@ DIAG_ID_BASE_CELL_TEMPERATURE_MEASUREMENT_TIMEOUT
@ DIAG_ID_PLAUSIBILITY_PACK_VOLTAGE
@ DIAG_ID_PLAUSIBILITY_CELL_VOLTAGE
@ DIAG_ID_PLAUSIBILITY_CELL_TEMP
@ DIAG_ID_CURRENT_SENSOR_POWER_MEASUREMENT_TIMEOUT
@ DIAG_ID_BASE_CELL_VOLTAGE_MEASUREMENT_TIMEOUT
@ DIAG_ID_CURRENT_SENSOR_V1_MEASUREMENT_TIMEOUT
@ DIAG_ID_CURRENT_SENSOR_V3_MEASUREMENT_TIMEOUT
@ DIAG_ID_REDUNDANCY0_CELL_VOLTAGE_MEASUREMENT_TIMEOUT
@ DIAG_ID_CURRENT_MEASUREMENT_ERROR
@ DIAG_ID_REDUNDANCY0_CELL_TEMPERATURE_MEASUREMENT_TIMEOUT
#define FAS_ASSERT(x)
Assertion macro that asserts that x is true.
#define FAS_TRAP
Define that evaluates to essential boolean false thus tripping an assert.
math library for often used math functions
#define UNIT_CONVERSION_FACTOR_1000_INTEGER
#define NULL_PTR
Null pointer.
Declaration of the OS wrapper interface.
uint32_t OS_GetTickCount(void)
Returns OS based system tick value.
STD_RETURN_TYPE_e PL_CheckTemperatureSpread(DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperatures, DATA_BLOCK_MIN_MAX_s *pMinMaxAverageValues)
Cell temperature spread plausibility check.
STD_RETURN_TYPE_e PL_CheckCelltemperature(int16_t baseCelltemperature, int16_t redundancy0Celltemperature, int16_t *pCelltemperature)
Cell temperature plausibility check between two redundant cell temperature measurement values.
STD_RETURN_TYPE_e PL_CheckStringVoltage(int32_t voltageAfe_mV, int32_t voltageCurrentSensor_mV)
Pack voltage plausibility check between LTC and current sensor values.
STD_RETURN_TYPE_e PL_CheckCellVoltage(int16_t baseCellVoltage, int16_t redundancy0CellVoltage, int16_t *pCellVoltage)
Cell voltage plausibility check between two redundant cell voltage measurement values.
STD_RETURN_TYPE_e PL_CheckVoltageSpread(DATA_BLOCK_CELL_VOLTAGE_s *pCellVoltages, DATA_BLOCK_MIN_MAX_s *pMinMaxAverageValues)
Cell voltage spread plausibility check.
plausibility checks for cell voltage and cell temperatures
static DATA_BLOCK_CELL_TEMPERATURE_s mrc_tableCellTemperatures
static DATA_BLOCK_CELL_VOLTAGE_s mrc_tableCellVoltages
bool TEST_MRC_ValidateCellVoltageMeasurement(DATA_BLOCK_CELL_VOLTAGE_s *pCellVoltageBase, DATA_BLOCK_CELL_VOLTAGE_s *pCellVoltageRedundancy0)
static STD_RETURN_TYPE_e MRC_UpdateCellVoltageValidation(DATA_BLOCK_CELL_VOLTAGE_s *pCellVoltage, DATA_BLOCK_CELL_VOLTAGE_s *pValidatedVoltages)
Function updates validated cell voltage measurement with data from a single measurement source....
static DATA_BLOCK_MIN_MAX_s mrc_tableMinimumMaximumValues
static void MRC_ValidatePowerMeasurement(DATA_BLOCK_CURRENT_SENSOR_s *pTableCurrentSensor)
Function to validate results of power measurement.
static STD_RETURN_TYPE_e MRC_ValidateCellVoltage(DATA_BLOCK_CELL_VOLTAGE_s *pCellVoltageBase, DATA_BLOCK_CELL_VOLTAGE_s *pCellVoltageRedundancy0, DATA_BLOCK_CELL_VOLTAGE_s *pValidatedVoltages)
Function compares cell voltage measurements from base measurement with one redundant measurement and ...
static void MRC_ValidateStringVoltageMeasurement(DATA_BLOCK_CURRENT_SENSOR_s *pTableCurrentSensor, DATA_BLOCK_CELL_VOLTAGE_s *pTableCellVoltage)
Function to validate results of string voltage measurement.
STD_RETURN_TYPE_e TEST_MRC_CalculateCellTemperatureMinMaxAverage(DATA_BLOCK_CELL_TEMPERATURE_s *pValidatedTemperatures, DATA_BLOCK_MIN_MAX_s *pMinMaxAverageValues)
STD_RETURN_TYPE_e MRC_Initialize(void)
Function to initalize redundancy module.
bool TEST_MRC_ValidateCellTemperatureMeasurement(DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperatureBase, DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperatureRedundancy0)
static void MRC_ValidateHighVoltageBusMeasurement(DATA_BLOCK_CURRENT_SENSOR_s *pTableCurrentSensor)
Function to validate results of high voltage measurement and calculate battery voltage and high volta...
STD_RETURN_TYPE_e TEST_MRC_CalculateCellVoltageMinMaxAverage(DATA_BLOCK_CELL_VOLTAGE_s *pValidatedVoltages, DATA_BLOCK_MIN_MAX_s *pMinMaxAverageValues)
void TEST_MRC_ValidateBatteryVoltageMeasurement(void)
static DATA_BLOCK_PACK_VALUES_s mrc_tablePackValues
void TEST_MRC_ValidatePowerMeasurement(DATA_BLOCK_CURRENT_SENSOR_s *pTableCurrentSensor)
STD_RETURN_TYPE_e TEST_MRC_UpdateCellTemperatureValidation(DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperature, DATA_BLOCK_CELL_TEMPERATURE_s *pValidatedTemperature)
static bool MRC_ValidateCellTemperatureMeasurement(DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperatureBase, DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperatureRedundancy0)
Function to validate results of cell temperature measurement.
bool TEST_MRC_MeasurementUpdatedAtLeastOnce(uint32_t timestamp, uint32_t previousTimestamp)
static void MRC_ValidateCurrentMeasurement(DATA_BLOCK_CURRENT_SENSOR_s *pTableCurrentSensor)
Function to validate results of current measurement.
void TEST_MRC_ValidateStringVoltageMeasurement(DATA_BLOCK_CURRENT_SENSOR_s *pTableCurrentSensor, DATA_BLOCK_CELL_VOLTAGE_s *pTableCellVoltage)
static bool MRC_MeasurementUpdatedAtLeastOnce(uint32_t timestamp, uint32_t previousTimestamp)
Check timestamp if measurement has been updated at least once.
STD_RETURN_TYPE_e MRC_ValidateAfeMeasurement(void)
Function to validate the measurement between redundant measurement values for cell voltage and cell t...
STD_RETURN_TYPE_e TEST_MRC_ValidateCellTemperature(DATA_BLOCK_CELL_TEMPERATURE_s *pCelltemperatureBase, DATA_BLOCK_CELL_TEMPERATURE_s *pCelltemperatureRedundancy0, DATA_BLOCK_CELL_TEMPERATURE_s *pValidatedTemperatures)
void TEST_MRC_ValidateCurrentMeasurement(DATA_BLOCK_CURRENT_SENSOR_s *pTableCurrentSensor)
STD_RETURN_TYPE_e MRC_ValidatePackMeasurement(void)
Function to validate the measurements of pack values (string values, pack values)
STD_RETURN_TYPE_e TEST_MRC_UpdateCellVoltageValidation(DATA_BLOCK_CELL_VOLTAGE_s *pCellVoltage, DATA_BLOCK_CELL_VOLTAGE_s *pValidatedVoltages)
STD_RETURN_TYPE_e TEST_MRC_MeasurementUpdatedRecently(uint32_t timestamp, uint32_t previousTimestamp, uint32_t timeInterval)
static STD_RETURN_TYPE_e MRC_CalculateCellVoltageMinMaxAverage(const DATA_BLOCK_CELL_VOLTAGE_s *const pValidatedVoltages, DATA_BLOCK_MIN_MAX_s *pMinMaxAverageValues)
Function calculates minimum, maximum and average cell voltages.
static STD_RETURN_TYPE_e MRC_UpdateCellTemperatureValidation(DATA_BLOCK_CELL_TEMPERATURE_s *pCellTemperature, DATA_BLOCK_CELL_TEMPERATURE_s *pValidatedTemperature)
Function updates validated cell temperature measurement with data from a single measurement source....
static STD_RETURN_TYPE_e MRC_ValidateCellTemperature(DATA_BLOCK_CELL_TEMPERATURE_s *pCelltemperatureBase, DATA_BLOCK_CELL_TEMPERATURE_s *pCelltemperatureRedundancy0, DATA_BLOCK_CELL_TEMPERATURE_s *pValidatedTemperatures)
Function compares cell temperature measurements from base measurement with one redundant measurement ...
STD_RETURN_TYPE_e TEST_MRC_ValidateCellVoltage(DATA_BLOCK_CELL_VOLTAGE_s *pCellVoltageBase, DATA_BLOCK_CELL_VOLTAGE_s *pCellVoltageRedundancy0, DATA_BLOCK_CELL_VOLTAGE_s *pValidatedVoltages)
static MRC_STATE_s mrc_state
static STD_RETURN_TYPE_e MRC_CalculateCellTemperatureMinMaxAverage(DATA_BLOCK_CELL_TEMPERATURE_s *pValidatedTemperatures, DATA_BLOCK_MIN_MAX_s *pMinMaxAverageValues)
Function calculates minimum, maximum and average cell temperatures.
static void MRC_ValidateBatteryVoltageMeasurement(void)
Function to validate HV battery voltage measurement.
static bool MRC_ValidateCellVoltageMeasurement(DATA_BLOCK_CELL_VOLTAGE_s *pCellVoltageBase, DATA_BLOCK_CELL_VOLTAGE_s *pCellVoltageRedundancy0)
Function to validate results of cell voltage measurement.
static STD_RETURN_TYPE_e MRC_MeasurementUpdatedRecently(uint32_t timestamp, uint32_t previousTimestamp, uint32_t timeInterval)
Check timestamp if measurement has been updated recently.
void TEST_MRC_ValidateHighVoltageMeasurement(DATA_BLOCK_CURRENT_SENSOR_s *pTableCurrentSensor)
Header fileS for handling redundancy between redundant cell voltage and cell temperature measurements...
#define MRC_ALLOWED_NUMBER_OF_INVALID_CELL_VOLTAGES
#define MRC_CURRENT_MEASUREMENT_PERIOD_TIMEOUT_ms
#define MRC_CURRENT_SENSOR_MEASUREMENT_TIMEOUT_ms
#define MRC_AFE_MEASUREMENT_PERIOD_TIMEOUT_ms
DATA_BLOCK_HEADER_s header
int16_t cellTemperature_ddegC[BS_NR_OF_STRINGS][BS_NR_OF_TEMP_SENSORS_PER_STRING]
uint16_t nrValidTemperatures[BS_NR_OF_STRINGS]
uint16_t invalidCellTemperature[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]
int32_t packVoltage_mV[BS_NR_OF_STRINGS]
bool validModuleVoltage[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]
DATA_BLOCK_HEADER_s header
uint64_t invalidCellVoltage[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]
uint16_t nrValidCellVoltages[BS_NR_OF_STRINGS]
int16_t cellVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_CELL_BLOCKS_PER_STRING]
uint32_t previousTimestampCurrent[BS_NR_OF_STRINGS]
uint32_t timestampCurrent[BS_NR_OF_STRINGS]
uint32_t previousTimestampHighVoltage[BS_NR_OF_STRINGS][BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]
int32_t current_mA[BS_NR_OF_STRINGS]
uint32_t timestampHighVoltage[BS_NR_OF_STRINGS][BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]
uint32_t previousTimestampPower[BS_NR_OF_STRINGS]
DATA_BLOCK_HEADER_s header
uint32_t timestampPower[BS_NR_OF_STRINGS]
int32_t highVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]
uint8_t invalidCurrentMeasurement[BS_NR_OF_STRINGS]
uint8_t invalidHighVoltageMeasurement[BS_NR_OF_STRINGS][BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]
int32_t power_W[BS_NR_OF_STRINGS]
uint8_t invalidPowerMeasurement[BS_NR_OF_STRINGS]
int16_t minimumTemperature_ddegC[BS_NR_OF_STRINGS]
uint16_t nrSensorMinimumTemperature[BS_NR_OF_STRINGS]
uint16_t nrModuleMinimumTemperature[BS_NR_OF_STRINGS]
uint16_t nrModuleMaximumTemperature[BS_NR_OF_STRINGS]
int16_t maximumTemperature_ddegC[BS_NR_OF_STRINGS]
int16_t averageCellVoltage_mV[BS_NR_OF_STRINGS]
uint16_t nrSensorMaximumTemperature[BS_NR_OF_STRINGS]
uint16_t validMeasuredCellVoltages[BS_NR_OF_STRINGS]
float averageTemperature_ddegC[BS_NR_OF_STRINGS]
uint16_t validMeasuredCellTemperatures[BS_NR_OF_STRINGS]
uint16_t nrCellMaximumCellVoltage[BS_NR_OF_STRINGS]
uint16_t nrCellMinimumCellVoltage[BS_NR_OF_STRINGS]
DATA_BLOCK_HEADER_s header
uint16_t nrModuleMinimumCellVoltage[BS_NR_OF_STRINGS]
uint16_t nrModuleMaximumCellVoltage[BS_NR_OF_STRINGS]
int16_t maximumCellVoltage_mV[BS_NR_OF_STRINGS]
int16_t minimumCellVoltage_mV[BS_NR_OF_STRINGS]
int32_t stringVoltage_mV[BS_NR_OF_STRINGS]
int32_t highVoltageBusVoltage_mV
uint8_t invalidBatteryVoltage
int32_t stringPower_W[BS_NR_OF_STRINGS]
uint8_t invalidStringPower[BS_NR_OF_STRINGS]
uint8_t invalidPackCurrent
int32_t batteryVoltage_mV
DATA_BLOCK_HEADER_s header
int32_t stringCurrent_mA[BS_NR_OF_STRINGS]
uint8_t invalidHvBusVoltage
uint8_t invalidStringCurrent[BS_NR_OF_STRINGS]
uint8_t invalidStringVoltage[BS_NR_OF_STRINGS]
uint32_t lastBaseCelltemperatureTimestamp
uint32_t lastStringCurrentTimestamp[BS_NR_OF_STRINGS]
uint32_t lastRedundancy0CelltemperatureTimestamp
uint32_t lastRedundancy0CellVoltageTimestamp
uint32_t lastStringPowerTimestamp[BS_NR_OF_STRINGS]
uint32_t lastBaseCellVoltageTimestamp