Initial commit
This commit is contained in:
399
TC3_CNCPLCBase/OEM/FB_WZWKette.TcPOU
Normal file
399
TC3_CNCPLCBase/OEM/FB_WZWKette.TcPOU
Normal file
@@ -0,0 +1,399 @@
|
||||
<?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>
|
||||
Reference in New Issue
Block a user