Files
infineon_plc/PLC/01_Stationen/HVTester/POUs/FB_HVTester.TcPOU
2026-03-19 19:40:01 +01:00

114 lines
3.7 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<POU Name="FB_HVTester" Id="{63fd7fbb-2896-492c-ad94-827a20571a58}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_HVTester EXTENDS FB_PackMLGeneric
VAR_INPUT
xOpenChambers : BOOL;
xReleaseAlarms : BOOL;
xConfirmAlarms : BOOL;
END_VAR
VAR_OUTPUT
xDoorOpen : BOOL;
xTestChamberOpen : BOOL;
END_VAR
VAR_IN_OUT
stIO : ST_HVTester_IO;
stHMIInterface : ST_HMI_HVTester;
END_VAR
VAR
_fbDoorValve : FB_Valve('Door');
_stDoorValveConfig : ST_ValveConfig := (xNormallyOpen := TRUE);
_fbTestChamberValve : FB_Valve('Chamber');
_stTestChamberValveConfig : ST_ValveConfig;
_fbReleaseChamberMovement : FB_Valve('Release Chamber');
_stReleaseValveConfig : ST_ValveConfig;
_xFirstCycle : BOOL := TRUE;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[IF _xFirstCycle THEN
_xFirstCycle := FALSE;
stHMIInterface.stDoorValve.stInterlock.asSafetyINTLKName[0] := 'Door collision sensor';
END_IF
_fbDoorValve.wSafetyINTLK.0 := stIO.i_xDoorCollisionDetectOk;
_fbDoorValve(
xReleaseErrors:= xReleaseAlarms,
stValveConfig:= _stDoorValveConfig,
xReleaseManualMode:= _xReleaseManualMode,
xConfirmAlarms:= xConfirmAlarms,
stIO := stIO.stValveDoor,
stHMIInterface:= stHMIInterface.stDoorValve);
_fbTestChamberValve(
xReleaseErrors:= xReleaseAlarms,
stValveConfig:= _stTestChamberValveConfig,
xReleaseManualMode:= _xReleaseManualMode,
xConfirmAlarms:= xConfirmAlarms,
stIO := stIO.stValveTestChamber,
stHMIInterface:= stHMIInterface.stTestChamberValve);
_fbReleaseChamberMovement(
xAutomaticOpen := TRUE,
xReleaseErrors:= xReleaseAlarms,
stValveConfig:= _stReleaseValveConfig,
xReleaseManualMode:= _xReleaseManualMode,
xConfirmAlarms:= xConfirmAlarms,
stIO := stIO.stValveReleaseChamber,
stHMIInterface:= stHMIInterface.stReleaseChamberValve);
// Call base sm
SUPER^(stPackMLHMIInterface := stHMIInterface.stStationCmds);
// Copy to output
xDoorOpen := _fbDoorValve.IsOpen;
xTestChamberOpen := _fbTestChamberValve.IsOpen;]]></ST>
</Implementation>
<Method Name="FB_Init" Id="{2ed378bb-debf-402c-b944-0cc5602f1aec}">
<Declaration><![CDATA[//FB_Init is always available implicitly and it is used primarily for initialization.
//The return value is not evaluated. For a specific influence, you can also declare the
//methods explicitly and provide additional code there with the standard initialization
//code. You can evaluate the return value.
METHOD FB_Init: BOOL
VAR_INPUT
bInitRetains: BOOL; // TRUE: the retain variables are initialized (reset warm / reset cold)
bInCopyCode: BOOL; // TRUE: the instance will be copied to the copy code afterward (online change)
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Door valve config
_stDoorValveConfig.xHasOpenFeedback := TRUE;
_stDoorValveConfig.xHasClosedFeedback := TRUE;
_stDoorValveConfig.timTimeoutOpen := T#10S;
_stDoorValveConfig.timTimeoutClose := T#10S;
_stDoorValveConfig.xNormallyOpen := TRUE;
// First safety interlock is the collision sensor
_fbDoorValve.wSafetyINTLKUsed.0 := 1;
// Test chamber valve config
_stTestChamberValveConfig.xHasOpenFeedback := TRUE;
_stTestChamberValveConfig.xHasClosedFeedback := TRUE;
_stTestChamberValveConfig.timTimeoutOpen := T#10S;
_stTestChamberValveConfig.timTimeoutClose := T#10S;
_stTestChamberValveConfig.xNormallyOpen := TRUE;
// Open test chamber normally after restart
_fbTestChamberValve.xAutomaticOpen := TRUE;
// Release valve config
_stReleaseValveConfig.xHasOpenFeedback := FALSE;
_stReleaseValveConfig.xHasClosedFeedback := FALSE;
_stReleaseValveConfig.timTimeoutOpen := T#0S;
_stReleaseValveConfig.timTimeoutClose := T#0S;]]></ST>
</Implementation>
</Method>
</POU>
</TcPlcObject>