84 .lastRedundancy0CellVoltageTimestamp = 0u,
85 .lastBaseCelltemperatureTimestamp = 0u,
86 .lastRedundancy0CelltemperatureTimestamp = 0u,
87 .lastStringCurrentTimestamp = {0u},
110 uint32_t previousTimestamp,
111 uint32_t timeInterval);
249 if (!((timestamp == 0u) && (previousTimestamp == 0u))) {
260 uint32_t previousTimestamp,
261 uint32_t timeInterval) {
267 if (((currentTimestamp - timestamp) <= timeInterval) &&
282 bool updatedValidatedVoltageDatbaseEntry =
false;
284 bool baseCellVoltageUpdated =
false;
286 bool useCellVoltageRedundancy =
false;
287 bool baseCellVoltageMeasurementTimeoutReached =
true;
288 bool redundancy0CellVoltageMeasurementTimeoutReached =
true;
305 baseCellVoltageMeasurementTimeoutReached =
false;
308 baseCellVoltageMeasurementTimeoutReached =
true;
315 baseCellVoltageUpdated =
true;
317 baseCellVoltageUpdated =
false;
323 (useCellVoltageRedundancy ==
true)) {
324 redundancy0CellVoltageMeasurementTimeoutReached =
true;
328 redundancy0CellVoltageMeasurementTimeoutReached =
false;
333 if (useCellVoltageRedundancy ==
true) {
334 bool redundany0CellVoltageUpdated =
false;
337 redundany0CellVoltageUpdated =
true;
339 redundany0CellVoltageUpdated =
false;
342 if ((baseCellVoltageUpdated ==
true) && (redundany0CellVoltageUpdated ==
true)) {
350 updatedValidatedVoltageDatbaseEntry =
true;
351 }
else if ((baseCellVoltageUpdated ==
true) || (redundany0CellVoltageUpdated ==
true)) {
353 if (baseCellVoltageUpdated ==
true) {
355 if (redundancy0CellVoltageMeasurementTimeoutReached ==
true) {
359 updatedValidatedVoltageDatbaseEntry =
true;
361 }
else if (redundany0CellVoltageUpdated ==
true) {
363 if (baseCellVoltageMeasurementTimeoutReached ==
true) {
367 updatedValidatedVoltageDatbaseEntry =
true;
376 if (baseCellVoltageUpdated ==
true) {
385 updatedValidatedVoltageDatbaseEntry =
true;
389 if (updatedValidatedVoltageDatbaseEntry ==
true) {
400 return updatedValidatedVoltageDatbaseEntry;
409 bool baseCelltemperatureUpdated =
false;
410 bool useCelltemperatureRedundancy =
false;
411 bool updatedValidatedTemperatureDatbaseEntry =
false;
413 bool baseCellTemperatureMeasurementTimeoutReached =
true;
414 bool redundancy0CellTemperatureMeasurementTimeoutReached =
true;
431 baseCellTemperatureMeasurementTimeoutReached =
false;
434 baseCellTemperatureMeasurementTimeoutReached =
true;
440 baseCelltemperatureUpdated =
true;
442 baseCelltemperatureUpdated =
false;
448 (useCelltemperatureRedundancy ==
true)) {
449 redundancy0CellTemperatureMeasurementTimeoutReached =
true;
454 redundancy0CellTemperatureMeasurementTimeoutReached =
false;
459 if (useCelltemperatureRedundancy ==
true) {
460 bool redundancy0CelltemperatureUpdated =
false;
463 redundancy0CelltemperatureUpdated =
true;
465 redundancy0CelltemperatureUpdated =
false;
468 if ((baseCelltemperatureUpdated ==
true) && (redundancy0CelltemperatureUpdated ==
true)) {
476 updatedValidatedTemperatureDatbaseEntry =
true;
477 }
else if ((baseCelltemperatureUpdated ==
true) || (redundancy0CelltemperatureUpdated ==
true)) {
479 if (baseCelltemperatureUpdated ==
true) {
481 if (redundancy0CellTemperatureMeasurementTimeoutReached ==
true) {
485 updatedValidatedTemperatureDatbaseEntry =
true;
487 }
else if (redundancy0CelltemperatureUpdated ==
true) {
489 if (baseCellTemperatureMeasurementTimeoutReached ==
true) {
493 updatedValidatedTemperatureDatbaseEntry =
true;
502 if (baseCelltemperatureUpdated ==
true) {
511 updatedValidatedTemperatureDatbaseEntry =
true;
515 if (updatedValidatedTemperatureDatbaseEntry ==
true) {
526 return updatedValidatedTemperatureDatbaseEntry;
531 int32_t packCurrent_mA = 0;
545 if (noTimeout ==
STD_OK) {
603 if (voltagePlausible ==
STD_OK) {
625 uint16_t numberInvalidCellVoltages =
644 int64_t sumOfStringValues_mV = 0;
645 int8_t numberOfValidStringVoltages = 0;
648 if (0u != numberOfConnectedStrings) {
655 numberOfValidStringVoltages++;
665 numberOfValidStringVoltages++;
672 if (0 != numberOfValidStringVoltages) {
687 uint8_t validVoltages = 0u;
698 if (((stringPrecharging ==
true) || (stringClosed ==
true)) && (updatedMeasurement ==
STD_OK)) {
708 if (validVoltages > 0u) {
719 bool calculatePower =
false;
720 int32_t packPower_W = 0;
733 if (noTimeout ==
STD_OK) {
743 calculatePower =
true;
751 calculatePower =
true;
757 int64_t stringPower_W =
787 uint16_t nrValidCellVoltages = 0u;
788 int16_t min = INT16_MAX;
789 int16_t max = INT16_MIN;
791 uint16_t moduleNumberMinimum = 0u;
792 uint16_t cellNumberMinimum = 0u;
793 uint16_t moduleNumberMaximum = 0u;
794 uint16_t cellNumberMaximum = 0u;
800 nrValidCellVoltages++;
805 moduleNumberMinimum = m;
806 cellNumberMinimum = c;
810 moduleNumberMaximum = m;
811 cellNumberMaximum = c;
825 if (nrValidCellVoltages > 0u) {
845 uint16_t moduleNumberMinimum = 0u;
846 uint16_t sensorNumberMinimum = 0u;
847 uint16_t moduleNumberMaximum = 0u;
848 uint16_t sensorNumberMaximum = 0u;
849 uint16_t nrValidCelltemperatures = 0u;
850 int16_t min = INT16_MAX;
851 int16_t max = INT16_MIN;
852 float_t sum_ddegC = 0.0f;
858 nrValidCelltemperatures++;
859 sum_ddegC += (float_t)pValidatedTemperatures
864 min = pValidatedTemperatures
866 moduleNumberMinimum = m;
867 sensorNumberMinimum = c;
871 max = pValidatedTemperatures
873 moduleNumberMaximum = m;
874 sensorNumberMaximum = c;
888 if (nrValidCelltemperatures > 0u) {
907 uint16_t numberValidMeasurements = 0u;
927 numberValidMeasurements++;
943 numberValidMeasurements++;
952 numberValidMeasurements++;
970 numberValidMeasurements = 0u;
973 noPlausibilityIssueDetected =
STD_OK;
988 *pValidatedVoltages = *pCellVoltage;
990 pValidatedVoltages->
header = tmpHeader;
1004 uint16_t numberValidMeasurements = 0u;
1018 pCelltemperatureRedundancy0
1020 &pValidatedTemperatures
1025 numberValidMeasurements++;
1040 numberValidMeasurements++;
1044 pCelltemperatureRedundancy0
1049 numberValidMeasurements++;
1055 pCelltemperatureRedundancy0
1066 numberValidMeasurements = 0u;
1069 noPlausibilityIssueDetected =
STD_OK;
1085 *pValidatedTemperature = *pCellTemperature;
1087 pValidatedTemperature->
header = tmpHeader;
1132 &mrc_tableCellVoltageBase,
1133 &mrc_tableCellVoltageRedundancy0,
1134 &mrc_tableCelltemperatureBase,
1135 &mrc_tableCelltemperatureRedundancy0);
1138 bool updateCellVoltages =
1142 bool updateCellTemperatures =
1146 if ((updateCellVoltages ==
true) && (updateCellTemperatures ==
true)) {
1148 }
else if (updateCellVoltages ==
true) {
1150 }
else if (updateCellTemperatures ==
true) {
1176 #ifdef UNITY_UNIT_TEST
1182 uint32_t previousTimestamp,
1183 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]
uint16_t validMeasuredCellTemperatures[BS_NR_OF_STRINGS]
uint16_t nrCellMaximumCellVoltage[BS_NR_OF_STRINGS]
float_t averageTemperature_ddegC[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