Files
Adeco_20220119-01/TC3_CNCPLCBase/OEM/FB_Spindel.TcPOU
Matthias Heisig 51d6e7e5c4 Initial commit
2024-10-22 14:22:54 +02:00

120 lines
3.3 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.6">
<POU Name="FB_Spindel" Id="{50a6eecd-bacb-461c-81db-8d25d13f0ab9}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_Spindel
VAR_INPUT
bSensor3 : BOOL;
bSensor4 : BOOL;
iAxNr : INT := 4;
bCmdOpenSpindle : BOOL;
bCmdStopSpindle : BOOL;
bAirCurtainEnabled : BOOL := TRUE;
END_VAR
VAR_OUTPUT
bSperrluft : BOOL := TRUE;
bKonusReiniung : BOOL;
bATCOn : BOOL;
bATCOff : BOOL;
bSpindleOpen : BOOL;
bSpindleClosed : BOOL;
bSpindleClosedWithTool : BOOL;
bSpindleStopped : BOOL;
END_VAR
VAR
ftATCOn : F_TRIG;
tofATCOff : TOF;
bInternCmdOpenSpindle : BOOL;
bCanOpenSpindle : BOOL;
rtCmdOpenSpindle : R_TRIG;
ftCmdOpenSpindle : F_TRIG;
tofCmdCloseSpindle : TOF;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// State spindle closed with tool
bSpindleClosedWithTool := bSensor3 AND bSensor4;
// State spindle closed without tool
bSpindleClosed := bSensor3 AND (NOT bSensor4);
// Spindle open
bSpindleOpen := (NOT bSensor3) AND bSensor4;
// Sperrluftbehandlung
bSperrluft := bAirCurtainEnabled;
rtCmdOpenSpindle(CLK := bCmdOpenSpindle);
IF rtCmdOpenSpindle.Q THEN
bInternCmdOpenSpindle := TRUE;
END_IF
ftCmdOpenSpindle(CLK := bCmdOpenSpindle);
IF ftCmdOpenSpindle.Q THEN
bInternCmdOpenSpindle := FALSE;
END_IF
// Freigabe der Spindel nur bei gespannten Werkzeug
gpAx[iAxNr]^.ipo_mc_control.feedhold.enable_w := TRUE;
gpAx[iAxNr]^.ipo_mc_control.feedhold.command_w := (NOT bSpindleClosedWithTool) OR bCmdStopSpindle;
// Enable taper cleaning air with open spindle
IF bSpindleOpen THEN
bKonusReiniung := TRUE;
ELSE
bKonusReiniung := FALSE;
END_IF
// Spindel öffnen
ftATCOn(CLK := bATCOn);
tofATCOff(In := ftATCOn.Q, PT := T#1S);
// bATCOn := bCmdOpenSpindle;
// Öffnen der Spindel nur bei stillstand der Spindel und programmierter 0 drehzahl
bSpindleStopped := gpAx[iAxNr]^.lr_state.rev_null_r;
bCanOpenSpindle := bSpindleStopped AND (gpAx[iAxNr]^.lr_state.active_rev_r = 0);
bATCOn := bInternCmdOpenSpindle AND bCanOpenSpindle;
bATCOff := tofATCOff.Q;]]></ST>
</Implementation>
<LineIds Name="FB_Spindel">
<LineId Id="24" Count="0" />
<LineId Id="17" Count="0" />
<LineId Id="50" Count="0" />
<LineId Id="49" Count="0" />
<LineId Id="52" Count="0" />
<LineId Id="56" Count="0" />
<LineId Id="55" Count="0" />
<LineId Id="57" Count="0" />
<LineId Id="186" Count="2" />
<LineId Id="116" Count="0" />
<LineId Id="115" Count="0" />
<LineId Id="117" Count="2" />
<LineId Id="152" Count="0" />
<LineId Id="151" Count="0" />
<LineId Id="153" Count="2" />
<LineId Id="95" Count="0" />
<LineId Id="94" Count="0" />
<LineId Id="97" Count="0" />
<LineId Id="96" Count="0" />
<LineId Id="26" Count="0" />
<LineId Id="25" Count="0" />
<LineId Id="27" Count="1" />
<LineId Id="30" Count="1" />
<LineId Id="29" Count="0" />
<LineId Id="62" Count="0" />
<LineId Id="61" Count="0" />
<LineId Id="67" Count="2" />
<LineId Id="63" Count="0" />
<LineId Id="219" Count="0" />
<LineId Id="254" Count="0" />
<LineId Id="220" Count="0" />
<LineId Id="113" Count="0" />
<LineId Id="64" Count="0" />
</LineIds>
</POU>
</TcPlcObject>