producing DC channel aware artificial increase of applied power limit to mitigate fixed distribution of applied power limit across all channels

This commit is contained in:
qubeck 2023-04-02 22:13:43 +02:00
parent 20bb7fc372
commit a1da3f9842

View File

@ -223,7 +223,18 @@ void PowerLimiterClass::setNewPowerLimit(std::shared_ptr<InverterAbstract> inver
_lastCommandSent = millis(); _lastCommandSent = millis();
} }
MessageOutput.printf("[PowerLimiterClass::loop] Limit Non-Persistent: %d W\r\n", newPowerLimit); MessageOutput.printf("[PowerLimiterClass::loop] Limit Non-Persistent: %d W\r\n", newPowerLimit);
inverter->sendActivePowerControlRequest(Hoymiles.getRadio(), newPowerLimit, PowerLimitControlType::AbsolutNonPersistent);
std::list<ChannelNum_t> dcChnls = inverter->Statistics()->getChannelsByType(TYPE_DC);
int dcProdChnls = 0, dcTotalChnls = dcChnls.size();
for (auto& c : dcChnls){
if (inverter->Statistics()->getChannelFieldValue(TYPE_DC, c, FLD_PDC) > 0)
dcProdChnls++;
}
int32_t effPowerLimit = round(newPowerLimit * (float)dcTotalChnls / dcProdChnls);
if (effPowerLimit > config.PowerLimiter_UpperPowerLimit)
effPowerLimit = config.PowerLimiter_UpperPowerLimit;
inverter->sendActivePowerControlRequest(Hoymiles.getRadio(), effPowerLimit, PowerLimitControlType::AbsolutNonPersistent);
_lastRequestedPowerLimit = newPowerLimit; _lastRequestedPowerLimit = newPowerLimit;
} }
} }