Added inverter implementation

This commit is contained in:
Matthias Heisig
2024-01-05 16:27:39 +01:00
parent bd0bbd9c8b
commit 4586e72a0e
18 changed files with 1318 additions and 293 deletions

View File

@@ -44,69 +44,103 @@ VAR_GLOBAL
// Pressure posolyt segment inlet
stConfigPosolytPressureSegmentInlet := (iAIMax := 32767, iAIMin := 0, rPVMax := 1500, rPVMin := -1000, sUnit := 'mbar'),
stEWLPosolytPressureSegmentInlet := (rErrorMin := -500, rWarningMin := -400, rWarningMax := 600, rErrorMax := 700),
stEWLPosolytPressureSegmentInlet := (rErrorMin := 170, rWarningMin := 200, rWarningMax := 600, rErrorMax := 700),
stEWDPosolytPressureSegmentInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#1S,
timErrorLowOn := T#2S,
timErrorLowOff := T#5S,
timWarningLowOn := T#1S,
timWarningLowOn := T#2S,
timWarningLowOff := T#5S,
timWarningHighOn := T#1S,
timWarningHighOn := T#2S,
timWarningHighOff := T#5S,
timErrorHighOn := T#1S,
timErrorHighOn := T#2S,
timErrorHighOff := T#5S
),
// Pressure negolyt segment inlet
stConfigNegolytPressureSegmentInlet := (iAIMax := 32767, iAIMin := 0, rPVMax := 1500, rPVMin := -1000, sUnit := 'mbar'),
stEWLNegolytPressureSegmentInlet := (rErrorMin := -500, rWarningMin := -400, rWarningMax := 600, rErrorMax := 700),
stEWLNegolytPressureSegmentInlet := (rErrorMin := 170, rWarningMin := 200, rWarningMax := 600, rErrorMax := 700),
stEWDNegolytPressureSegmentInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#1S,
timErrorLowOn := T#2S,
timErrorLowOff := T#5S,
timWarningLowOn := T#1S,
timWarningLowOn := T#2S,
timWarningLowOff := T#5S,
timWarningHighOn := T#1S,
timWarningHighOn := T#2S,
timWarningHighOff := T#5S,
timErrorHighOn := T#1S,
timErrorHighOn := T#2S,
timErrorHighOff := T#5S
),
// Pressure posolyt tank inlet
stConfigPosolytPressureTankInlet := (iAIMax := 32767, iAIMin := 0, rPVMax := 1500, rPVMin := -1000, sUnit := 'mbar'),
stEWLPosolytPressureTankInlet := (rErrorMin := -100, rWarningMin := -50, rWarningMax := 100, rErrorMax := 120),
stEWDPosolytPressureTankInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#2S,
timErrorLowOff := T#5S,
timWarningLowOn := T#2S,
timWarningLowOff := T#5S,
timWarningHighOn := T#2S,
timWarningHighOff := T#5S,
timErrorHighOn := T#2S,
timErrorHighOff := T#5S
),
// Pressure negolyt tank inlet
stConfigNegolytPressureTankInlet := (iAIMax := 32767, iAIMin := 0, rPVMax := 1500, rPVMin := -1000, sUnit := 'mbar'),
stEWLNegolytPressureTankInlet := (rErrorMin := -100, rWarningMin := -50, rWarningMax := 100, rErrorMax := 120),
stEWDNegolytPressureTankInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#2S,
timErrorLowOff := T#5S,
timWarningLowOn := T#2S,
timWarningLowOff := T#5S,
timWarningHighOn := T#2S,
timWarningHighOff := T#5S,
timErrorHighOn := T#2S,
timErrorHighOff := T#5S
),
// Temperature sensor posolyt tank inlet
stConfigPosolytTempTankInlet := (iAIMax := 32767, iAIMin := -32768, rPVMax := 3276.7, rPVMin := -3276.8, sUnit := '°C'),
stEWLPosolytTempTankInlet := (rErrorMin := -10, rWarningMin := -5, rWarningMax := 45, rErrorMax := 60),
stEWLPosolytTempTankInlet := (rErrorMin := -10, rWarningMin := -5, rWarningMax := 50, rErrorMax := 60),
stEWDPosolytTempTankInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#5S,
timErrorLowOn := T#2S,
timErrorLowOff := T#5S,
timWarningLowOn := T#5S,
timWarningLowOn := T#2S,
timWarningLowOff := T#5S,
timWarningHighOn := T#5S,
timWarningHighOn := T#2S,
timWarningHighOff := T#5S,
timErrorHighOn := T#5S,
timErrorHighOn := T#2S,
timErrorHighOff := T#5S
),
// Temperature sensor negolyt tank inlet
stConfigNegolytTempTankInlet := (iAIMax := 32767, iAIMin := -32768, rPVMax := 3276.7, rPVMin := -3276.8, sUnit := '°C'),
stEWLNegolytTempTankInlet := (rErrorMin := -10, rWarningMin := -5, rWarningMax := 45, rErrorMax := 60),
stEWLNegolytTempTankInlet := (rErrorMin := -10, rWarningMin := -5, rWarningMax := 50, rErrorMax := 60),
stEWDNegolytTempTankInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#5S,
timErrorLowOn := T#2S,
timErrorLowOff := T#5S,
timWarningLowOn := T#5S,
timWarningLowOn := T#2S,
timWarningLowOff := T#5S,
timWarningHighOn := T#5S,
timWarningHighOn := T#2S,
timWarningHighOff := T#5S,
timErrorHighOn := T#5S,
timErrorHighOn := T#2S,
timErrorHighOff := T#5S
),
@@ -115,7 +149,7 @@ VAR_GLOBAL
// Index 0x80n0:02 "Presentation" = Signed(0) -> Resolution 1/10°C
// Index 0x80n0:19 "RTD Element" = PT100(0)
stConfigVoltageSegment := (iAIMax := 32767, iAIMin := 0, rPVMax := 150, rPVMin := 0, sUnit := 'V'),
stEWLVoltageSegment := (rErrorMin := 50, rWarningMin := 55, rWarningMax := 75, rErrorMax := 80),
stEWLVoltageSegment := (rErrorMin := 50, rWarningMin := 55, rWarningMax := 75, rErrorMax := 79),
stEWDVoltageSegment :=
(
timHardwareSignalLevelOn := T#0S,
@@ -135,24 +169,51 @@ VAR_GLOBAL
// General settings
// ===========================
// Pump on power
// Pump on power (%)
rPumpPosolytOnPower : REAL := 70.0;
rPumpNegolytOnPower : REAL := 70.0;
// Unit voltage pumps shutoff threshold
rPumpshutoffThreshold : REAL := 25.0;
// Unit voltage pumps shutoff threshold (Volt)
rPumpshutoffThreshold : REAL := 15.0;
// Minimum unit voltage for startup
// Minimum unit voltage required for inverter startup (Volt)
rMinimumUnitVoltage : REAL := 49.0;
// Delta value to minimum unit voltage for shutdown discharge (Volt)
rDeltaUnitVoltageShutdownDischarge : REAL := 5.0;
// Maximum absolute voltage difference
// between units in the same module
rMaxAbsDiffVoltageUnitsOnModule : REAL := 5.0;
// Maximum absolute voltage difference
// between Modules
// between Modules (Volt)
rMaxAbsDiffVoltageModulesInString : REAL := 10.0;
// Minimum absolute power command to enable battery (Watt)
diMinimumAbsPowerForEnable : DINT := 100;
// Maximum allowed charging power (Watt)
diMaxStringChargingPower : DINT := -30_000;
// Maximum allowed discharging power (Watt)
diMaxStringDischargePower : DINT := 30_000;
// Inverter ip address
sInverterIp : STRING := '192.168.0.1';
// Absolute shutdown discharge power (Watt)
rAbsShutdownDischargePower : REAL := 5_000;
// Allow inverter fast shutdown discharge
xShutdownDischargeWithInverter : BOOL := TRUE;
// String fully charged voltage (Volt)
rStringFullyChargedVoltage : REAL := 888.0;
// String empty voltage (Volt)
rStringEmptyVoltage : REAL := 672.0;
END_VAR]]></Declaration>
</GVL>
</TcPlcObject>

View File

@@ -9,13 +9,15 @@ VAR_GLOBAL
sModelname := 'all liquid',
sSerialnumber := '202312151643',
sBMSVersion := '0.8.0',
uiTotalParallelMembers := 2);
uiTotalParallelMembers := 2,
eChargeStatus := E_CHARGE_STATUS.UNDEFINED,
eBatteryStatus := E_BATTERY_STATUS.OFF);
// Modbus default config
mb_Input_Coils : ARRAY [0..255] OF BOOL;
mb_Output_Coils : ARRAY [0..255] OF BOOL;
mb_Input_Registers : ARRAY [0..255] OF WORD;
mb_Output_Registers : ARRAY [0..255] OF WORD;
//mb_Input_Coils : ARRAY [0..255] OF BOOL;
//mb_Output_Coils : ARRAY [0..255] OF BOOL;
//mb_Input_Registers : ARRAY [0..255] OF WORD;
//mb_Output_Registers : ARRAY [0..255] OF WORD;
END_VAR]]></Declaration>
</GVL>
</TcPlcObject>