Relinked everything with HAL and Execute pattern
- Switched to BaseConponents V2.0
This commit is contained in:
@@ -3,6 +3,10 @@
|
||||
<DUT Name="ST_Aligner_IO" Id="{2573b629-32bc-4e57-b75e-bbc93eacf509}">
|
||||
<Declaration><![CDATA[TYPE ST_Aligner_IO :
|
||||
STRUCT
|
||||
stAxisX : ST_AxisPTP_IO;
|
||||
stAxisY : ST_AxisPTP_IO;
|
||||
|
||||
stValveVacuum : ST_Valve_IO;
|
||||
i_xVacuumOk AT %I* : BOOL;
|
||||
|
||||
i_diXOffset AT %I* : DINT;
|
||||
|
||||
@@ -12,17 +12,13 @@ VAR_OUTPUT
|
||||
xVacuumEnabled : BOOL;
|
||||
END_VAR
|
||||
VAR_IN_OUT
|
||||
stIO : ST_Aligner_IO;
|
||||
stHMIInterface : ST_HMI_Aligner;
|
||||
END_VAR
|
||||
VAR
|
||||
_fbValveVacuum : FB_Valve('Vacuum');
|
||||
_stValveVacuumConfig : ST_ValveConfig;
|
||||
|
||||
xVacuumOk AT %I* : BOOL;
|
||||
|
||||
diXOffset AT %I* : DINT;
|
||||
diYOffset AT %I* : DINT;
|
||||
|
||||
_fbXAxis : FB_AxisPTP;
|
||||
_fbYAxis : FB_AxisPTP;
|
||||
|
||||
@@ -40,7 +36,8 @@ END_VAR
|
||||
lrAcceleration:= 0,
|
||||
lrDecelleration:= 0,
|
||||
lrJerk:= 0,
|
||||
xConfirmAlarms:= xConfirmAlarms);
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stAxisX);
|
||||
|
||||
_fbYAxis(
|
||||
xInvertCalibrationCam:= FALSE,
|
||||
@@ -51,7 +48,8 @@ _fbYAxis(
|
||||
lrAcceleration:= 0,
|
||||
lrDecelleration:= 0,
|
||||
lrJerk:= 0,
|
||||
xConfirmAlarms:= xConfirmAlarms);
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stAxisY);
|
||||
|
||||
_fbValveVacuum(
|
||||
xAutomaticOpen:= xEnableVacuum,
|
||||
@@ -59,7 +57,8 @@ _fbValveVacuum(
|
||||
stValveConfig:= _stValveVacuumConfig,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stHMIInterface:= stHMIInterface.stVacuumValve);
|
||||
stHMIInterface:= stHMIInterface.stVacuumValve,
|
||||
stIO := stIO.stValveVacuum);
|
||||
|
||||
|
||||
// =============================
|
||||
@@ -70,7 +69,7 @@ SUPER^(stPackMLHMIInterface := stHMIInterface.stStationCmds);
|
||||
_rtExecute(CLK:= xExecute, Q=> _xStartAlign);
|
||||
|
||||
// Handle enable disable vacuum command
|
||||
xVacuumEnabled := xVacuumOk;]]></ST>
|
||||
xVacuumEnabled := stIO.i_xVacuumOk;]]></ST>
|
||||
</Implementation>
|
||||
<Method Name="FB_init" Id="{5048e086-25a4-4fbb-bf29-7a016bcf2277}">
|
||||
<Declaration><![CDATA[//FB_Init is always available implicitly and it is used primarily for initialization.
|
||||
@@ -114,23 +113,64 @@ VAR_INST
|
||||
|
||||
_uiRuns : UINT;
|
||||
_tonWait : TON;
|
||||
|
||||
_xAxisXMoved : BOOL;
|
||||
_xAxisYMoved : BOOL;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[CASE _iSSM OF
|
||||
// Start first alignment
|
||||
// Calculate delta to move
|
||||
0:
|
||||
_deltaX := DINT_TO_REAL(diXOffset) * -0.001;
|
||||
_deltaY := ((DINT_TO_REAL(diYOffset) * 0.001) - 37.5) * -1;
|
||||
// Middle of camera is X = 0 AND Y = 37.5
|
||||
_deltaX := DINT_TO_REAL(stIO.i_diXOffset) * -0.001;
|
||||
_deltaY := ((DINT_TO_REAL(stIO.i_diYOffset) * 0.001) - 37.5) * -1;
|
||||
|
||||
IF (ABS(_deltaX) < 10.0) AND (ABS(_deltaY) < 10.0) AND (NOT _fbXAxis.xError) AND (NOT _fbYAxis.xError) THEN
|
||||
_fbXAxis.M_MoveRel(lrRelDist := _deltaX);
|
||||
_fbYAxis.M_MoveRel(lrRelDist := _deltaY);
|
||||
_xAxisXMoved := FALSE;
|
||||
_xAxisYMoved := FALSE;
|
||||
_iSSM := 10;
|
||||
END_IF
|
||||
|
||||
// Start axis movement
|
||||
5:
|
||||
// Start X-Axis movement
|
||||
IF (NOT _xAxisXMoved) THEN
|
||||
CASE _fbXAxis.M_MoveRel(lrRelDist := _deltaX) OF
|
||||
E_CmdResult.ACCEPTED:
|
||||
_xAxisXMoved := TRUE;
|
||||
|
||||
E_CmdResult.BUSY:
|
||||
;
|
||||
|
||||
E_CmdResult.REJECTED,
|
||||
E_CmdResult.ERROR:
|
||||
M_CmdAbort();
|
||||
END_CASE
|
||||
END_IF
|
||||
|
||||
// Start Y-Axis movement
|
||||
IF (NOT _xAxisYMoved) THEN
|
||||
CASE _fbYAxis.M_MoveRel(lrRelDist := _deltaY) OF
|
||||
E_CmdResult.ACCEPTED:
|
||||
_xAxisYMoved := TRUE;
|
||||
|
||||
E_CmdResult.BUSY:
|
||||
;
|
||||
|
||||
E_CmdResult.REJECTED,
|
||||
E_CmdResult.ERROR:
|
||||
M_CmdAbort();
|
||||
END_CASE
|
||||
END_IF
|
||||
|
||||
// Wait for all axes to be started
|
||||
IF _xAxisXMoved AND _xAxisYMoved THEN
|
||||
_iSSM := 10;
|
||||
END_IF
|
||||
|
||||
// Wait for axis movements to be done
|
||||
10:
|
||||
IF (NOT _fbXAxis.xBusy) AND (NOT _fbYAxis.xBusy) THEN
|
||||
IF _fbXAxis.xDone AND _fbYAxis.xDone THEN
|
||||
_uiRuns := _uiRuns + 1;
|
||||
|
||||
// Do alignment twice because of backlash in aligner station
|
||||
@@ -141,7 +181,7 @@ END_VAR]]></Declaration>
|
||||
END_IF
|
||||
END_IF
|
||||
|
||||
// Wait 1 second to stabelise reading
|
||||
// Wait some time to stabelize reading
|
||||
20:
|
||||
_tonWait(IN := TRUE, PT := T#2S);
|
||||
IF _tonWait.Q THEN
|
||||
@@ -157,44 +197,132 @@ END_CASE]]></ST>
|
||||
</Method>
|
||||
<Method Name="M_Resetting" Id="{015c2bf3-1e45-46dd-93fe-a1f154bfd906}">
|
||||
<Declaration><![CDATA[METHOD PROTECTED M_Resetting
|
||||
VAR
|
||||
_xFailed : BOOL;
|
||||
VAR_INST
|
||||
_xAxisXEnabled : BOOL;
|
||||
_xAxisYEnabled : BOOL;
|
||||
|
||||
_xAxisXHomed : BOOL;
|
||||
_xAxisYHomed : BOOL;
|
||||
|
||||
_xAxisXMoved : BOOL;
|
||||
_xAxisYMoved : BOOL;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[CASE _iSSM OF
|
||||
// Reset axis flags
|
||||
0:
|
||||
// Enable axes
|
||||
_fbXAxis.xEnable := TRUE;
|
||||
_fbYAxis.xEnable := TRUE;
|
||||
_xAxisXEnabled := FALSE;
|
||||
_xAxisYEnabled := FALSE;
|
||||
_xAxisXHomed := FALSE;
|
||||
_xAxisYHomed := FALSE;
|
||||
_xAxisXMoved := FALSE;
|
||||
_xAxisYMoved := FALSE;
|
||||
|
||||
IF _fbXAxis.xEnabled AND _fbYAxis.xEnabled THEN
|
||||
IF (NOT _fbXAxis.xHomed) THEN
|
||||
IF (NOT _fbXAxis.M_Homing(lrHomingPosition := BC.Tc2_MC2.DEFAULT_HOME_POSITION)) THEN
|
||||
_xFailed := TRUE;
|
||||
END_IF
|
||||
END_IF
|
||||
|
||||
IF (NOT _fbYAxis.xHomed) THEN
|
||||
IF (NOT _fbYAxis.M_Homing(lrHomingPosition := BC.Tc2_MC2.DEFAULT_HOME_POSITION)) THEN
|
||||
_xFailed := TRUE;
|
||||
END_IF
|
||||
END_IF
|
||||
_iSSM := 5;
|
||||
|
||||
IF (NOT _xFailed) THEN
|
||||
_iSSM := 10;
|
||||
ELSE
|
||||
M_CmdAbort();
|
||||
END_IF
|
||||
|
||||
// Enable axes
|
||||
5:
|
||||
// Enable X-Axis
|
||||
IF (NOT _xAxisXEnabled) THEN
|
||||
CASE _fbXAxis.M_Enable() OF
|
||||
E_CmdResult.ACCEPTED:
|
||||
_xAxisXEnabled := TRUE;
|
||||
|
||||
E_CmdResult.BUSY:
|
||||
;
|
||||
|
||||
E_CmdResult.REJECTED,
|
||||
E_CmdResult.ERROR:
|
||||
M_CmdAbort();
|
||||
END_CASE
|
||||
END_IF
|
||||
|
||||
10:
|
||||
// Home axes
|
||||
// Enable Y-Axis
|
||||
IF (NOT _xAxisYEnabled) THEN
|
||||
CASE _fbYAxis.M_Enable() OF
|
||||
E_CmdResult.ACCEPTED:
|
||||
_xAxisYEnabled := TRUE;
|
||||
|
||||
E_CmdResult.BUSY:
|
||||
;
|
||||
|
||||
E_CmdResult.REJECTED,
|
||||
E_CmdResult.ERROR:
|
||||
M_CmdAbort();
|
||||
END_CASE
|
||||
END_IF
|
||||
|
||||
// Check if both could be enabled
|
||||
IF _xAxisXEnabled AND _xAxisYEnabled THEN
|
||||
_iSSM := 10;
|
||||
END_IF
|
||||
|
||||
|
||||
// Wait for axes to be enabled
|
||||
6:
|
||||
IF _fbXAxis.xDone AND _fbYAxis.xDone THEN
|
||||
IF (NOT _fbXAxis.M_MoveAbs(0.0)) OR (NOT _fbYAxis.M_MoveAbs(0.0)) THEN
|
||||
M_CmdAbort();
|
||||
END_IF
|
||||
|
||||
_iSSM := 10;
|
||||
END_IF
|
||||
|
||||
IF _fbXAxis.xError OR _fbYAxis.xError THEN
|
||||
M_CmdAbort();
|
||||
END_IF
|
||||
|
||||
// Check axis homed state
|
||||
7:
|
||||
IF _fbXAxis.xHomed THEN
|
||||
_xAxisXHomed := TRUE;
|
||||
END_IF
|
||||
|
||||
IF _fbYAxis.xHomed THEN
|
||||
_xAxisYHomed := TRUE;
|
||||
END_IF
|
||||
|
||||
_iSSM := 10;
|
||||
|
||||
// Check if both axes are homed
|
||||
10:
|
||||
// Home X-Axis
|
||||
IF (NOT _xAxisXHomed) AND (NOT _fbXAxis.xHomed) THEN
|
||||
CASE _fbXAxis.M_Homing() OF
|
||||
E_CmdResult.ACCEPTED:
|
||||
_xAxisXHomed := TRUE;
|
||||
|
||||
E_CmdResult.BUSY:
|
||||
;
|
||||
|
||||
E_CmdResult.REJECTED,
|
||||
E_CmdResult.ERROR:
|
||||
M_CmdAbort();
|
||||
END_CASE
|
||||
END_IF
|
||||
|
||||
// Home Y-Axis
|
||||
IF (NOT _xAxisYHomed) AND (NOT _fbYAxis.xHomed) THEN
|
||||
CASE _fbYAxis.M_Homing() OF
|
||||
E_CmdResult.ACCEPTED:
|
||||
_xAxisYHomed := TRUE;
|
||||
|
||||
E_CmdResult.BUSY:
|
||||
;
|
||||
|
||||
E_CmdResult.REJECTED,
|
||||
E_CmdResult.ERROR:
|
||||
M_CmdAbort();
|
||||
END_CASE
|
||||
END_IF
|
||||
|
||||
IF _xAxisYHomed AND _xAxisYHomed THEN
|
||||
// Goto wait for homing state
|
||||
_iSSM := 15;
|
||||
ELSIF _fbXAxis.xHomed AND _fbYAxis.xHomed THEN
|
||||
// Goto move to 0 state
|
||||
_iSSM := 20;
|
||||
END_IF
|
||||
|
||||
// Wait for homing to be done
|
||||
15:
|
||||
IF (_fbXAxis.xDone OR _fbXAxis.xHomed) AND (_fbYAxis.xDone OR _fbYAxis.xHomed) THEN
|
||||
_iSSM := 20;
|
||||
END_IF
|
||||
|
||||
@@ -202,7 +330,44 @@ END_VAR]]></Declaration>
|
||||
M_CmdAbort();
|
||||
END_IF
|
||||
|
||||
// Start moving to position 0,0
|
||||
20:
|
||||
// Enable X-Axis
|
||||
IF (NOT _xAxisXMoved) THEN
|
||||
CASE _fbXAxis.M_MoveAbs(lrTargetPos := 0.0) OF
|
||||
E_CmdResult.ACCEPTED:
|
||||
_xAxisXMoved := TRUE;
|
||||
|
||||
E_CmdResult.BUSY:
|
||||
;
|
||||
|
||||
E_CmdResult.REJECTED,
|
||||
E_CmdResult.ERROR:
|
||||
M_CmdAbort();
|
||||
END_CASE
|
||||
END_IF
|
||||
|
||||
// Enable Y-Axis
|
||||
IF (NOT _xAxisYMoved) THEN
|
||||
CASE _fbYAxis.M_MoveAbs(lrTargetPos := 0.0) OF
|
||||
E_CmdResult.ACCEPTED:
|
||||
_xAxisYMoved := TRUE;
|
||||
|
||||
E_CmdResult.BUSY:
|
||||
;
|
||||
|
||||
E_CmdResult.REJECTED,
|
||||
E_CmdResult.ERROR:
|
||||
M_CmdAbort();
|
||||
END_CASE
|
||||
END_IF
|
||||
|
||||
// Check if both could be enabled
|
||||
IF _xAxisXMoved AND _xAxisYMoved THEN
|
||||
_iSSM := 25;
|
||||
END_IF
|
||||
|
||||
25:
|
||||
// Move to 0 position
|
||||
IF _fbXAxis.xDone AND _fbYAxis.xDone THEN
|
||||
M_StateComplete();
|
||||
|
||||
19
PLC/01_Stationen/Coolplate/DUTs/ST_Coolplate_IO.TcDUT
Normal file
19
PLC/01_Stationen/Coolplate/DUTs/ST_Coolplate_IO.TcDUT
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_Coolplate_IO" Id="{6e5914f9-2f5a-48bf-9a44-dda258457318}">
|
||||
<Declaration><![CDATA[TYPE ST_Coolplate_IO :
|
||||
STRUCT
|
||||
// Card inputs
|
||||
i_stStatus AT %I* : ST_SerialStatus;
|
||||
i_abyDataIn AT %I* : ARRAY[0..21] OF BYTE;
|
||||
|
||||
stTempSensor : ST_AnalogInput_IO;
|
||||
|
||||
// Card outputs
|
||||
o_stCtrl AT %Q* : ST_SerialCrl;
|
||||
o_abyDataOut AT %Q* : ARRAY[0..21] OF BYTE;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
@@ -8,17 +8,10 @@ END_VAR
|
||||
VAR_OUTPUT
|
||||
END_VAR
|
||||
VAR_IN_OUT
|
||||
stIO : ST_Coolplate_IO;
|
||||
stHMIInterface : ST_HMI_Coolplate;
|
||||
END_VAR
|
||||
VAR
|
||||
// Card inputs
|
||||
stStatus AT %I* : ST_SerialStatus;
|
||||
abyDataIn AT %I* : ARRAY[0..21] OF BYTE;
|
||||
|
||||
// Card outputs
|
||||
stCtrl AT %Q* : ST_SerialCrl;
|
||||
abyDataOut AT %Q* : ARRAY[0..21] OF BYTE;
|
||||
|
||||
_fbTempSensor : FB_AnalogInput('');
|
||||
|
||||
// Internal temp setpoint
|
||||
@@ -47,21 +40,21 @@ END_IF
|
||||
// Init card on first run
|
||||
IF _xInit THEN
|
||||
_xInit := FALSE;
|
||||
stCtrl.bInitRequest := 1;
|
||||
stIO.o_stCtrl.bInitRequest := 1;
|
||||
END_IF
|
||||
|
||||
IF stStatus.bInitAccepted THEN
|
||||
stCtrl.bInitRequest := 0;
|
||||
IF stIO.i_stStatus.bInitAccepted THEN
|
||||
stIO.o_stCtrl.bInitRequest := 0;
|
||||
END_IF
|
||||
|
||||
// Send
|
||||
IF _xSend THEN
|
||||
_xSend := FALSE;
|
||||
stCtrl.bTransmitRequest := 1;
|
||||
stIO.o_stCtrl.bTransmitRequest := 1;
|
||||
END_IF
|
||||
|
||||
IF stStatus.bTransmitAccepted THEN
|
||||
stCtrl.bTransmitRequest := 0;
|
||||
IF stIO.i_stStatus.bTransmitAccepted THEN
|
||||
stIO.o_stCtrl.bTransmitRequest := 0;
|
||||
END_IF
|
||||
|
||||
IF stHMIInterface.stSetSetpointBtn.xRequest THEN
|
||||
@@ -99,7 +92,7 @@ END_IF
|
||||
// Calculate sum
|
||||
{analysis -81}
|
||||
FOR _uiCounter := uiStartIndex TO uiEndIndex DO
|
||||
_dwChecksum := _dwChecksum + abyDataOut[_uiCounter];
|
||||
_dwChecksum := _dwChecksum + stIO.o_abyDataOut[_uiCounter];
|
||||
END_FOR
|
||||
{analysis +81}
|
||||
|
||||
@@ -130,23 +123,23 @@ END_VAR
|
||||
_dwTemp := REAL_TO_DWORD(rTemp * 10 )*10;
|
||||
_sTemp := DWORD_TO_STRING(_dwTemp);
|
||||
|
||||
abyDataOut[0] := 16#02; // STX
|
||||
abyDataOut[1] := 16#31; // Command code
|
||||
abyDataOut[2] := _sTemp[0];
|
||||
abyDataOut[3] := _sTemp[1];
|
||||
abyDataOut[4] := _sTemp[2];
|
||||
abyDataOut[5] := _sTemp[3];
|
||||
abyDataOut[6] := 16#03; // ETX
|
||||
stIO.o_abyDataOut[0] := 16#02; // STX
|
||||
stIO.o_abyDataOut[1] := 16#31; // Command code
|
||||
stIO.o_abyDataOut[2] := _sTemp[0];
|
||||
stIO.o_abyDataOut[3] := _sTemp[1];
|
||||
stIO.o_abyDataOut[4] := _sTemp[2];
|
||||
stIO.o_abyDataOut[5] := _sTemp[3];
|
||||
stIO.o_abyDataOut[6] := 16#03; // ETX
|
||||
|
||||
M_CalcChecksum(
|
||||
uiStartIndex:= 1,
|
||||
uiEndIndex:= 5,
|
||||
byHigh=> abyDataOut[7],
|
||||
byLow=> abyDataOut[8]);
|
||||
byHigh=> stIO.o_abyDataOut[7],
|
||||
byLow=> stIO.o_abyDataOut[8]);
|
||||
|
||||
abyDataOut[9] := 16#0D; // <CR>
|
||||
stIO.o_abyDataOut[9] := 16#0D; // <CR>
|
||||
|
||||
stCtrl.byOutputLength := 10;]]></ST>
|
||||
stIO.o_stCtrl.byOutputLength := 10;]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
</POU>
|
||||
|
||||
18
PLC/01_Stationen/Etcher/DUTs/ST_Etcher_IO.TcDUT
Normal file
18
PLC/01_Stationen/Etcher/DUTs/ST_Etcher_IO.TcDUT
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_Etcher_IO" Id="{64179608-1e4c-4f28-bd46-cef8b5e3e1d0}">
|
||||
<Declaration><![CDATA[TYPE ST_Etcher_IO :
|
||||
STRUCT
|
||||
stAxisSpinner : ST_AxisPTP_IO;
|
||||
stValveDoor : ST_Valve_IO;
|
||||
stValveVacuum : ST_Valve_IO;
|
||||
stValveUnlockLeft : ST_Valve_IO;
|
||||
stValveUnlockRight : ST_Valve_IO;
|
||||
stValveEjectFront : ST_Valve_IO;
|
||||
stValveEjectBack : ST_Valve_IO;
|
||||
stValveFilmetch : ST_Valve_IO;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
@@ -16,6 +16,7 @@ VAR_OUTPUT
|
||||
xVacuumEnabled : BOOL;
|
||||
END_VAR
|
||||
VAR_IN_OUT
|
||||
stIO : ST_Etcher_IO;
|
||||
stHMIInterface : ST_HMI_Etcher;
|
||||
END_VAR
|
||||
VAR
|
||||
@@ -92,7 +93,6 @@ VAR
|
||||
|
||||
// Debug
|
||||
_iState : INT;
|
||||
_xEnableSpinner : BOOL;
|
||||
_lrSpinnerVelo : LREAL := 36.0;
|
||||
_xAllCompRetracted : BOOL;
|
||||
_xChuckRemoved : BOOL;
|
||||
@@ -106,7 +106,8 @@ _fbValveDoor(
|
||||
xReleaseErrors:= xReleaseAlarms,
|
||||
stValveConfig:= _stValveDoorCfg,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stValveDoor,
|
||||
stHMIInterface:= stHMIInterface.stDoorValve);
|
||||
|
||||
|
||||
@@ -126,7 +127,8 @@ _fbValveVacuum(
|
||||
xReleaseErrors:= xReleaseAlarms,
|
||||
stValveConfig:= _stValveVacuumConfig,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stValveVacuum,
|
||||
stHMIInterface:= stHMIInterface.stVacuumValve);
|
||||
|
||||
_fbUnlockLeft(
|
||||
@@ -134,7 +136,8 @@ _fbUnlockLeft(
|
||||
xReleaseErrors:= xReleaseAlarms,
|
||||
stValveConfig:= _stValveUnlockLeftCfg,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stValveUnlockLeft,
|
||||
stHMIInterface:= stHMIInterface.stChuckUnlockLeft);
|
||||
|
||||
_fbUnlockRight(
|
||||
@@ -142,7 +145,8 @@ _fbUnlockRight(
|
||||
xReleaseErrors:= xReleaseAlarms,
|
||||
stValveConfig:= _stValveUnlockRightCfg,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stValveUnlockRight,
|
||||
stHMIInterface:= stHMIInterface.stChuckUnlockRight);
|
||||
|
||||
_fbEjectFront(
|
||||
@@ -150,7 +154,8 @@ _fbEjectFront(
|
||||
xReleaseErrors:= xReleaseAlarms,
|
||||
stValveConfig:= _stValveClampingFrontCfg,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stValveEjectFront,
|
||||
stHMIInterface:= stHMIInterface.stChuckEjectFront);
|
||||
|
||||
_fbEjectBack(
|
||||
@@ -158,18 +163,19 @@ _fbEjectBack(
|
||||
xReleaseErrors:= xReleaseAlarms,
|
||||
stValveConfig:= _stValveEjectBackCfg,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stValveEjectBack,
|
||||
stHMIInterface:= stHMIInterface.stChuckEjectBack);
|
||||
|
||||
_xAllCompRetracted := _fbUnlockLeft.IsClosed AND _fbUnlockRight.IsClosed AND _fbEjectFront.IsClosed AND _fbEjectBack.IsClosed;
|
||||
|
||||
_fbSpinner(
|
||||
xEnable:= _xEnableSpinner,
|
||||
xEnablePositive:= _xEnableSpinner AND _xAllCompRetracted,
|
||||
xEnableNegative:= _xEnableSpinner AND _xAllCompRetracted,
|
||||
xEnablePositive:= _xAllCompRetracted,
|
||||
xEnableNegative:= _xAllCompRetracted,
|
||||
rOverride:= 100.0,
|
||||
lrVelocity:= _lrSpinnerVelo,
|
||||
xConfirmAlarms:= xConfirmAlarms);
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stAxisSpinner);
|
||||
|
||||
_fbRobot(stPackMLHMIInterface := stHMIInterface.stMecaCmds);
|
||||
|
||||
@@ -177,7 +183,8 @@ _fbValveEnableFilmetch(
|
||||
xReleaseErrors:= xReleaseAlarms,
|
||||
stValveConfig:= _stValveConfig,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms := xConfirmAlarms,
|
||||
xConfirmAlarms := xConfirmAlarms,
|
||||
stIO := stIO.stValveFilmetch,
|
||||
stHMIInterface:= stHMIInterface.stValveFilmetch);
|
||||
|
||||
// Call base sm
|
||||
@@ -200,15 +207,41 @@ CASE _iState OF
|
||||
|
||||
// Enable spinner
|
||||
5:
|
||||
_xEnableSpinner := TRUE;
|
||||
IF _fbSpinner.xEnabled THEN
|
||||
_iState := 6;
|
||||
CASE _fbSpinner.M_Enable() OF
|
||||
E_CmdResult.ACCEPTED:
|
||||
_iState := 6;
|
||||
|
||||
E_CmdResult.BUSY:
|
||||
;
|
||||
|
||||
E_CmdResult.REJECTED,
|
||||
E_CmdResult.ERROR:
|
||||
_iState := 900;
|
||||
END_CASE
|
||||
|
||||
// Wait for spinner to be enabled
|
||||
6:
|
||||
IF _fbSpinner.xDone THEN
|
||||
_iState := 7;
|
||||
END_IF
|
||||
|
||||
IF _fbSpinner.xError THEN
|
||||
_iState := 900;
|
||||
END_IF
|
||||
|
||||
// Start moving to zero position
|
||||
6:
|
||||
_fbSpinner.M_MoveModulo(lrTargetPos := 0.0, eMoveDirection := BC.MC_Direction.MC_Shortest_Way);
|
||||
_iState := 11;
|
||||
7:
|
||||
CASE _fbSpinner.M_MoveModulo(lrTargetPos := 0.0, eMoveDirection := BC.MC_Direction.MC_Shortest_Way) OF
|
||||
E_CmdResult.ACCEPTED:
|
||||
_iState := 11;
|
||||
|
||||
E_CmdResult.BUSY:
|
||||
;
|
||||
|
||||
E_CmdResult.REJECTED,
|
||||
E_CmdResult.ERROR:
|
||||
_iState := 900;
|
||||
END_CASE
|
||||
|
||||
// Move to zero position
|
||||
11:
|
||||
@@ -222,17 +255,34 @@ CASE _iState OF
|
||||
|
||||
// Disable axis
|
||||
12:
|
||||
_xEnableSpinner := FALSE;
|
||||
IF (NOT _fbSpinner.xEnabled) THEN
|
||||
_iState := 13;
|
||||
CASE _fbSpinner.M_Disable() OF
|
||||
E_CmdResult.ACCEPTED:
|
||||
_iState := 13;
|
||||
|
||||
E_CmdResult.BUSY:
|
||||
;
|
||||
|
||||
E_CmdResult.REJECTED,
|
||||
E_CmdResult.ERROR:
|
||||
_iState := 900;
|
||||
END_CASE
|
||||
|
||||
// Wait for spinner to be disabled
|
||||
13:
|
||||
IF _fbSpinner.xDone THEN
|
||||
_iState := 14;
|
||||
END_IF
|
||||
|
||||
IF _fbSpinner.xError THEN
|
||||
_iState := 900;
|
||||
END_IF
|
||||
|
||||
// Release clamping
|
||||
13:
|
||||
14:
|
||||
_xOpenChuckClamp := TRUE;
|
||||
|
||||
IF _fbUnlockLeft.IsOpen AND _fbUnlockRight.IsOpen THEN
|
||||
_iState := 14;
|
||||
_iState := 15;
|
||||
END_IF
|
||||
|
||||
IF _fbUnlockLeft.xError OR _fbUnlockRight.xError THEN
|
||||
@@ -240,22 +290,10 @@ CASE _iState OF
|
||||
END_IF
|
||||
|
||||
// Eject the cuck
|
||||
14:
|
||||
15:
|
||||
_xEjectChuck := TRUE;
|
||||
|
||||
IF _fbEjectFront.IsOpen AND _fbEjectBack.IsOpen THEN
|
||||
_iState := 15;
|
||||
END_IF
|
||||
|
||||
IF _fbEjectFront.xError OR _fbEjectBack.xError THEN
|
||||
_iState := 900;
|
||||
END_IF
|
||||
|
||||
// Retract ejectors
|
||||
15:
|
||||
_xEjectChuck := FALSE;
|
||||
|
||||
IF _fbEjectFront.IsClosed AND _fbEjectBack.IsClosed THEN
|
||||
_iState := 16;
|
||||
END_IF
|
||||
|
||||
@@ -263,15 +301,27 @@ CASE _iState OF
|
||||
_iState := 900;
|
||||
END_IF
|
||||
|
||||
// Wait for Chuck to be remove
|
||||
// Retract ejectors
|
||||
16:
|
||||
IF _xChuckRemoved THEN
|
||||
_xChuckRemoved := FALSE;
|
||||
_xEjectChuck := FALSE;
|
||||
|
||||
IF _fbEjectFront.IsClosed AND _fbEjectBack.IsClosed THEN
|
||||
_iState := 17;
|
||||
END_IF
|
||||
|
||||
// Retract release pins
|
||||
IF _fbEjectFront.xError OR _fbEjectBack.xError THEN
|
||||
_iState := 900;
|
||||
END_IF
|
||||
|
||||
// Wait for Chuck to be remove
|
||||
17:
|
||||
IF _xChuckRemoved THEN
|
||||
_xChuckRemoved := FALSE;
|
||||
_iState := 18;
|
||||
END_IF
|
||||
|
||||
// Retract release pins
|
||||
18:
|
||||
_xOpenChuckClamp := FALSE;
|
||||
|
||||
IF _fbUnlockLeft.IsClosed AND _fbUnlockRight.IsClosed THEN
|
||||
|
||||
18
PLC/01_Stationen/HVTester/DUTs/ST_HVTester_IO.TcDUT
Normal file
18
PLC/01_Stationen/HVTester/DUTs/ST_HVTester_IO.TcDUT
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_HVTester_IO" Id="{e4332098-37a5-407c-844f-9ed62f4ca4eb}">
|
||||
<Declaration><![CDATA[TYPE ST_HVTester_IO :
|
||||
STRUCT
|
||||
stValveDoor : ST_Valve_IO;
|
||||
stValveTestChamber : ST_Valve_IO;
|
||||
stValveReleaseChamber : ST_Valve_IO;
|
||||
|
||||
i_xDoorCollisionDetectOk AT %I* : BOOL;
|
||||
i_xVacuumOk AT %I* : BOOL;
|
||||
i_xChamberFree AT %I* : BOOL;
|
||||
i_xChamberNotFree AT %I* : BOOL;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
@@ -13,32 +13,46 @@ VAR_OUTPUT
|
||||
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;
|
||||
_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[_fbDoorValve(
|
||||
<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,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stValveDoor,
|
||||
stHMIInterface:= stHMIInterface.stDoorValve);
|
||||
|
||||
|
||||
_fbTestChamberValve(
|
||||
xReleaseErrors:= xReleaseAlarms,
|
||||
stValveConfig:= _stTestChamberValveConfig,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stValveTestChamber,
|
||||
stHMIInterface:= stHMIInterface.stTestChamberValve);
|
||||
|
||||
_fbReleaseChamberMovement(
|
||||
@@ -46,7 +60,8 @@ _fbReleaseChamberMovement(
|
||||
xReleaseErrors:= xReleaseAlarms,
|
||||
stValveConfig:= _stReleaseValveConfig,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stValveReleaseChamber,
|
||||
stHMIInterface:= stHMIInterface.stReleaseChamberValve);
|
||||
|
||||
// Call base sm
|
||||
@@ -73,6 +88,10 @@ _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;
|
||||
@@ -81,6 +100,8 @@ _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;
|
||||
|
||||
13
PLC/01_Stationen/Hotplate/DUTs/ST_Hotplate_IO.TcDUT
Normal file
13
PLC/01_Stationen/Hotplate/DUTs/ST_Hotplate_IO.TcDUT
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_Hotplate_IO" Id="{9ecd375b-67b5-481a-abf5-608608737ea7}">
|
||||
<Declaration><![CDATA[TYPE ST_Hotplate_IO :
|
||||
STRUCT
|
||||
stTempSensor : ST_AnalogInput_IO;
|
||||
|
||||
o_xEnableHotplate AT %Q* : BOOL;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
@@ -14,11 +14,10 @@ VAR_OUTPUT
|
||||
uiNextReadySlot : UINT;
|
||||
END_VAR
|
||||
VAR_IN_OUT
|
||||
stIO : ST_Hotplate_IO;
|
||||
stHMIInterface : ST_HMI_Hotplate;
|
||||
END_VAR
|
||||
VAR
|
||||
xEnableHotplate AT %Q* : BOOL;
|
||||
|
||||
// _axSlotFree : ARRAY [0..(GVL_HeatCoolConfig.HEAT_COOL_PLATES_NUM_SLOTS - 1)] OF BOOL;
|
||||
// _atonSlotTimer : ARRAY[0..(GVL_HeatCoolConfig.HEAT_COOL_PLATES_NUM_SLOTS - 1)] OF TON;
|
||||
|
||||
@@ -66,7 +65,8 @@ _fbTempSensor(
|
||||
xReleaseErrors:= xReleaseAlarms,
|
||||
xReleaseLimitErrors:= FALSE,
|
||||
xReleaseHardwareErrors:= TRUE,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stTempSensor,
|
||||
stHMIInterface=> stHMIInterface.stPV);
|
||||
|
||||
// For now get setpoint from HMI interface
|
||||
@@ -87,7 +87,7 @@ _fbLimit(
|
||||
|
||||
_fbPWMOut(
|
||||
timPeriod:= T#100MS,
|
||||
xOutput=> xEnableHotplate);
|
||||
xOutput=> stIO.o_xEnableHotplate);
|
||||
|
||||
SUPER^(stPackMLHMIInterface := stHMIInterface.stStationCmds);
|
||||
|
||||
|
||||
@@ -29,6 +29,8 @@ STRUCT
|
||||
|
||||
// (9) Filmetch
|
||||
stTank9FilmetchIO : ST_Tank_IO;
|
||||
|
||||
stValveFilmetch : ST_Valve_IO;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
|
||||
@@ -6,6 +6,11 @@ STRUCT
|
||||
i_xOverfull AT %I* : BOOL;
|
||||
i_xFull AT %I* : BOOL;
|
||||
i_xEmpty AT %I* : BOOL;
|
||||
|
||||
stValveFilling : ST_Valve_IO;
|
||||
stValveWater : ST_Valve_IO;
|
||||
stValveDrain : ST_Valve_IO;
|
||||
stValvePump : ST_Valve_IO;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
|
||||
@@ -9,6 +9,7 @@ END_VAR
|
||||
VAR_OUTPUT
|
||||
END_VAR
|
||||
VAR_IN_OUT
|
||||
stIO : ST_MediaCabinet_IO;
|
||||
stHMIInterface : ST_HMI_MediaCabinet;
|
||||
END_VAR
|
||||
VAR
|
||||
@@ -60,55 +61,64 @@ END_VAR
|
||||
<ST><![CDATA[_fbTankAceticAcidHigh(
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stTank1AceticAcidHighIO,
|
||||
stHMIInterface:= stHMIInterface.stTankAceticAcidHigh);
|
||||
|
||||
_fbTankSulfuricAcid(
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stTank2SulfuricAcidIO,
|
||||
stHMIInterface:= stHMIInterface.stTankSulfuricAcid);
|
||||
|
||||
_fbTankNitricAcid(
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stTank3NitricAcidIO,
|
||||
stHMIInterface:= stHMIInterface.stTankNitricAcid);
|
||||
|
||||
_fbTankAceticAcidLow(
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stTank4AceticAcidLowIO,
|
||||
stHMIInterface:= stHMIInterface.stTankAceticAcidLow);
|
||||
|
||||
_fbTankHydrofluoricAcid(
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stTank5HydrofluoricAcidIO,
|
||||
stHMIInterface:= stHMIInterface.stTankHydrofluoricAcid);
|
||||
|
||||
_fbTankSulfuricAcidMixing(
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stTank6SulfuricAcidMixingIO,
|
||||
stHMIInterface:= stHMIInterface.stTankSulfuricAcidMixing);
|
||||
|
||||
_fbTankHydrofluoricAcidMixing(
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stTank7HydrofluoricAcidMixingIO,
|
||||
stHMIInterface:= stHMIInterface.stTankHydrofluoricAcidMixing);
|
||||
|
||||
_fbTankSEF(
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stTank8SEFIO,
|
||||
stHMIInterface:= stHMIInterface.stTankSEF);
|
||||
|
||||
_fbTankFilmetch(
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stTank9FilmetchIO,
|
||||
stHMIInterface:= stHMIInterface.stTankFilmetch);
|
||||
|
||||
// Valves
|
||||
@@ -116,7 +126,8 @@ _fbValveFilmetchOut(
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
stValveConfig:= _stValveConfig,
|
||||
xReleaseManualMode:= _xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stValveFilmetch,
|
||||
stHMIInterface:= stHMIInterface.stValveFilmetch);
|
||||
|
||||
_fbMBMaster();
|
||||
|
||||
@@ -15,13 +15,10 @@ VAR_OUTPUT
|
||||
xError : BOOL;
|
||||
END_VAR
|
||||
VAR_IN_OUT
|
||||
stIO : ST_Tank_IO;
|
||||
stHMIInterface : ST_HMI_Tank;
|
||||
END_VAR
|
||||
VAR
|
||||
i_xOverfull AT %I* : BOOL;
|
||||
i_xFull AT %I* : BOOL;
|
||||
i_xEmpty AT %I* : BOOL;
|
||||
|
||||
_fbWaterValve : FB_Valve('Water valve');
|
||||
_fbFillingValve : FB_Valve('Filling valve');
|
||||
_fbDrainValve : FB_Valve('Drain Valve');
|
||||
@@ -50,28 +47,31 @@ END_IF
|
||||
M_HandleHMIInput();
|
||||
|
||||
// Overfull is NC so true if ok
|
||||
_wFillingValveSafetyIntlk.0 := i_xOverfull;
|
||||
_wFillingValveSafetyIntlk.0 := stIO.i_xOverfull;
|
||||
_fbFillingValve(
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
stValveConfig:= _stValveConfig,
|
||||
xReleaseManualMode:= xReleaseManualMode,
|
||||
wSafetyINTLK:= _wFillingValveSafetyIntlk,
|
||||
wSafetyINTLKUsed:= _wFillingValveSafetyIntlkUsed,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stValveFilling,
|
||||
stHMIInterface:= stHMIInterface.stFillingValve);
|
||||
|
||||
_fbWaterValve(
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
stValveConfig:= _stValveConfig,
|
||||
xReleaseManualMode:= xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stValveWater,
|
||||
stHMIInterface:= stHMIInterface.stDrainValve);
|
||||
|
||||
_fbDrainValve(
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
stValveConfig:= _stValveConfig,
|
||||
xReleaseManualMode:= xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stValveDrain,
|
||||
stHMIInterface:= stHMIInterface.stDrainValve);
|
||||
|
||||
_fbPumpValve(
|
||||
@@ -79,7 +79,8 @@ _fbPumpValve(
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
stValveConfig:= _stValveConfig,
|
||||
xReleaseManualMode:= xReleaseManualMode,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stIO := stIO.stValvePump,
|
||||
stHMIInterface:= stHMIInterface.stPumpValve);
|
||||
|
||||
CASE _iState OF
|
||||
@@ -99,7 +100,7 @@ CASE _iState OF
|
||||
10:
|
||||
_fbDrainValve.xAutomaticOpen := TRUE;
|
||||
|
||||
IF (NOT i_xEmpty) THEN
|
||||
IF (NOT stIO.i_xEmpty) THEN
|
||||
_fbDrainValve.xAutomaticOpen := FALSE;
|
||||
|
||||
_iState := 0;
|
||||
@@ -119,9 +120,9 @@ END_CASE
|
||||
M_HandleHMIOutput();
|
||||
|
||||
// Copy to output buffer
|
||||
xOverfull := (NOT i_xOverfull);
|
||||
xFull := i_xFull;
|
||||
xEmpty := (NOT i_xEmpty);]]></ST>
|
||||
xOverfull := (NOT stIO.i_xOverfull);
|
||||
xFull := stIO.i_xFull;
|
||||
xEmpty := (NOT stIO.i_xEmpty);]]></ST>
|
||||
</Implementation>
|
||||
<Method Name="FB_Init" Id="{9c6d1842-9c2e-4437-b40f-941f77668ffe}">
|
||||
<Declaration><![CDATA[//FB_Init is always available implicitly and it is used primarily for initialization.
|
||||
@@ -171,12 +172,12 @@ END_VAR
|
||||
<Implementation>
|
||||
<ST><![CDATA[{warning disable C0371}
|
||||
// Overfull sensor is NC
|
||||
stHMIInterface.xOverfull := (NOT i_xOverfull);
|
||||
stHMIInterface.xFull := i_xFull;
|
||||
stHMIInterface.xEmpty := (NOT i_xEmpty);
|
||||
stHMIInterface.xOverfull := (NOT stIO.i_xOverfull);
|
||||
stHMIInterface.xFull := stIO.i_xFull;
|
||||
stHMIInterface.xEmpty := (NOT stIO.i_xEmpty);
|
||||
|
||||
stHMIInterface.stFillButton.xRelease := i_xOverfull AND (NOT i_xFull);
|
||||
stHMIInterface.stEmptyButton.xRelease := i_xEmpty;
|
||||
stHMIInterface.stFillButton.xRelease := stIO.i_xOverfull AND (NOT stIO.i_xFull);
|
||||
stHMIInterface.stEmptyButton.xRelease := stIO.i_xEmpty;
|
||||
|
||||
IF _fbWaterValve.IsOpen THEN
|
||||
stHMIInterface.stFillButton.eFeedback := 1;
|
||||
|
||||
12
PLC/01_Stationen/NOK/DUTs/ST_NOK_IO.TcDUT
Normal file
12
PLC/01_Stationen/NOK/DUTs/ST_NOK_IO.TcDUT
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_NOK_IO" Id="{a715e73e-90b1-421f-b226-dcbaf6fa15a4}">
|
||||
<Declaration><![CDATA[TYPE ST_NOK_IO :
|
||||
STRUCT
|
||||
stValveDiag : ST_Valve_IO;
|
||||
stValveHori : ST_Valve_IO;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
@@ -7,13 +7,14 @@ END_VAR
|
||||
VAR_OUTPUT
|
||||
END_VAR
|
||||
VAR_IN_OUT
|
||||
stIO : ST_NOK_IO;
|
||||
stHMIInterface : ST_HMI_NOK;
|
||||
END_VAR
|
||||
VAR
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[]]></ST>
|
||||
<ST><![CDATA[SUPER^(stPackMLHMIInterface := stHMIInterface.stStationCmds);]]></ST>
|
||||
</Implementation>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
Reference in New Issue
Block a user