Added Doppelhoeckertest

This commit is contained in:
Matthias Heisig
2025-06-10 21:04:06 +02:00
parent 58f3c751d3
commit 6fe10cc58c
7 changed files with 376 additions and 297 deletions

View File

@@ -29,6 +29,7 @@ VAR
_iStateSafetyCheck : INT;
_iStateBalancing : INT;
_iStatePrecharge : INT;
_iStateDH : INT;
// Start safety check mode
_xStartSafetyCheck : BOOL;
@@ -168,6 +169,9 @@ VAR
_xGetPowerMeterData : BOOL;
_rPowerDH : REAL;
_fbTONDHCycleTime : TON := (PT := T#15M);
//_fbKaco : FB_PowerSupplyKaco('Kaco');
//_xEnableKaco : BOOL;
END_VAR
@@ -655,6 +659,75 @@ CASE _eBMSControlMode OF
_eBMSControlMode := GVL_SCADA.eRequestedControlMode;
END_IF
SM_PRECHARGE();
E_BMS_CONTROL_MODE.DH:
_eStringOpMode := E_STRING_OPERATING_MODE.AUTOMATIC;
_xAllComponentsToManualMode := FALSE;
_xInSafetyCheckMode := FALSE;
_xReleaseManualMode := FALSE;
// Goto error state if a string has an error
IF _xStringsErrorActive THEN
_iStateDH := 1000;
END_IF
CASE _iStateDH OF
0: // Idle, wait for command
_rAutoPowerRequest := DINT_TO_REAL(GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic);
IF (ABS(_rAutoPowerRequest) > 100.0) THEN
_rPowerDH := _rAutoPowerRequest;
_fbTONDHCycleTime(IN := TRUE);
_iStateDH := 10;
END_IF
10: // First power cycle
_fbTONDHCycleTime(IN := TRUE);
IF _fbTONDHCycleTime.Q THEN
_rAutoPowerRequest := 0;
GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic := 0;
_fbTONDHCycleTime(IN := FALSE);
_iStateDH := 20;
END_IF
20: // First pause
_fbTONDHCycleTime(IN := TRUE);
IF _fbTONDHCycleTime.Q THEN
_rAutoPowerRequest := _rPowerDH;
GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic := REAL_TO_DINT(_rAutoPowerRequest);
_fbTONDHCycleTime(IN := FALSE);
_iStateDH := 30;
END_IF
30: // Second power phase
_fbTONDHCycleTime(IN := TRUE);
IF _fbTONDHCycleTime.Q THEN
_rAutoPowerRequest := 0;
GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic := 0;
_fbTONDHCycleTime(IN := FALSE);
_iStateDH := 0;
END_IF
1000: // Error state
_rAutoPowerRequest := 0;
_rPowerDH := 0;
GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic := 0;
_fbTONDHCycleTime(IN := FALSE);
_iStateDH := 1010;
1010: // Wait for reset
IF _xConfirmAlarms THEN
_iStateDH := 0;
END_IF
END_CASE
//IF (_iState <> 30) OR GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic = 0 THEN
//END_IF
IF (GVL_SCADA.eRequestedControlMode <> _eBMSControlMode) AND (GVL_SCADA.xCanChangeControlMode) THEN
_eBMSControlMode := GVL_SCADA.eRequestedControlMode;
END_IF
SM_AUTO();
GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic := REAL_TO_DINT(_rAutoPowerRequest);
END_CASE
GVL_SCADA.xCanChangeControlMode := _xCanChangeMode;