Added inverter startup timeout to GVL_CONFIG and enabled inverter errors

This commit is contained in:
Matthias Heisig
2025-09-11 16:32:53 +02:00
parent 0d3369d54d
commit 8bd2e9a1ea
7 changed files with 400 additions and 388 deletions

View File

@@ -257,6 +257,8 @@ VAR_GLOBAL PERSISTENT
// Inverter ip address for string 2
sInverterIpString2 : STRING := '192.168.42.20';
timInverterStartupTimeout : TIME := T#2m;
// Absolute shutdown discharge power (Watt)
// 12.000 W -> 1.000 W per unit
rAbsShutdownDischargePower : REAL := 6_500;

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<POU Name="FB_Module" Id="{87be924f-018d-4c09-997b-f0c0054414cc}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_Module
VAR_INPUT

View File

@@ -54,6 +54,8 @@ VAR_INPUT
// String inverter ip
sInverterIP : STRING;
timInverterStartupTimeout : TIME;
xECWcState AT %I* : BOOL;
xIsolationOKL1 AT %I* : BOOL;
@@ -191,7 +193,7 @@ VAR
_xEnableInverter : BOOL;
// Fault timer for inverter startup
_tonInverterStartupTimeout : TON := (PT := T#3M);
_tonInverterStartupTimeout : TON;
// Fault timer for inverter shutdown
_tonInverterShutdownError : TON := (PT := T#10S);
@@ -600,7 +602,7 @@ CASE _iState OF
END_IF
22: // Wait for inverter to be ready
_tonInverterStartupTimeout(IN := TRUE);
_tonInverterStartupTimeout(IN := TRUE, PT := timInverterStartupTimeout);
IF _fbInverter.xActive AND (NOT _fbInverter.xError) THEN
CASE eOperationMode OF
E_STRING_OPERATING_MODE.SAFETY_CHECK:

View File

@@ -433,6 +433,7 @@ _afbStrings[0](
xErrorShutdown := _xErrorShutdown,
xStartBalancing := _xStartBalancing,
sInverterIP := GVL_CONFIG.sInverterIpString1,
timInverterStartupTimeout := GVL_CONFIG.timInverterStartupTimeout,
rPowerInverter := _arPowerString[0],
xInSafetyCheckMode := _xInSafetyCheckMode,
stHMIInterface:= GVL_SCADA.stHMIInterface[0],
@@ -495,6 +496,7 @@ _afbStrings[1](
xErrorShutdown := _xErrorShutdown,
xStartBalancing := _xStartBalancing,
sInverterIP := GVL_CONFIG.sInverterIpString2,
timInverterStartupTimeout := GVL_CONFIG.timInverterStartupTimeout,
rPowerInverter := _arPowerString[1],
xInSafetyCheckMode := _xInSafetyCheckMode,
stHMIInterface:= GVL_SCADA.stHMIInterface[1],

View File

@@ -379,9 +379,11 @@ CASE _iState OF
_iState := 1001;
1001: // Error state, wait for reset
IF xReset AND (NOT xEnable) AND (NOT _xErrorInverter) AND (NOT _xErrorCyclicData) AND xHeartbeatOk THEN
//IF xReset AND (NOT xEnable) AND (NOT _xErrorInverter) AND (NOT _xErrorCyclicData) AND xHeartbeatOk THEN
IF xReset AND (NOT xEnable) AND (NOT _xErrorCyclicData) AND xHeartbeatOk THEN
_eRequestedState := E_KACO_PCU_REQUESTED_STATE.OFF;
xError := FALSE;
_xErrorInverter := FALSE;
_xFaultInverter := FALSE;
_xErrorCyclicDataLedge := FALSE;
_xHeartBeatNOK := FALSE;
@@ -773,8 +775,12 @@ ELSE
_xErrorInverter := FALSE;
END_IF
IF _eCurrentState = E_KACO_CURRENT_STATE.FAULT AND xReleasePower THEN
_xErrorInverter := TRUE;
IF _eCurrentState = E_KACO_CURRENT_STATE.FAULT THEN// AND xReleasePower THEN
IF (NOT xReleasePower) AND _stPCUState.ePCUError = E_KACO_PCU_ERROR.UNDER_VOLT THEN
_xErrorInverter := FALSE;
ELSE
_xErrorInverter := TRUE;
END_IF
END_IF
// evaluate modbus errors

View File

@@ -263,7 +263,7 @@
</System>
<Plc>
<Project GUID="{9AE64910-5EB2-4866-93FD-EFE059C38C36}" Name="PLC" PrjFilePath="PLC\PLC.plcproj" TmcFilePath="PLC\PLC.tmc" ReloadTmc="true" AmsPort="851" FileArchiveSettings="#x000e" CopyTmcToTarget="true" CopyTpyToTarget="false" SymbolicMapping="true">
<Instance Id="#x08502000" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcHash="{A0BDDF9C-C9F7-55C1-187A-F0E26785FA79}" TmcPath="PLC\PLC.tmc">
<Instance Id="#x08502000" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcHash="{226EDC90-F598-F55D-C069-B495ABC8A99B}" TmcPath="PLC\PLC.tmc">
<Name>PLC Instance</Name>
<CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID>
<Vars VarGrpType="2" AreaNo="1">
@@ -272,6 +272,31 @@
<Name>MAIN._xShowAckEmergencyStop</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN.xSafetyRun</Name>
<Comment><![CDATA[ Safety]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN.xSafetyErrAck</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._xShowErrorOnButton</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTowerLight.xRedLight</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTowerLight.xYellowLight</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTowerLight.xGreenLight</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._afbStrings[0].xCloseDCCB</Name>
<Comment><![CDATA[ Signal to close dc circuit breaker]]></Comment>
@@ -1276,31 +1301,6 @@
<Comment><![CDATA[ Motor speed setpoint]]></Comment>
<Type>INT</Type>
</Var>
<Var>
<Name>MAIN.xSafetyRun</Name>
<Comment><![CDATA[ Safety]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN.xSafetyErrAck</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._xShowErrorOnButton</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTowerLight.xRedLight</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTowerLight.xYellowLight</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTowerLight.xGreenLight</Name>
<Type>BOOL</Type>
</Var>
</Vars>
<Vars VarGrpType="1">
<Name>PlcTask Inputs</Name>
@@ -1312,6 +1312,95 @@
<Name>MAIN.xNAProtectionOK</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN.xSafetyResterTaster</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._xHarwareResetButton</Name>
<Comment><![CDATA[ Hardware reset button]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbSafety.xVoltagesInRange</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbSafety.xPressureInRange</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbSafety.xTemperaturesInRange</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._uiEtherCATState</Name>
<Comment><![CDATA[ String EtherCAT state]]></Comment>
<Type>UINT</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString1.iAnalogValue</Name>
<Comment><![CDATA[ Analog input value]]></Comment>
<Type>INT</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString1.xUnderrange</Name>
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString1.xOverrange</Name>
<Comment><![CDATA[ Input is overloaded]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString1.xErrorCard</Name>
<Comment><![CDATA[ Input card has error
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString2.iAnalogValue</Name>
<Comment><![CDATA[ Analog input value]]></Comment>
<Type>INT</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString2.xUnderrange</Name>
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString2.xOverrange</Name>
<Comment><![CDATA[ Input is overloaded]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString2.xErrorCard</Name>
<Comment><![CDATA[ Input card has error
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetBMS.iAnalogValue</Name>
<Comment><![CDATA[ Analog input value]]></Comment>
<Type>INT</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetBMS.xUnderrange</Name>
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetBMS.xOverrange</Name>
<Comment><![CDATA[ Input is overloaded]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetBMS.xErrorCard</Name>
<Comment><![CDATA[ Input card has error
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._afbStrings[0].xECWcState</Name>
<Type>BOOL</Type>
@@ -7013,95 +7102,6 @@
<Var>
<Name>MAIN._afbStrings[1]._fbStringCurrent.xErrorCard</Name>
<Comment><![CDATA[ Input card has error
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN.xSafetyResterTaster</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._xHarwareResetButton</Name>
<Comment><![CDATA[ Hardware reset button]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbSafety.xVoltagesInRange</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbSafety.xPressureInRange</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbSafety.xTemperaturesInRange</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._uiEtherCATState</Name>
<Comment><![CDATA[ String EtherCAT state]]></Comment>
<Type>UINT</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString1.iAnalogValue</Name>
<Comment><![CDATA[ Analog input value]]></Comment>
<Type>INT</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString1.xUnderrange</Name>
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString1.xOverrange</Name>
<Comment><![CDATA[ Input is overloaded]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString1.xErrorCard</Name>
<Comment><![CDATA[ Input card has error
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString2.iAnalogValue</Name>
<Comment><![CDATA[ Analog input value]]></Comment>
<Type>INT</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString2.xUnderrange</Name>
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString2.xOverrange</Name>
<Comment><![CDATA[ Input is overloaded]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetSCSString2.xErrorCard</Name>
<Comment><![CDATA[ Input card has error
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetBMS.iAnalogValue</Name>
<Comment><![CDATA[ Analog input value]]></Comment>
<Type>INT</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetBMS.xUnderrange</Name>
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetBMS.xOverrange</Name>
<Comment><![CDATA[ Input is overloaded]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._fbTempCabinetBMS.xErrorCard</Name>
<Comment><![CDATA[ Input card has error
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
<Type>BOOL</Type>
</Var>