79 .lastRedundancy0CellvoltageTimestamp = 0u,
80 .lastBaseCelltemperatureTimestamp = 0u,
81 .lastRedundancy0CelltemperatureTimestamp = 0u,
82 .lastStringCurrentTimestamp = {0u},
105 uint32_t previousTimestamp,
106 uint32_t timeInterval);
259 if (!((timestamp == 0u) && (previousTimestamp == 0u))) {
270 uint32_t previousTimestamp,
271 uint32_t timeInterval) {
277 if (((currentTimestamp - timestamp) <= timeInterval) &&
292 bool updatedValidatedVoltageDatbaseEntry =
false;
294 bool baseCellvoltageUpdated =
false;
296 bool useCellvoltageRedundancy =
false;
297 bool baseCellvoltageMeasurementTimeoutReached =
true;
298 bool redundancy0CellvoltageMeasurementTimeoutReached =
true;
315 baseCellvoltageMeasurementTimeoutReached =
false;
318 baseCellvoltageMeasurementTimeoutReached =
true;
325 baseCellvoltageUpdated =
true;
327 baseCellvoltageUpdated =
false;
333 (useCellvoltageRedundancy ==
true)) {
334 redundancy0CellvoltageMeasurementTimeoutReached =
true;
338 redundancy0CellvoltageMeasurementTimeoutReached =
false;
343 if (useCellvoltageRedundancy ==
true) {
344 bool redundany0CellvoltageUpdated =
false;
347 redundany0CellvoltageUpdated =
true;
349 redundany0CellvoltageUpdated =
false;
352 if ((baseCellvoltageUpdated ==
true) && (redundany0CellvoltageUpdated ==
true)) {
360 updatedValidatedVoltageDatbaseEntry =
true;
362 }
else if ((baseCellvoltageUpdated ==
true) || (redundany0CellvoltageUpdated ==
true)) {
364 if (baseCellvoltageUpdated ==
true) {
366 if (redundancy0CellvoltageMeasurementTimeoutReached ==
true) {
370 updatedValidatedVoltageDatbaseEntry =
true;
372 }
else if (redundany0CellvoltageUpdated ==
true) {
374 if (baseCellvoltageMeasurementTimeoutReached ==
true) {
378 updatedValidatedVoltageDatbaseEntry =
true;
387 if (baseCellvoltageUpdated ==
true) {
396 updatedValidatedVoltageDatbaseEntry =
true;
400 if (updatedValidatedVoltageDatbaseEntry ==
true) {
411 return updatedValidatedVoltageDatbaseEntry;
420 bool baseCelltemperatureUpdated =
false;
421 bool useCelltemperatureRedundancy =
false;
422 bool updatedValidatedTemperatureDatbaseEntry =
false;
424 bool baseCellTemperatureMeasurementTimeoutReached =
true;
425 bool redundancy0CellTemperatureMeasurementTimeoutReached =
true;
442 baseCellTemperatureMeasurementTimeoutReached =
false;
445 baseCellTemperatureMeasurementTimeoutReached =
true;
451 baseCelltemperatureUpdated =
true;
453 baseCelltemperatureUpdated =
false;
459 (useCelltemperatureRedundancy ==
true)) {
460 redundancy0CellTemperatureMeasurementTimeoutReached =
true;
464 redundancy0CellTemperatureMeasurementTimeoutReached =
false;
469 if (useCelltemperatureRedundancy ==
true) {
470 bool redundancy0CelltemperatureUpdated =
false;
473 redundancy0CelltemperatureUpdated =
true;
475 redundancy0CelltemperatureUpdated =
false;
478 if ((baseCelltemperatureUpdated ==
true) && (redundancy0CelltemperatureUpdated ==
true)) {
486 updatedValidatedTemperatureDatbaseEntry =
true;
488 }
else if ((baseCelltemperatureUpdated ==
true) || (redundancy0CelltemperatureUpdated ==
true)) {
490 if (baseCelltemperatureUpdated ==
true) {
492 if (redundancy0CellTemperatureMeasurementTimeoutReached ==
true) {
496 updatedValidatedTemperatureDatbaseEntry =
true;
498 }
else if (redundancy0CelltemperatureUpdated ==
true) {
500 if (baseCellTemperatureMeasurementTimeoutReached ==
true) {
504 updatedValidatedTemperatureDatbaseEntry =
true;
513 if (baseCelltemperatureUpdated ==
true) {
522 updatedValidatedTemperatureDatbaseEntry =
true;
526 if (updatedValidatedTemperatureDatbaseEntry ==
true) {
537 return updatedValidatedTemperatureDatbaseEntry;
542 int32_t packCurrent_mA = 0;
548 for (uint8_t stringNumber = 0u; stringNumber <
BS_NR_OF_STRINGS; stringNumber++) {
556 if (
STD_OK == noTimeout) {
598 for (uint8_t stringNumber = 0u; stringNumber <
BS_NR_OF_STRINGS; stringNumber++) {
607 if ((
STD_OK == updatedMeasurement) &&
617 if (
STD_OK == voltagePlausible) {
627 if ((
STD_OK == updatedMeasurement) &&
641 uint16_t numberInvalidCellVoltages =
647 (int16_t)numberInvalidCellVoltages);
664 uint8_t validVoltages = 0u;
665 for (uint8_t stringNumber = 0u; stringNumber <
BS_NR_OF_STRINGS; stringNumber++) {
675 if (((
true == stringPrecharging) || (
true == stringClosed)) && (
STD_OK == updatedMeasurement)) {
685 if (validVoltages > 0u) {
696 bool calculatePower =
false;
697 int32_t packPower_W = 0;
702 for (uint8_t stringNumber = 0u; stringNumber <
BS_NR_OF_STRINGS; stringNumber++) {
710 if (
STD_OK == noTimeout) {
720 calculatePower =
true;
728 calculatePower =
true;
734 int64_t stringPower_W =
765 uint16_t nrValidCellvoltages = 0u;
766 int16_t min = INT16_MAX;
767 int16_t max = INT16_MIN;
769 uint16_t moduleNumberMinimum = 0u;
770 uint16_t cellNumberMinimum = 0u;
771 uint16_t moduleNumberMaximum = 0u;
772 uint16_t cellNumberMaximum = 0u;
778 nrValidCellvoltages++;
783 moduleNumberMinimum = m;
784 cellNumberMinimum = c;
788 moduleNumberMaximum = m;
789 cellNumberMaximum = c;
803 if (nrValidCellvoltages > 0u) {
823 uint16_t moduleNumberMinimum = 0u;
824 uint16_t sensorNumberMinimum = 0u;
825 uint16_t moduleNumberMaximum = 0u;
826 uint16_t sensorNumberMaximum = 0u;
827 uint16_t nrValidCelltemperatures = 0u;
828 int16_t min = INT16_MAX;
829 int16_t max = INT16_MIN;
830 float sum_ddegC = 0.0f;
836 nrValidCelltemperatures++;
837 sum_ddegC += (float)pValidatedTemperatures
842 min = pValidatedTemperatures
844 moduleNumberMinimum = m;
845 sensorNumberMinimum = c;
849 max = pValidatedTemperatures
851 moduleNumberMaximum = m;
852 sensorNumberMaximum = c;
866 if (nrValidCelltemperatures > 0u) {
885 uint16_t numberValidMeasurements = 0u;
904 numberValidMeasurements++;
920 numberValidMeasurements++;
929 numberValidMeasurements++;
947 numberValidMeasurements = 0u;
950 noPlausibilityIssueDetected =
STD_OK;
965 *pValidatedVoltages = *pCellvoltage;
967 pValidatedVoltages->
header = tmpHeader;
981 uint16_t numberValidMeasurements = 0u;
995 pCelltemperatureRedundancy0
997 &pValidatedTemperatures
1002 numberValidMeasurements++;
1017 numberValidMeasurements++;
1021 pCelltemperatureRedundancy0
1026 numberValidMeasurements++;
1032 pCelltemperatureRedundancy0
1043 numberValidMeasurements = 0u;
1046 noPlausibilityIssueDetected =
STD_OK;
1062 *pValidatedTemperature = *pCellTemperature;
1064 pValidatedTemperature->
header = tmpHeader;
1080 DATA_READ_DATA(&cellvoltageBase, &cellvoltageRedundancy0, &celltemperatureBase, &celltemperatureRedundancy0);
1086 bool updateCellTemperatures =
1090 if ((updateCellVoltages ==
true) && (updateCellTemperatures ==
true)) {
1092 }
else if (updateCellVoltages ==
true) {
1094 }
else if (updateCellTemperatures ==
true) {
1119 #ifdef UNITY_UNIT_TEST
1125 uint32_t previousTimestamp,
1126 uint32_t timeInterval) {
#define BS_NR_OF_CELLS_PER_MODULE
number of battery cells per battery module (parallel cells are counted as one)
#define BS_NR_OF_MODULES
number of modules in battery pack
#define BS_NR_OF_TEMP_SENSORS_PER_MODULE
number of temperature sensors per battery module
#define BS_NR_OF_BAT_CELLS
bool BMS_IsStringPrecharging(uint8_t stringNumber)
Returns if string is currently precharging or not.
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.
DIAG_RETURNTYPE_e DIAG_Handler(DIAG_ID_e diag_id, DIAG_EVENT_e event, DIAG_IMPACT_LEVEL_e impact, uint32_t data)
DIAG_Handler provides generic error handling, based on diagnosis group.
STD_RETURN_TYPE_e DIAG_CheckEvent(STD_RETURN_TYPE_e cond, DIAG_ID_e diag_id, DIAG_IMPACT_LEVEL_e impact, uint32_t data)
DIAG_CheckEvent provides a simple interface to check an event for STD_OK.
@ DIAG_ID_POWER_MEASUREMENT_ERROR
@ DIAG_ID_CURRENT_MEASUREMENT_TIMEOUT
@ DIAG_ID_BASE_CELL_TEMPERATURE_MESUREMENT_TIMEOUT
@ DIAG_ID_PLAUSIBILITY_PACK_VOLTAGE
@ DIAG_ID_REDUNDANCY0_CELL_TEMPERATURE_MESUREMENT_TIMEOUT
@ DIAG_ID_PLAUSIBILITY_CELL_VOLTAGE
@ DIAG_ID_PLAUSIBILITY_CELL_TEMP
@ DIAG_ID_CURRENT_SENSOR_POWER_MEASUREMENT_TIMEOUT
@ DIAG_ID_REDUNDANCY0_CELL_VOLTAGE_MESUREMENT_TIMEOUT
@ DIAG_ID_CURRENT_SENSOR_V1_MEASUREMENT_TIMEOUT
@ DIAG_ID_CURRENT_SENSOR_V3_MEASUREMENT_TIMEOUT
@ DIAG_ID_BASE_CELL_VOLTAGE_MESUREMENT_TIMEOUT
@ DIAG_ID_CURRENT_MEASUREMENT_ERROR
#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.
enum STD_RETURN_TYPE STD_RETURN_TYPE_e
uint32_t OS_GetTickCount(void)
Returns OS based system tick value.
Implementation of the tasks used by the system, headers.
STD_RETURN_TYPE_e PL_CheckStringVoltage(int32_t voltageMic_mV, int32_t voltageCurrentSensor_mV)
Pack voltage plausibility check between LTC and current sensor values.
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_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_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_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 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 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)
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)
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 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_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 TEST_MRC_UpdateCellVoltageValidation(DATA_BLOCK_CELL_VOLTAGE_s *pCellvoltage, DATA_BLOCK_CELL_VOLTAGE_s *pValidatedVoltages)
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_ValidateCellVoltage(DATA_BLOCK_CELL_VOLTAGE_s *pCellvoltageBase, DATA_BLOCK_CELL_VOLTAGE_s *pCellvoltageRedundancy0, 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 ...
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.
STD_RETURN_TYPE_e MRC_ValidateMicMeasurement(void)
Function to validate the measurement between redundant measurement values for cell voltage and cell t...
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_MIC_MEASUREMENT_PERIOD_TIMEOUT_ms
#define MRC_CURRENT_MEASUREMENT_PERIOD_TIMEOUT_ms
#define MRC_CURRENT_SENSOR_MEASUREMENT_TIMEOUT_ms
int16_t cellTemperature_ddegC[BS_NR_OF_STRINGS][BS_NR_OF_TEMP_SENSORS_PER_STRING]
DATA_BLOCK_HEADER_s header
uint16_t invalidCellTemperature[BS_NR_OF_STRINGS][BS_NR_OF_MODULES]
uint16_t nrValidTemperatures[BS_NR_OF_STRINGS]
uint16_t nrValidCellVoltages[BS_NR_OF_STRINGS]
int16_t cellVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_BAT_CELLS]
uint64_t invalidCellVoltage[BS_NR_OF_STRINGS][BS_NR_OF_MODULES]
DATA_BLOCK_HEADER_s header
int32_t packVoltage_mV[BS_NR_OF_STRINGS]
DATA_BLOCK_HEADER_s header
uint8_t invalidCurrentMeasurement[BS_NR_OF_STRINGS]
uint32_t timestampCurrent[BS_NR_OF_STRINGS]
uint32_t timestampPower[BS_NR_OF_STRINGS]
int32_t power_W[BS_NR_OF_STRINGS]
uint8_t invalidHighVoltageMeasurement[BS_NR_OF_STRINGS][BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]
uint32_t previousTimestampPower[BS_NR_OF_STRINGS]
int32_t current_mA[BS_NR_OF_STRINGS]
uint32_t timestampHighVoltage[BS_NR_OF_STRINGS][BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]
uint8_t invalidPowerMeasurement[BS_NR_OF_STRINGS]
uint32_t previousTimestampHighVoltage[BS_NR_OF_STRINGS][BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]
int32_t highVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]
uint32_t previousTimestampCurrent[BS_NR_OF_STRINGS]
uint16_t nrCellMinimumCellVoltage[BS_NR_OF_STRINGS]
uint16_t validMeasuredCellTemperatures[BS_NR_OF_STRINGS]
uint16_t nrSensorMinimumTemperature[BS_NR_OF_STRINGS]
int16_t maximumTemperature_ddegC[BS_NR_OF_STRINGS]
int16_t minimumTemperature_ddegC[BS_NR_OF_STRINGS]
float averageTemperature_ddegC[BS_NR_OF_STRINGS]
uint16_t nrModuleMaximumCellVoltage[BS_NR_OF_STRINGS]
uint16_t nrCellMaximumCellVoltage[BS_NR_OF_STRINGS]
uint16_t nrSensorMaximumTemperature[BS_NR_OF_STRINGS]
uint16_t validMeasuredCellVoltages[BS_NR_OF_STRINGS]
int16_t maximumCellVoltage_mV[BS_NR_OF_STRINGS]
uint16_t nrModuleMinimumCellVoltage[BS_NR_OF_STRINGS]
DATA_BLOCK_HEADER_s header
uint16_t nrModuleMaximumTemperature[BS_NR_OF_STRINGS]
int16_t averageCellVoltage_mV[BS_NR_OF_STRINGS]
uint16_t nrModuleMinimumTemperature[BS_NR_OF_STRINGS]
int16_t minimumCellVoltage_mV[BS_NR_OF_STRINGS]
uint8_t invalidHvBusVoltage
int32_t stringCurrent_mA[BS_NR_OF_STRINGS]
int32_t stringPower_W[BS_NR_OF_STRINGS]
int32_t highVoltageBusVoltage_mV
uint8_t invalidPackCurrent
uint8_t invalidStringCurrent[BS_NR_OF_STRINGS]
int32_t stringVoltage_mV[BS_NR_OF_STRINGS]
DATA_BLOCK_HEADER_s header
uint8_t invalidStringPower[BS_NR_OF_STRINGS]
uint8_t invalidStringVoltage[BS_NR_OF_STRINGS]
uint32_t lastRedundancy0CellvoltageTimestamp
uint32_t lastRedundancy0CelltemperatureTimestamp
uint32_t lastStringCurrentTimestamp[BS_NR_OF_STRINGS]
uint32_t lastBaseCellvoltageTimestamp
uint32_t lastBaseCelltemperatureTimestamp
uint32_t lastStringPowerTimestamp[BS_NR_OF_STRINGS]