399 lines
11 KiB
XML
399 lines
11 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.6">
|
|
<POU Name="FB_WZWKette" Id="{de78c7b1-582b-4c7b-bb52-35e58f49ffdc}" SpecialFunc="None">
|
|
<Declaration><![CDATA[FUNCTION_BLOCK FB_WZWKette
|
|
VAR_INPUT
|
|
bExecute : BOOL;
|
|
bReset : BOOL;
|
|
uiToolPocket : DINT := 1;
|
|
bInfeedEnabled : BOOL;
|
|
|
|
uiMaxToolPockets : UINT := 51;
|
|
END_VAR
|
|
VAR_OUTPUT
|
|
bDone : BOOL;
|
|
bError : BOOL;
|
|
nErrorId : INT;
|
|
END_VAR
|
|
VAR
|
|
uiZSW1 AT %I* : UINT;
|
|
uiAKTSATZ AT %I* : UINT;
|
|
uiZSW2 AT %I* : UINT;
|
|
uiX_IST AT %I* : UINT;
|
|
uiX_IST2 AT %I* : UINT;
|
|
|
|
uiSTW1 AT %Q* : UINT;
|
|
uiSATZANW AT %Q* : UINT;
|
|
uiSTW2 AT %Q* : UINT;
|
|
uiMDI_TARPOS AT %Q* : UINT;
|
|
uiMDI_TARPOS2 AT %Q* : UINT;
|
|
uiMDI_VELOCITY AT %Q* : UINT;
|
|
uiMDI_VELOCITY2 AT %Q* : UINT;
|
|
uiMDI_ACC AT %Q* : UINT;
|
|
uiMDI_DEC AT %Q* : UINT;
|
|
uiMDI_MOD AT %Q* : UINT;
|
|
|
|
rtStart : R_TRIG;
|
|
rtReset : R_TRIG;
|
|
ftError : F_TRIG;
|
|
|
|
nState : INT := 0;
|
|
nErrorState : INT := -1;
|
|
|
|
dwTargetPosition : DWORD;
|
|
dwCurrentPosition : DWORD;
|
|
dwTargetSpeed : DWORD := 17260; // MAX 17260
|
|
wTargetPositionLow : WORD;
|
|
wTargetPositionHigh : WORD;
|
|
|
|
wZSW1 : WORD;
|
|
wSATZANW : WORD;
|
|
wZSW2 : WORD;
|
|
wSTW1 : WORD;
|
|
wAKTSATZ : WORD;
|
|
wSTW2 : WORD;
|
|
|
|
wMDI_MOD : WORD;
|
|
|
|
tofReset : TOF;
|
|
tonWaitAktive : TON;
|
|
|
|
bTest : BOOL;
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[// VERSION FÜR EPOS
|
|
// Einlesen
|
|
wZSW1 := UINT_TO_WORD(uiZSW1);
|
|
wAKTSATZ := UINT_TO_WORD(uiAKTSATZ);
|
|
wZSW2 := UINT_TO_WORD(uiZSW2);
|
|
|
|
dwCurrentPosition := UINT_TO_DWORD(uiX_IST);
|
|
dwCurrentPosition := SHL(dwCurrentPosition, 16) + UINT_TO_DWORD(uiX_IST2);
|
|
|
|
IF uiToolPocket > 0 AND uiToolPocket < 51 THEN
|
|
dwTargetPosition := DINT_TO_DWORD(3672000 - ((uiToolPocket - 1) * 72000));
|
|
ELSE
|
|
dwTargetPosition := 0;
|
|
END_IF
|
|
|
|
// Führung durch PLC
|
|
wSTW1.10 := 1;
|
|
|
|
// Absolute positionierung
|
|
wMDI_MOD.0 := 1;
|
|
|
|
// Positionierung absolut kürzester Weg
|
|
wMDI_MOD.1 := 0;
|
|
|
|
// Start bei steigender Flanke
|
|
rtStart(CLK := bExecute);
|
|
|
|
// Reset
|
|
rtReset(CLK := bReset);
|
|
|
|
// Error trigger
|
|
ftError(CLK := wZSW1.3);
|
|
|
|
// Fehlerzustand weitergeben
|
|
bError := wZSW1.3;
|
|
|
|
// Fehlerzustand
|
|
IF (wZSW1.3 = 1) AND (nState < 99) THEN
|
|
nErrorState := nState;
|
|
nState := 99;
|
|
END_IF
|
|
|
|
// Reset der Achse
|
|
tofReset(IN := bReset, PT := T#250MS);
|
|
wSTW1.7 := tofReset.Q;
|
|
|
|
CASE nState OF
|
|
0: // Idle -> Einschalten
|
|
wStW1.0 := 0; // Ein
|
|
wStW1.1 := 0; // Nicht Austrudel
|
|
wStW1.2 := 0; // Kein Schnellhalt
|
|
wStW1.3 := 0; // Betrieb freigeben
|
|
wSTW1.4 := 0; // EPOS nicht Verwerfen
|
|
wSTW1.5 := 0; // EPOS kein Zwischenhalt
|
|
wSTW1.6 := 0; // EPOS Verfahrauftrag aktivieren 0 -> 1
|
|
|
|
wSATZANW.15 := 0; // MDI aktivieren
|
|
|
|
IF rtStart.Q AND bInfeedEnabled THEN
|
|
bDone := FALSE;
|
|
IF dwTargetPosition <> dwCurrentPosition THEN
|
|
nState := 10;
|
|
ELSE
|
|
nState := 70;
|
|
END_IF
|
|
END_IF
|
|
|
|
10: // Warten auf Einschaltbereit -> Betriebsbereit
|
|
wStW1.0 := 0; // Ein
|
|
wStW1.1 := 1; // Nicht Austrudel
|
|
wStW1.2 := 1; // Kein Schnellhalt
|
|
wStW1.3 := 1; // Betrieb freigeben
|
|
wSTW1.4 := 1; // EPOS nicht Verwerfen
|
|
wSTW1.5 := 0; // EPOS kein Zwischenhalt
|
|
wSTW1.6 := 0; // EPOS Verfahrauftrag aktivieren 0 -> 1
|
|
|
|
wSATZANW.15 := 0; // MDI aktivieren
|
|
|
|
IF wZSW1.0 THEN // Einschaltbereit
|
|
nState := 20;
|
|
END_IF
|
|
|
|
20: // Warten auf Betriebsbereit
|
|
wStW1.0 := 1; // Ein
|
|
wStW1.1 := 1; // Nicht Austrudel
|
|
wStW1.2 := 1; // Kein Schnellhalt
|
|
wStW1.3 := 1; // Betrieb freigeben
|
|
wSTW1.4 := 1; // EPOS nicht Verwerfen
|
|
wSTW1.5 := 0; // EPOS kein Zwischenhalt
|
|
wSTW1.6 := 0; // EPOS Verfahrauftrag aktivieren 0 -> 1
|
|
|
|
wSATZANW.15 := 0; // MDI aktivieren
|
|
|
|
IF wZSW1.1 THEN // Betriebsbereit
|
|
nState := 30;
|
|
END_IF
|
|
|
|
30: // Betriebsbereit -> Bewegungsparameter setzen
|
|
wStW1.0 := 1; // Ein
|
|
wStW1.1 := 1; // Nicht Austrudel
|
|
wStW1.2 := 1; // Kein Schnellhalt
|
|
wStW1.3 := 1; // Betrieb freigeben
|
|
wSTW1.4 := 1; // EPOS nicht Verwerfen
|
|
wSTW1.5 := 1; // EPOS kein Zwischenhalt
|
|
wSTW1.6 := 0; // EPOS Verfahrauftrag aktivieren 0 -> 1
|
|
|
|
wSATZANW.15 := 1; // MDI aktivieren
|
|
|
|
// Beschleunigungsausgabe
|
|
uiMDI_ACC := 16384;
|
|
uiMDI_DEC := 16384;
|
|
|
|
// Positionsausgabe in zwei udint
|
|
uiMDI_TARPOS := DWORD_TO_UINT(SHR(dwTargetPosition, 16));
|
|
uiMDI_TARPOS2 := DWORD_TO_UINT(dwTargetPosition);
|
|
|
|
// Geschwindigkeitsausgabe
|
|
uiMDI_VELOCITY := DWORD_TO_UINT(SHR(dwTargetSpeed, 16));
|
|
uiMDI_VELOCITY2 := DWORD_TO_UINT(dwTargetSpeed);
|
|
|
|
IF wAKTSATZ.15 THEN // MDI aktiviert
|
|
nState := 40;
|
|
END_IF
|
|
|
|
|
|
40: // Warten auf Fahrauftrag quittierung
|
|
wStW1.0 := 1; // Ein
|
|
wStW1.1 := 1; // Nicht Austrudel
|
|
wStW1.2 := 1; // Kein Schnellhalt
|
|
wStW1.3 := 1; // Betrieb freigeben
|
|
wSTW1.4 := 1; // EPOS nicht Verwerfen
|
|
wSTW1.5 := 1; // EPOS kein Zwischenhalt
|
|
wSTW1.6 := 1; // EPOS Verfahrauftrag aktivieren 0 -> 1
|
|
|
|
wSATZANW.15 := 1; // MDI aktivieren
|
|
|
|
// Workaraound für kurze Fahrwege (optimierungsbedarf)
|
|
tonWaitAktive(In := TRUE, PT := T#1S);
|
|
|
|
IF wZSW1.12 AND (NOT wZSW1.10) THEN // Verfahrauftrag aktiv
|
|
tonWaitAktive(In := FALSE);
|
|
nState := 45;
|
|
END_IF
|
|
|
|
// Workaraound siehe oben
|
|
IF wZSW1.12 AND tonWaitAktive.Q AND (ABS(dwCurrentPosition - dwTargetPosition) < 10) THEN
|
|
tonWaitAktive(In := FALSE);
|
|
nState := 45;
|
|
END_IF
|
|
|
|
45: // Warten auf in position
|
|
IF wZSW1.10 THEN
|
|
nState := 50;
|
|
END_IF
|
|
|
|
50: // MDI abschalten
|
|
wStW1.0 := 1; // Ein
|
|
wStW1.1 := 1; // Nicht Austrudel
|
|
wStW1.2 := 1; // Kein Schnellhalt
|
|
wStW1.3 := 1; // Betrieb freigeben
|
|
wSTW1.4 := 0; // EPOS nicht Verwerfen
|
|
wSTW1.5 := 0; // EPOS kein Zwischenhalt
|
|
wSTW1.6 := 0; // EPOS Verfahrauftrag aktivieren 0 -> 1
|
|
|
|
wSATZANW.15 := 0; // MDI aktivieren
|
|
|
|
IF NOT wAKTSATZ.10 THEN
|
|
nState := 60;
|
|
END_IF
|
|
|
|
60: // Ausschalten
|
|
wStW1.0 := 0; // Ein
|
|
wStW1.1 := 1; // Nicht Austrudel
|
|
wStW1.2 := 1; // Kein Schnellhalt
|
|
wStW1.3 := 1; // Betrieb freigeben
|
|
wSTW1.4 := 0; // EPOS nicht Verwerfen
|
|
wSTW1.5 := 0; // EPOS kein Zwischenhalt
|
|
wSTW1.6 := 0; // EPOS Verfahrauftrag aktivieren 0 -> 1
|
|
|
|
wSATZANW.15 := 0; // MDI aktivieren
|
|
|
|
IF NOT wZSW1.1 THEN
|
|
nState := 0;
|
|
bDone := TRUE;
|
|
END_IF
|
|
|
|
70: // Stehen schon an der Position, nichts machen
|
|
bDone := TRUE;
|
|
nState := 0;
|
|
|
|
99: // Fehler
|
|
bError := TRUE;
|
|
|
|
IF ftError.Q OR (wZSW1.3 = 0) THEN
|
|
nState := 0;
|
|
END_IF
|
|
|
|
END_CASE
|
|
|
|
// Ausgabe
|
|
uiSTW1 := WORD_TO_UINT(wStw1);
|
|
uiSATZANW := WORD_TO_UINT(wSATZANW);
|
|
uiSTW2 := WORD_TO_UINT(wStw2);
|
|
uiMDI_MOD := WORD_TO_UINT(wMDI_MOD);]]></ST>
|
|
</Implementation>
|
|
<LineIds Name="FB_WZWKette">
|
|
<LineId Id="162" Count="0" />
|
|
<LineId Id="181" Count="0" />
|
|
<LineId Id="184" Count="0" />
|
|
<LineId Id="490" Count="0" />
|
|
<LineId Id="182" Count="0" />
|
|
<LineId Id="580" Count="0" />
|
|
<LineId Id="579" Count="0" />
|
|
<LineId Id="581" Count="0" />
|
|
<LineId Id="585" Count="0" />
|
|
<LineId Id="584" Count="0" />
|
|
<LineId Id="583" Count="0" />
|
|
<LineId Id="586" Count="2" />
|
|
<LineId Id="276" Count="0" />
|
|
<LineId Id="183" Count="0" />
|
|
<LineId Id="163" Count="0" />
|
|
<LineId Id="280" Count="0" />
|
|
<LineId Id="279" Count="0" />
|
|
<LineId Id="281" Count="0" />
|
|
<LineId Id="283" Count="0" />
|
|
<LineId Id="282" Count="0" />
|
|
<LineId Id="284" Count="0" />
|
|
<LineId Id="382" Count="0" />
|
|
<LineId Id="381" Count="0" />
|
|
<LineId Id="380" Count="0" />
|
|
<LineId Id="525" Count="0" />
|
|
<LineId Id="524" Count="0" />
|
|
<LineId Id="526" Count="0" />
|
|
<LineId Id="540" Count="0" />
|
|
<LineId Id="539" Count="0" />
|
|
<LineId Id="544" Count="0" />
|
|
<LineId Id="678" Count="0" />
|
|
<LineId Id="677" Count="0" />
|
|
<LineId Id="679" Count="0" />
|
|
<LineId Id="511" Count="0" />
|
|
<LineId Id="510" Count="0" />
|
|
<LineId Id="512" Count="0" />
|
|
<LineId Id="530" Count="0" />
|
|
<LineId Id="527" Count="1" />
|
|
<LineId Id="805" Count="0" />
|
|
<LineId Id="742" Count="0" />
|
|
<LineId Id="741" Count="0" />
|
|
<LineId Id="743" Count="0" />
|
|
<LineId Id="373" Count="0" />
|
|
<LineId Id="372" Count="0" />
|
|
<LineId Id="374" Count="0" />
|
|
<LineId Id="386" Count="3" />
|
|
<LineId Id="385" Count="0" />
|
|
<LineId Id="446" Count="0" />
|
|
<LineId Id="407" Count="0" />
|
|
<LineId Id="465" Count="1" />
|
|
<LineId Id="390" Count="0" />
|
|
<LineId Id="379" Count="0" />
|
|
<LineId Id="674" Count="0" />
|
|
<LineId Id="865" Count="0" />
|
|
<LineId Id="383" Count="0" />
|
|
<LineId Id="866" Count="2" />
|
|
<LineId Id="384" Count="0" />
|
|
<LineId Id="391" Count="0" />
|
|
<LineId Id="376" Count="0" />
|
|
<LineId Id="471" Count="0" />
|
|
<LineId Id="393" Count="2" />
|
|
<LineId Id="392" Count="0" />
|
|
<LineId Id="447" Count="0" />
|
|
<LineId Id="408" Count="0" />
|
|
<LineId Id="467" Count="1" />
|
|
<LineId Id="396" Count="3" />
|
|
<LineId Id="410" Count="0" />
|
|
<LineId Id="377" Count="0" />
|
|
<LineId Id="401" Count="3" />
|
|
<LineId Id="400" Count="0" />
|
|
<LineId Id="448" Count="0" />
|
|
<LineId Id="409" Count="0" />
|
|
<LineId Id="469" Count="1" />
|
|
<LineId Id="405" Count="1" />
|
|
<LineId Id="411" Count="3" />
|
|
<LineId Id="417" Count="4" />
|
|
<LineId Id="449" Count="0" />
|
|
<LineId Id="416" Count="0" />
|
|
<LineId Id="439" Count="1" />
|
|
<LineId Id="422" Count="0" />
|
|
<LineId Id="424" Count="1" />
|
|
<LineId Id="423" Count="0" />
|
|
<LineId Id="431" Count="6" />
|
|
<LineId Id="427" Count="0" />
|
|
<LineId Id="450" Count="0" />
|
|
<LineId Id="486" Count="2" />
|
|
<LineId Id="451" Count="2" />
|
|
<LineId Id="457" Count="7" />
|
|
<LineId Id="454" Count="0" />
|
|
<LineId Id="472" Count="0" />
|
|
<LineId Id="940" Count="0" />
|
|
<LineId Id="932" Count="1" />
|
|
<LineId Id="473" Count="0" />
|
|
<LineId Id="934" Count="0" />
|
|
<LineId Id="474" Count="1" />
|
|
<LineId Id="935" Count="0" />
|
|
<LineId Id="941" Count="0" />
|
|
<LineId Id="936" Count="1" />
|
|
<LineId Id="939" Count="0" />
|
|
<LineId Id="938" Count="0" />
|
|
<LineId Id="569" Count="4" />
|
|
<LineId Id="455" Count="0" />
|
|
<LineId Id="476" Count="0" />
|
|
<LineId Id="478" Count="7" />
|
|
<LineId Id="477" Count="0" />
|
|
<LineId Id="491" Count="5" />
|
|
<LineId Id="498" Count="7" />
|
|
<LineId Id="497" Count="0" />
|
|
<LineId Id="506" Count="2" />
|
|
<LineId Id="673" Count="0" />
|
|
<LineId Id="509" Count="0" />
|
|
<LineId Id="869" Count="3" />
|
|
<LineId Id="415" Count="0" />
|
|
<LineId Id="378" Count="0" />
|
|
<LineId Id="675" Count="0" />
|
|
<LineId Id="547" Count="0" />
|
|
<LineId Id="542" Count="0" />
|
|
<LineId Id="545" Count="0" />
|
|
<LineId Id="532" Count="1" />
|
|
<LineId Id="375" Count="0" />
|
|
<LineId Id="179" Count="0" />
|
|
<LineId Id="165" Count="0" />
|
|
<LineId Id="180" Count="0" />
|
|
<LineId Id="441" Count="0" />
|
|
<LineId Id="185" Count="0" />
|
|
<LineId Id="285" Count="0" />
|
|
</LineIds>
|
|
</POU>
|
|
</TcPlcObject> |