Ioniq 12 bat.modules temp support + test environment

This commit is contained in:
Lubos Petrovic
2020-09-29 10:26:54 +02:00
parent 0ea2593e67
commit c324bd8227
6 changed files with 643 additions and 79 deletions

View File

@@ -56,13 +56,14 @@ String commandQueueKiaENiro[commandQueueCountKiaENiro] = {
bool activateCommandQueueForKiaENiro() {
// 39 or 64 kWh model?
params.batModuleTempCount = 4;
params.batteryTotalAvailableKWh = 64;
if (settings.carType == CAR_KIA_ENIRO_2020_39 || settings.carType == CAR_HYUNDAI_KONA_2020_39) {
params.batteryTotalAvailableKWh = 39.2;
}
// Empty and fill command queue
for (int i = 0; i < 100; i++) {
for (int i = 0; i < 300; i++) {
commandQueue[i] = "";
}
for (int i = 0; i < commandQueueCountKiaENiro; i++) {
@@ -126,22 +127,22 @@ bool parseRowMergedKiaENiro() {
params.batPowerKwh100 = params.batPowerKw / params.speedKmh * 100;
params.batCellMaxV = hexToDec(responseRowMerged.substring(52, 54).c_str(), 1, false) / 50.0;
params.batCellMinV = hexToDec(responseRowMerged.substring(56, 58).c_str(), 1, false) / 50.0;
params.batModule01TempC = hexToDec(responseRowMerged.substring(38, 40).c_str(), 1, true);
params.batModule02TempC = hexToDec(responseRowMerged.substring(40, 42).c_str(), 1, true);
params.batModule03TempC = hexToDec(responseRowMerged.substring(42, 44).c_str(), 1, true);
params.batModule04TempC = hexToDec(responseRowMerged.substring(44, 46).c_str(), 1, true);
params.batModuleTempC[0] = hexToDec(responseRowMerged.substring(38, 40).c_str(), 1, true);
params.batModuleTempC[1] = hexToDec(responseRowMerged.substring(40, 42).c_str(), 1, true);
params.batModuleTempC[2] = hexToDec(responseRowMerged.substring(42, 44).c_str(), 1, true);
params.batModuleTempC[3] = hexToDec(responseRowMerged.substring(44, 46).c_str(), 1, true);
//params.batTempC = hexToDec(responseRowMerged.substring(36, 38).c_str(), 1, true);
//params.batMaxC = hexToDec(responseRowMerged.substring(34, 36).c_str(), 1, true);
//params.batMinC = hexToDec(responseRowMerged.substring(36, 38).c_str(), 1, true);
// This is more accurate than min/max from BMS. It's required to detect kona/eniro cold gates (min 15C is needed > 43kW charging, min 25C is needed > 58kW charging)
params.batMinC = params.batMaxC = params.batModule01TempC;
params.batMinC = (params.batModule02TempC < params.batMinC) ? params.batModule02TempC : params.batMinC;
params.batMinC = (params.batModule03TempC < params.batMinC) ? params.batModule03TempC : params.batMinC;
params.batMinC = (params.batModule04TempC < params.batMinC) ? params.batModule04TempC : params.batMinC;
params.batMaxC = (params.batModule02TempC > params.batMaxC) ? params.batModule02TempC : params.batMaxC;
params.batMaxC = (params.batModule03TempC > params.batMaxC) ? params.batModule03TempC : params.batMaxC;
params.batMaxC = (params.batModule04TempC > params.batMaxC) ? params.batModule04TempC : params.batMaxC;
params.batMinC = params.batMaxC = params.batModuleTempC[0];
for (uint16_t i = 1; i < params.batModuleTempCount; i++) {
if (params.batModuleTempC[i] < params.batMinC)
params.batMinC = params.batModuleTempC[i];
if (params.batModuleTempC[i] > params.batMaxC)
params.batMaxC = params.batModuleTempC[i];
}
params.batTempC = params.batMinC;
params.batInletC = hexToDec(responseRowMerged.substring(50, 52).c_str(), 1, true);
@@ -291,20 +292,22 @@ bool testDataKiaENiro() {
responseRowMerged = "62B002E0000000FFB400330B0000000000000000";
parseRowMergedKiaENiro();
params.batModule01TempC = 28;
params.batModule02TempC = 29;
params.batModule03TempC = 28;
params.batModule04TempC = 30;
params.batModuleTempC[0] = 28;
params.batModuleTempC[1] = 29;
params.batModuleTempC[2] = 28;
params.batModuleTempC[3] = 30;
// This is more accurate than min/max from BMS. It's required to detect kona/eniro cold gates (min 15C is needed > 43kW charging, min 25C is needed > 58kW charging)
params.batMinC = params.batMaxC = params.batModule01TempC;
params.batMinC = (params.batModule02TempC < params.batMinC) ? params.batModule02TempC : params.batMinC ;
params.batMinC = (params.batModule03TempC < params.batMinC) ? params.batModule03TempC : params.batMinC ;
params.batMinC = (params.batModule04TempC < params.batMinC) ? params.batModule04TempC : params.batMinC ;
params.batMaxC = (params.batModule02TempC > params.batMaxC) ? params.batModule02TempC : params.batMaxC ;
params.batMaxC = (params.batModule03TempC > params.batMaxC) ? params.batModule03TempC : params.batMaxC ;
params.batMaxC = (params.batModule04TempC > params.batMaxC) ? params.batModule04TempC : params.batMaxC ;
params.batMinC = params.batMaxC = params.batModuleTempC[0];
for (uint16_t i = 1; i < params.batModuleTempCount; i++) {
if (params.batModuleTempC[i] < params.batMinC)
params.batMinC = params.batModuleTempC[i];
if (params.batModuleTempC[i] > params.batMaxC)
params.batMaxC = params.batModuleTempC[i];
}
params.batTempC = params.batMinC;
//
params.soc10ced[10] = 2200;
params.soc10cec[10] = 2500;