|
|
@ -90,7 +90,7 @@ class Inverter { |
|
|
|
} |
|
|
|
|
|
|
|
uint8_t getPosByChFld(uint8_t channel, uint8_t fieldId) { |
|
|
|
DPRINTLN(F("hmInverter.h:getPosByChFld")); |
|
|
|
//DPRINTLN(F("hmInverter.h:getPosByChFld"));
|
|
|
|
uint8_t pos = 0; |
|
|
|
for(; pos < listLen; pos++) { |
|
|
|
if((assign[pos].ch == channel) && (assign[pos].fieldId == fieldId)) |
|
|
@ -100,22 +100,22 @@ class Inverter { |
|
|
|
} |
|
|
|
|
|
|
|
const char *getFieldName(uint8_t pos) { |
|
|
|
DPRINTLN(F("hmInverter.h:getFieldName")); |
|
|
|
//DPRINTLN(F("hmInverter.h:getFieldName"));
|
|
|
|
return fields[assign[pos].fieldId]; |
|
|
|
} |
|
|
|
|
|
|
|
const char *getUnit(uint8_t pos) { |
|
|
|
DPRINTLN(F("hmInverter.h:getUnit")); |
|
|
|
//DPRINTLN(F("hmInverter.h:getUnit"));
|
|
|
|
return units[assign[pos].unitId]; |
|
|
|
} |
|
|
|
|
|
|
|
uint8_t getChannel(uint8_t pos) { |
|
|
|
DPRINTLN(F("hmInverter.h:getChannel")); |
|
|
|
//DPRINTLN(F("hmInverter.h:getChannel"));
|
|
|
|
return assign[pos].ch; |
|
|
|
} |
|
|
|
|
|
|
|
void addValue(uint8_t pos, uint8_t buf[]) { |
|
|
|
DPRINTLN(F("hmInverter.h:addValue")); |
|
|
|
//DPRINTLN(F("hmInverter.h:addValue"));
|
|
|
|
uint8_t ptr = assign[pos].start; |
|
|
|
uint8_t end = ptr + assign[pos].num; |
|
|
|
uint16_t div = assign[pos].div; |
|
|
@ -132,12 +132,12 @@ class Inverter { |
|
|
|
} |
|
|
|
|
|
|
|
RECORDTYPE getValue(uint8_t pos) { |
|
|
|
DPRINTLN(F("hmInverter.h:getValue")); |
|
|
|
//DPRINTLN(F("hmInverter.h:getValue"));
|
|
|
|
return record[pos]; |
|
|
|
} |
|
|
|
|
|
|
|
void doCalculations(void) { |
|
|
|
DPRINTLN(F("hmInverter.h:doCalculations")); |
|
|
|
//DPRINTLN(F("hmInverter.h:doCalculations"));
|
|
|
|
for(uint8_t i = 0; i < listLen; i++) { |
|
|
|
if(CMD_CALC == assign[i].div) { |
|
|
|
record[i] = calcFunctions<RECORDTYPE>[assign[i].start].func(this, assign[i].num); |
|
|
@ -146,12 +146,12 @@ class Inverter { |
|
|
|
} |
|
|
|
|
|
|
|
bool isAvailable(uint32_t timestamp) { |
|
|
|
DPRINTLN(F("hmInverter.h:isAvailable")); |
|
|
|
//DPRINTLN(F("hmInverter.h:isAvailable"));
|
|
|
|
return ((timestamp - ts) < INACT_THRES_SEC); |
|
|
|
} |
|
|
|
|
|
|
|
bool isProducing(uint32_t timestamp) { |
|
|
|
DPRINTLN(F("hmInverter.h:isProducing")); |
|
|
|
//DPRINTLN(F("hmInverter.h:isProducing"));
|
|
|
|
if(isAvailable(timestamp)) { |
|
|
|
uint8_t pos = getPosByChFld(CH0, FLD_PAC); |
|
|
|
return (getValue(pos) > INACT_PWR_THRESH); |
|
|
@ -160,13 +160,13 @@ class Inverter { |
|
|
|
} |
|
|
|
|
|
|
|
uint32_t getLastTs(void) { |
|
|
|
DPRINTLN(F("hmInverter.h:getLastTs")); |
|
|
|
//DPRINTLN(F("hmInverter.h:getLastTs"));
|
|
|
|
return ts; |
|
|
|
} |
|
|
|
|
|
|
|
private: |
|
|
|
void toRadioId(void) { |
|
|
|
DPRINTLN(F("hmInverter.h:toRadioId")); |
|
|
|
//DPRINTLN(F("hmInverter.h:toRadioId"));
|
|
|
|
radioId.u64 = 0ULL; |
|
|
|
radioId.b[4] = serial.b[0]; |
|
|
|
radioId.b[3] = serial.b[1]; |
|
|
@ -176,7 +176,7 @@ class Inverter { |
|
|
|
} |
|
|
|
|
|
|
|
void getAssignment(void) { |
|
|
|
DPRINTLN(F("hmInverter.h:getAssignment")); |
|
|
|
//DPRINTLN(F("hmInverter.h:getAssignment"));
|
|
|
|
if(INV_TYPE_1CH == type) { |
|
|
|
listLen = (uint8_t)(HM1CH_LIST_LEN); |
|
|
|
assign = (byteAssign_t*)hm1chAssignment; |
|
|
@ -209,7 +209,7 @@ class Inverter { |
|
|
|
|
|
|
|
template<class T=float> |
|
|
|
static T calcYieldTotalCh0(Inverter<> *iv, uint8_t arg0) { |
|
|
|
DPRINTLN(F("hmInverter.h:calcYieldTotalCh0")); |
|
|
|
//DPRINTLN(F("hmInverter.h:calcYieldTotalCh0"));
|
|
|
|
if(NULL != iv) { |
|
|
|
T yield = 0; |
|
|
|
for(uint8_t i = 1; i <= iv->channels; i++) { |
|
|
@ -223,7 +223,7 @@ static T calcYieldTotalCh0(Inverter<> *iv, uint8_t arg0) { |
|
|
|
|
|
|
|
template<class T=float> |
|
|
|
static T calcYieldDayCh0(Inverter<> *iv, uint8_t arg0) { |
|
|
|
DPRINTLN(F("hmInverter.h:calcYieldDayCh0")); |
|
|
|
//DPRINTLN(F("hmInverter.h:calcYieldDayCh0"));
|
|
|
|
if(NULL != iv) { |
|
|
|
T yield = 0; |
|
|
|
for(uint8_t i = 1; i <= iv->channels; i++) { |
|
|
@ -237,7 +237,7 @@ static T calcYieldDayCh0(Inverter<> *iv, uint8_t arg0) { |
|
|
|
|
|
|
|
template<class T=float> |
|
|
|
static T calcUdcCh(Inverter<> *iv, uint8_t arg0) { |
|
|
|
DPRINTLN(F("hmInverter.h:calcUdcCh")); |
|
|
|
//DPRINTLN(F("hmInverter.h:calcUdcCh"));
|
|
|
|
// arg0 = channel of source
|
|
|
|
for(uint8_t i = 0; i < iv->listLen; i++) { |
|
|
|
if((FLD_UDC == iv->assign[i].fieldId) && (arg0 == iv->assign[i].ch)) { |
|
|
@ -250,7 +250,7 @@ static T calcUdcCh(Inverter<> *iv, uint8_t arg0) { |
|
|
|
|
|
|
|
template<class T=float> |
|
|
|
static T calcPowerDcCh0(Inverter<> *iv, uint8_t arg0) { |
|
|
|
DPRINTLN(F("hmInverter.h:calcPowerDcCh0")); |
|
|
|
//DPRINTLN(F("hmInverter.h:calcPowerDcCh0"));
|
|
|
|
if(NULL != iv) { |
|
|
|
T dcPower = 0; |
|
|
|
for(uint8_t i = 1; i <= iv->channels; i++) { |
|
|
@ -264,7 +264,7 @@ static T calcPowerDcCh0(Inverter<> *iv, uint8_t arg0) { |
|
|
|
|
|
|
|
template<class T=float> |
|
|
|
static T calcEffiencyCh0(Inverter<> *iv, uint8_t arg0) { |
|
|
|
DPRINTLN(F("hmInverter.h:calcEfficiencyCh0")); |
|
|
|
//DPRINTLN(F("hmInverter.h:calcEfficiencyCh0"));
|
|
|
|
if(NULL != iv) { |
|
|
|
uint8_t pos = iv->getPosByChFld(CH0, FLD_PAC); |
|
|
|
T acPower = iv->getValue(pos); |
|
|
@ -281,7 +281,7 @@ static T calcEffiencyCh0(Inverter<> *iv, uint8_t arg0) { |
|
|
|
|
|
|
|
template<class T=float> |
|
|
|
static T calcIrradiation(Inverter<> *iv, uint8_t arg0) { |
|
|
|
DPRINTLN(F("hmInverter.h:calcIrradiation")); |
|
|
|
//DPRINTLN(F("hmInverter.h:calcIrradiation"));
|
|
|
|
// arg0 = channel
|
|
|
|
if(NULL != iv) { |
|
|
|
uint8_t pos = iv->getPosByChFld(arg0, FLD_PDC); |
|
|
|