Minor bugfixes and future addons
This commit is contained in:
@@ -6,7 +6,7 @@ VAR_INPUT
|
||||
sInverterIPAddr : STRING;
|
||||
xEnable : BOOL;
|
||||
rPower : REAL;
|
||||
rReactivePower : REAL := 0.0;
|
||||
//rReactivePower : REAL := 0.0;
|
||||
xReset : BOOL;
|
||||
rMaxBattPower : REAL := 40_000; // 24kW
|
||||
END_VAR
|
||||
@@ -34,7 +34,7 @@ VAR
|
||||
_fbWriteRegister : FB_MBWriteRegs;
|
||||
|
||||
// Timer for checking if the inverter started in a reasonable amount of time
|
||||
_tonInverterStartup : TON;
|
||||
//_tonInverterStartup : TON;
|
||||
|
||||
// converter max power scaling factor
|
||||
_iWMaxSF : INT;
|
||||
@@ -52,17 +52,17 @@ VAR
|
||||
_iVarPctSF : INT;
|
||||
|
||||
// Reread set power limit
|
||||
_iWMaxLimPctRead : INT;
|
||||
_rWMaxLimPctReadScaled : REAL;
|
||||
//_iWMaxLimPctRead : INT;
|
||||
//_rWMaxLimPctReadScaled : REAL;
|
||||
|
||||
// Scaling factor for power limiting
|
||||
_iWMaxLimPctSF : INT;
|
||||
|
||||
// Unscaled maximum power from type label
|
||||
_iWRTGSF : INT;
|
||||
//_iWRTGSF : INT;
|
||||
|
||||
// Scaling for maximum power from type label
|
||||
_rWRTGScaling : REAL;
|
||||
//_rWRTGScaling : REAL;
|
||||
|
||||
// Current state of the inverters internal statemachine
|
||||
_uiInverterState : UINT;
|
||||
@@ -121,6 +121,9 @@ VAR
|
||||
|
||||
_sName : STRING;
|
||||
|
||||
_uiSetPowerLimitErrorCounter : UINT;
|
||||
_uiLastSetPowerLimitErrorCounter : UINT;
|
||||
|
||||
END_VAR
|
||||
VAR CONSTANT
|
||||
// Inverter statemachine status register
|
||||
@@ -157,11 +160,11 @@ VAR CONSTANT
|
||||
|
||||
// Maximum inverter output power from type label
|
||||
// Size 1, uint16 (Range = 0 .. 65534, Not implemented = 0xFFFF)
|
||||
W_RTG_REGISTER : WORD := 40125;
|
||||
//W_RTG_REGISTER : WORD := 40125;
|
||||
|
||||
// Maximum inverter output power from type label scaling factor
|
||||
// Size 1, sunssf (int16) (Range = -10 .. 10, Not implemented 0x8000)
|
||||
W_RTG_SF_REGISTER : WORD := 40126;
|
||||
//W_RTG_SF_REGISTER : WORD := 40126;
|
||||
|
||||
// Start of register with the current dc values
|
||||
// Size 4
|
||||
@@ -229,9 +232,6 @@ CASE _iState OF
|
||||
_tonPollingTimer(IN := TRUE, PT := _timPollingDelay);
|
||||
END_IF
|
||||
|
||||
|
||||
|
||||
|
||||
1: // Read inverter status
|
||||
_fbReadRegister(
|
||||
sIPAddr:= sInverterIPAddr,
|
||||
@@ -631,18 +631,30 @@ CASE _iState OF
|
||||
_iState := 50;
|
||||
_rOldPower := rPower;
|
||||
_uiMaxLimEn := 1;
|
||||
_uiLastSetPowerLimitErrorCounter := _uiSetPowerLimitErrorCounter;
|
||||
_uiSetPowerLimitErrorCounter := 0;
|
||||
// Calculate reactive power setting
|
||||
//_iMaxPowerVar := LREAL_TO_INT((rReactivePower*100)/(_iMaxPowerVar * EXPT(10,_iVarPctSF)));
|
||||
ELSE
|
||||
xError := TRUE;
|
||||
// Goto error state
|
||||
_iState := 1000;
|
||||
_uiSetPowerLimitErrorCounter := _uiSetPowerLimitErrorCounter + 1;
|
||||
IF _uiSetPowerLimitErrorCounter > 5 THEN
|
||||
// Goto error state
|
||||
_iState := 1000;
|
||||
ELSE
|
||||
_iState := 41;
|
||||
END_IF
|
||||
END_IF
|
||||
_fbWriteRegister(bExecute := FALSE);
|
||||
END_IF
|
||||
|
||||
41: // Retry send power limit delay
|
||||
_tonPollingTimer(IN := TRUE, PT := _timPollingDelay);
|
||||
IF _tonPollingTimer.Q THEN
|
||||
_tonPollingTimer(IN := FALSE);
|
||||
_iState := 40;
|
||||
END_IF
|
||||
|
||||
41: // Set max reactive power in percent
|
||||
42: // Set max reactive power in percent
|
||||
_iErrorInState := _iState;
|
||||
_fbWriteRegister(
|
||||
sIPAddr:= sInverterIPAddr,
|
||||
@@ -672,7 +684,7 @@ CASE _iState OF
|
||||
END_IF
|
||||
|
||||
|
||||
42: // Enable reactive power percent limiting
|
||||
43: // Enable reactive power percent limiting
|
||||
_iErrorInState := _iState;
|
||||
_fbWriteRegister(
|
||||
sIPAddr:= sInverterIPAddr,
|
||||
@@ -799,7 +811,7 @@ CASE _iState OF
|
||||
_iState := 70;
|
||||
ELSIF (ABS(rPower - _rOldPower) > 0.1) THEN
|
||||
//_tonPollingTimer(IN := FALSE);
|
||||
// If power has ben changed, goto set power limit mode
|
||||
// If power has been changed, goto set power limit mode
|
||||
_iState := 40;
|
||||
// Calculate power to write to register
|
||||
_iWMaxLimPct := LREAL_TO_INT((rPower*100)/(_rWMax * EXPT(10,_iWMaxLimPctSF)));
|
||||
@@ -833,7 +845,7 @@ CASE _iState OF
|
||||
// Check if reading mudbus register is done
|
||||
IF NOT _fbReadRegister.bBusy THEN
|
||||
// If there was no error and the converter has no error continue
|
||||
IF NOT _fbReadRegister.bError AND (_uiInverterState <> 7) THEN
|
||||
IF (NOT _fbReadRegister.bError) AND (_uiInverterState <> 7) THEN
|
||||
_iState := 80;
|
||||
IF (_uiInverterState = 4) OR (_uiInverterState = 5) THEN
|
||||
xActive := TRUE;
|
||||
@@ -842,6 +854,7 @@ CASE _iState OF
|
||||
END_IF
|
||||
ELSE
|
||||
xError := TRUE;
|
||||
xActive := FALSE;
|
||||
_uiPCSSetOperation := 3;
|
||||
// Read error register
|
||||
_iState := 200;
|
||||
|
||||
Reference in New Issue
Block a user