79 .lastRedundancy0CellvoltageTimestamp = 0u,
80 .lastBaseCelltemperatureTimestamp = 0u,
81 .lastRedundancy0CelltemperatureTimestamp = 0u,
82 .lastStringCurrentTimestamp = {0u},
105 uint32_t previousTimestamp,
106 uint32_t timeInterval);
244 if (!((timestamp == 0u) && (previousTimestamp == 0u))) {
255 uint32_t previousTimestamp,
256 uint32_t timeInterval) {
262 if (((currentTimestamp - timestamp) <= timeInterval) &&
277 bool updatedValidatedVoltageDatbaseEntry =
false;
279 bool baseCellvoltageUpdated =
false;
281 bool useCellvoltageRedundancy =
false;
282 bool baseCellvoltageMeasurementTimeoutReached =
true;
283 bool redundancy0CellvoltageMeasurementTimeoutReached =
true;
300 baseCellvoltageMeasurementTimeoutReached =
false;
303 baseCellvoltageMeasurementTimeoutReached =
true;
310 baseCellvoltageUpdated =
true;
312 baseCellvoltageUpdated =
false;
318 (useCellvoltageRedundancy ==
true)) {
319 redundancy0CellvoltageMeasurementTimeoutReached =
true;
323 redundancy0CellvoltageMeasurementTimeoutReached =
false;
328 if (useCellvoltageRedundancy ==
true) {
329 bool redundany0CellvoltageUpdated =
false;
332 redundany0CellvoltageUpdated =
true;
334 redundany0CellvoltageUpdated =
false;
337 if ((baseCellvoltageUpdated ==
true) && (redundany0CellvoltageUpdated ==
true)) {
345 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;
449 redundancy0CellTemperatureMeasurementTimeoutReached =
false;
454 if (useCelltemperatureRedundancy ==
true) {
455 bool redundancy0CelltemperatureUpdated =
false;
458 redundancy0CelltemperatureUpdated =
true;
460 redundancy0CelltemperatureUpdated =
false;
463 if ((baseCelltemperatureUpdated ==
true) && (redundancy0CelltemperatureUpdated ==
true)) {
471 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;
533 for (uint8_t stringNumber = 0u; stringNumber <
BS_NR_OF_STRINGS; stringNumber++) {
541 if (
STD_OK == noTimeout) {
583 for (uint8_t stringNumber = 0u; stringNumber <
BS_NR_OF_STRINGS; stringNumber++) {
592 if ((
STD_OK == updatedMeasurement) &&
602 if (
STD_OK == voltagePlausible) {
612 if ((
STD_OK == updatedMeasurement) &&
626 uint16_t numberInvalidCellVoltages =
632 (int16_t)numberInvalidCellVoltages);
646 int64_t sumOfStringValues_mV = 0;
647 int8_t numberOfValidStringVoltages = 0;
650 if (0u != numberOfConnectedStrings) {
657 numberOfValidStringVoltages++;
667 numberOfValidStringVoltages++;
674 if (0 != numberOfValidStringVoltages) {
687 uint8_t validVoltages = 0u;
688 for (uint8_t stringNumber = 0u; stringNumber <
BS_NR_OF_STRINGS; stringNumber++) {
698 if (((
true == stringPrecharging) || (
true == stringClosed)) && (
STD_OK == updatedMeasurement)) {
708 if (validVoltages > 0u) {
719 bool calculatePower =
false;
720 int32_t packPower_W = 0;
725 for (uint8_t stringNumber = 0u; stringNumber <
BS_NR_OF_STRINGS; stringNumber++) {
733 if (
STD_OK == noTimeout) {
743 calculatePower =
true;
751 calculatePower =
true;
757 int64_t stringPower_W =
788 uint16_t nrValidCellvoltages = 0u;
789 int16_t min = INT16_MAX;
790 int16_t max = INT16_MIN;
792 uint16_t moduleNumberMinimum = 0u;
793 uint16_t cellNumberMinimum = 0u;
794 uint16_t moduleNumberMaximum = 0u;
795 uint16_t cellNumberMaximum = 0u;
801 nrValidCellvoltages++;
806 moduleNumberMinimum = m;
807 cellNumberMinimum = c;
811 moduleNumberMaximum = m;
812 cellNumberMaximum = c;
826 if (nrValidCellvoltages > 0u) {
846 uint16_t moduleNumberMinimum = 0u;
847 uint16_t sensorNumberMinimum = 0u;
848 uint16_t moduleNumberMaximum = 0u;
849 uint16_t sensorNumberMaximum = 0u;
850 uint16_t nrValidCelltemperatures = 0u;
851 int16_t min = INT16_MAX;
852 int16_t max = INT16_MIN;
853 float sum_ddegC = 0.0f;
859 nrValidCelltemperatures++;
860 sum_ddegC += (float)pValidatedTemperatures
865 min = pValidatedTemperatures
867 moduleNumberMinimum = m;
868 sensorNumberMinimum = c;
872 max = pValidatedTemperatures
874 moduleNumberMaximum = m;
875 sensorNumberMaximum = c;
889 if (nrValidCelltemperatures > 0u) {
908 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_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.
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.
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
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_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.
STD_RETURN_TYPE_e PL_CheckStringVoltage(int32_t voltageAfe_mV, int32_t voltageCurrentSensor_mV)
Pack voltage plausibility check between LTC and current sensor values.
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)
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 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 MRC_ValidateAfeMeasurement(void)
Function to validate the measurement between redundant measurement values for cell voltage and cell t...
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.
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
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]
bool validModuleVoltage[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]
uint8_t invalidBatteryVoltage
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]
int32_t batteryVoltage_mV
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]