VE.Direct: use float rather than double
double precision floating point numbers are not needed to handle VE.Direct values. handling double is implemented in software and hence *much* more resource intensive.
This commit is contained in:
parent
b299b9dc6c
commit
92a7f27919
@ -34,13 +34,13 @@ public:
|
|||||||
int32_t getPanelPowerWatts() const;
|
int32_t getPanelPowerWatts() const;
|
||||||
|
|
||||||
// sum of total yield of all MPPT charge controllers in kWh
|
// sum of total yield of all MPPT charge controllers in kWh
|
||||||
double getYieldTotal() const;
|
float getYieldTotal() const;
|
||||||
|
|
||||||
// sum of today's yield of all MPPT charge controllers in kWh
|
// sum of today's yield of all MPPT charge controllers in kWh
|
||||||
double getYieldDay() const;
|
float getYieldDay() const;
|
||||||
|
|
||||||
// minimum of all MPPT charge controllers' output voltages in V
|
// minimum of all MPPT charge controllers' output voltages in V
|
||||||
double getOutputVoltage() const;
|
float getOutputVoltage() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void loop();
|
void loop();
|
||||||
|
|||||||
@ -10,9 +10,9 @@ typedef struct {
|
|||||||
uint16_t PID = 0; // product id
|
uint16_t PID = 0; // product id
|
||||||
char SER[VE_MAX_VALUE_LEN]; // serial number
|
char SER[VE_MAX_VALUE_LEN]; // serial number
|
||||||
char FW[VE_MAX_VALUE_LEN]; // firmware release number
|
char FW[VE_MAX_VALUE_LEN]; // firmware release number
|
||||||
double V = 0; // battery voltage in V
|
float V = 0; // battery voltage in V
|
||||||
double I = 0; // battery current in A
|
float I = 0; // battery current in A
|
||||||
double E = 0; // efficiency in percent (calculated, moving average)
|
float E = 0; // efficiency in percent (calculated, moving average)
|
||||||
|
|
||||||
frozen::string const& getPidAsString() const; // product ID as string
|
frozen::string const& getPidAsString() const; // product ID as string
|
||||||
} veStruct;
|
} veStruct;
|
||||||
@ -21,17 +21,17 @@ struct veMpptStruct : veStruct {
|
|||||||
uint8_t MPPT; // state of MPP tracker
|
uint8_t MPPT; // state of MPP tracker
|
||||||
int32_t PPV; // panel power in W
|
int32_t PPV; // panel power in W
|
||||||
int32_t P; // battery output power in W (calculated)
|
int32_t P; // battery output power in W (calculated)
|
||||||
double VPV; // panel voltage in V
|
float VPV; // panel voltage in V
|
||||||
double IPV; // panel current in A (calculated)
|
float IPV; // panel current in A (calculated)
|
||||||
bool LOAD; // virtual load output state (on if battery voltage reaches upper limit, off if battery reaches lower limit)
|
bool LOAD; // virtual load output state (on if battery voltage reaches upper limit, off if battery reaches lower limit)
|
||||||
uint8_t CS; // current state of operation e.g. OFF or Bulk
|
uint8_t CS; // current state of operation e.g. OFF or Bulk
|
||||||
uint8_t ERR; // error code
|
uint8_t ERR; // error code
|
||||||
uint32_t OR; // off reason
|
uint32_t OR; // off reason
|
||||||
uint32_t HSDS; // day sequence number 1...365
|
uint32_t HSDS; // day sequence number 1...365
|
||||||
double H19; // yield total kWh
|
float H19; // yield total kWh
|
||||||
double H20; // yield today kWh
|
float H20; // yield today kWh
|
||||||
int32_t H21; // maximum power today W
|
int32_t H21; // maximum power today W
|
||||||
double H22; // yield yesterday kWh
|
float H22; // yield yesterday kWh
|
||||||
int32_t H23; // maximum power yesterday W
|
int32_t H23; // maximum power yesterday W
|
||||||
|
|
||||||
frozen::string const& getMpptAsString() const; // state of mppt as string
|
frozen::string const& getMpptAsString() const; // state of mppt as string
|
||||||
|
|||||||
@ -76,7 +76,7 @@ void VeDirectMpptController::frameValidEvent() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (_tmpFrame.PPV > 0) {
|
if (_tmpFrame.PPV > 0) {
|
||||||
_efficiency.addNumber(static_cast<double>(_tmpFrame.P * 100) / _tmpFrame.PPV);
|
_efficiency.addNumber(static_cast<float>(_tmpFrame.P * 100) / _tmpFrame.PPV);
|
||||||
_tmpFrame.E = _efficiency.getAverage();
|
_tmpFrame.E = _efficiency.getAverage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,9 +24,9 @@ public:
|
|||||||
_index = (_index + 1) % WINDOW_SIZE;
|
_index = (_index + 1) % WINDOW_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
double getAverage() const {
|
float getAverage() const {
|
||||||
if (_count == 0) { return 0.0; }
|
if (_count == 0) { return 0.0; }
|
||||||
return static_cast<double>(_sum) / _count;
|
return static_cast<float>(_sum) / _count;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -47,5 +47,5 @@ public:
|
|||||||
private:
|
private:
|
||||||
bool processTextDataDerived(std::string const& name, std::string const& value) final;
|
bool processTextDataDerived(std::string const& name, std::string const& value) final;
|
||||||
void frameValidEvent() final;
|
void frameValidEvent() final;
|
||||||
MovingAverage<double, 5> _efficiency;
|
MovingAverage<float, 5> _efficiency;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -158,9 +158,9 @@ int32_t VictronMpptClass::getPanelPowerWatts() const
|
|||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
double VictronMpptClass::getYieldTotal() const
|
float VictronMpptClass::getYieldTotal() const
|
||||||
{
|
{
|
||||||
double sum = 0;
|
float sum = 0;
|
||||||
|
|
||||||
for (const auto& upController : _controllers) {
|
for (const auto& upController : _controllers) {
|
||||||
if (!upController->isDataValid()) { continue; }
|
if (!upController->isDataValid()) { continue; }
|
||||||
@ -170,9 +170,9 @@ double VictronMpptClass::getYieldTotal() const
|
|||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
double VictronMpptClass::getYieldDay() const
|
float VictronMpptClass::getYieldDay() const
|
||||||
{
|
{
|
||||||
double sum = 0;
|
float sum = 0;
|
||||||
|
|
||||||
for (const auto& upController : _controllers) {
|
for (const auto& upController : _controllers) {
|
||||||
if (!upController->isDataValid()) { continue; }
|
if (!upController->isDataValid()) { continue; }
|
||||||
@ -182,13 +182,13 @@ double VictronMpptClass::getYieldDay() const
|
|||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
double VictronMpptClass::getOutputVoltage() const
|
float VictronMpptClass::getOutputVoltage() const
|
||||||
{
|
{
|
||||||
double min = -1;
|
float min = -1;
|
||||||
|
|
||||||
for (const auto& upController : _controllers) {
|
for (const auto& upController : _controllers) {
|
||||||
if (!upController->isDataValid()) { continue; }
|
if (!upController->isDataValid()) { continue; }
|
||||||
double volts = upController->getData().V;
|
float volts = upController->getData().V;
|
||||||
if (min == -1) { min = volts; }
|
if (min == -1) { min = volts; }
|
||||||
min = std::min(min, volts);
|
min = std::min(min, volts);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user