Referenzpunktfahrt
Anhand der Parameter im angegebenen strukturierten Datentyp wird eine Referenzpunktfahrt durchgeführt. Die Pulse werden vom angegebenen Kanal ausgegeben, wenn der Kontrollmerker für diesen Kanal FALSE und die Ausführungsbedingung TRUE ist.
Eingang
Anfangsadresse des Bereiches, der die Datentabelle enthält
Pulsausgabekanal:0–3
Nach dem Einschalten des Antriebssystems besteht ein vorher nicht bestimmbarer Versatz zwischen dem internen Positionswert (Istwert) und der mechanischen Position der Achse. Zur Herstellung des Positionsbezuges muss der interne Wert mit dem realen Positionswert der Achse synchronisiert werden. Die Synchronisation erfolgt durch Übernahme eines Positionswertes an einem bekannten Punkt (Referenzpunkt).Bei der Ausführung eines Referenzpunktfahrtbefehls werden so lange Pulse ausgegeben, bis der Referenzpunkteingang aktiviert wird. Die E/A-Zuweisung richtet sich nach dem verwendeten Kanal.Zum Abbremsen im Referenzpunktbereich geben Sie einen Referenzpunkteingang an und setzen Bit 4 des Sonderdatenregisters, in dem der Steuercode für die Pulsausgabe gespeichert wird (sys_wHscOrPulseControlCode), auf TRUE und zurück auf FALSE.Der Referenzpunktausgang kann auf TRUE gesetzt werden, wenn die Referenzpunktfahrt beendet ist.
Es gibt zwei verschiedene Betriebsarten:
Typ 0:
Der Referenzpunkteingang wird aktiviert, unabhängig davon, ob ein Referenzpunkt-Sucheingang vorhanden ist, ob der Bremsvorgang bereits eingesetzt hat oder ob der Bremsvorgang abgeschlossen ist.
Ohne Referenzpunkt-Sucheingang:
|
Mit Referenzpunkt-Sucheingang:
|
Typ 1: Der Referenzpunkteingang kann nur aktiviert werden, nachdem der Bremsvorgang (ausgelöst durch einen Referenzpunkt-Sucheingang) abgeschlossen ist.
Verwenden Sie folgende, vordefinierte strukturierte Datentypen: F177_PulseOutput_Home_Type0_DUT oder F177_PulseOutput_Home_Type1_DUT
Im SDT lassen sich folgende Parameter festlegen:
Steuercode
Anfangsgeschwindigkeit
Sollgeschwindigkeit
Beschleunigungszeit
Bremszeit
Suchgeschwindigkeit
Referenzpunktausgangssignal (Ausgabezeit)
Merkmale der Pulsausgabe
Die Pulsausgabefrequenz ändert sich mit der angegebenen Beschleunigungs- und Bremszeit.
Der Unterschied zwischen der Soll- und Anfangsgeschwindigkeit bestimmt die Steigung der Rampen..
Die Pulse werden mit einem Puls-Pausenverhältnis von 25% ausgegeben.
Bei der Verwendung der Methode Pulsausgabe/Richtungsanzeige werden die Pulse ca. 300ms nach der Ausgabe des Richtungsanzeigesignals ausgegeben; das Verhalten des Motorantriebs wird gleichzeitig berücksichtigt.
Allgemeine Programmierhinweise
Setzen Sie den gewünschten Kanal im Systemregister auf "Pulsausgabe".
Selbst wenn der Referenzpunkt erreicht worden ist, werden Pulse ausgegeben, wenn dieser Befehls ausgeführt wird.
Wenn der Referenzpunkt-Sucheingang während der Beschleunigung aktiviert wird, beginnt der Bremsvorgang.
Das Referenzpunktausgangssignal wird bestimmten Ausgangsnummern zugewiesen, die für jeden SPS-Typ verschieden sind.
Wenn sowohl das Hauptprogramm als auch das Interrupt-Programm Code für denselben Kanal enthalten, dürfen die Programme nicht gleichzeitig ausgeführt werden.
Während der Ausführung eines Pulsausgabefehls und der Ausgabe von Pulsen steht der Kontrollmerker "Pulsausgabe" des entsprechenden Kanals (z.B. sys_bIsPulseChannel0Active) auf TRUE. Solange der Merker auf TRUE steht, kann kein anderer Pulsausgabebefehl ausgeführt werden.
Wenn Sie Programme im RUN-Modus bearbeiten, wird die Pulsausgabe gestoppt und erst nach der Übertragung der Programmänderungen fortgesetzt.
Es ist unbedingt empfehlenswert, die Möglichkeit eines erzwungenen Stopps in Ihrem Positionierprogramm vorzusehen.
Der Status des Kontrollmerkers für den schnellen Zähler oder den Pulsausgang kann sich innerhalb eines Zyklus ändern.
FP0R C16
Kanal-Nr. |
Referenzpunktausgang |
Referenzpunkteingang |
0 | Y6 | X4 |
1 | Y7 | X5 |
2 | – | X6 |
3 | – | X7 |
Die Eingänge X4–X7 können entweder als Schneller-Zähler-Eingang oder Referenzpunkteingang verwendet werden.
Y6 und Y7 können entweder als Pulsausgang für Kanal 3 oder als Referenzpunktausgang für Kanal 0 und 1 verwendet werden.
FP0R C32, T32, F32
Kanal-Nr. |
Referenzpunktausgang |
Referenzpunkteingang |
0 | Y8 | X4 |
1 | Y9 | X5 |
2 | YA | X6 |
3 | YB | X7 |
Die Eingänge X4–X7 können entweder als Schneller-Zähler-Eingang oder Referenzpunkteingang verwendet werden.
In der globalen Variablenliste können Sie Variablen festlegen, die von allen POEs des Projekts verwendet werden können.
Der SDT F177_PulseOutput_Home_Type1_DUT ist in der “FP library” enthalten.
Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.
VAR_EXTERNAL
X0_bMotorSwitch: BOOL:=FALSE;
(*at X0*)
END_VAR
VAR
diInitialSpeed: DINT:=1000;
diTargetSpeed: DINT:=5000;
diAccelerationTime: DINT:=3000;
diDecelerationTime: DINT:=3000;
diCreepSpeed: DINT:=5000;
dutHomeType1: F177_PulseOutput_Home_Type1_DUT:=dwControlCode := 16#0012,
diInitialSpeed := 0,
diTargetSpeed := 0,
diAccelerationTime := 0,
diDecelerationTime := 0,
diCreepSpeed := 0;
(*For ControlCode (16#0012):
1 = Forward
2 = Pulse/Sign forward on*)
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 24 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,4,1,6,3,R);
B(B_F,E_MOVE!,Instance,17,4,23,8,,?DEN?D?AENO?C);
B(B_F,E_MOVE!,Instance,17,8,23,12,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diTargetSpeed,23,6,25,8,);
B(B_VARIN,,diTargetSpeed,15,6,17,8,);
B(B_VAROUT,,dutHomeType1.diAccelerationTime,23,10,25,12,);
B(B_VARIN,,diAccelerationTime,15,10,17,12,);
B(B_F,E_MOVE!,Instance,17,20,23,24,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diDeviationCounterClearSignalOutputTime,23,22,25,24,);
B(B_VARIN,,0,15,22,17,24,);
B(B_F,E_MOVE!,Instance,17,0,23,4,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diInitialSpeed,23,2,25,4,);
B(B_VARIN,,diInitialSpeed,15,2,17,4,);
B(B_F,E_MOVE!,Instance,17,12,23,16,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diDecelerationTime,23,14,25,16,);
B(B_VARIN,,diDecelerationTime,15,14,17,16,);
B(B_F,E_MOVE!,Instance,17,16,23,20,,?DEN?D?AENO?C);
B(B_VAROUT,,dutHomeType1.diCreepSpeed,23,18,25,20,);
B(B_VARIN,,diCreepSpeed,15,18,17,20,);
L(7,2,7,6);
L(1,2,4,2);
L(6,2,7,2);
L(7,2,17,2);
L(7,6,17,6);
L(7,10,17,10);
L(7,6,7,10);
L(7,10,7,22);
L(7,22,17,22);
L(7,14,17,14);
L(7,18,17,18);
L(1,0,1,24);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 12 ;
NETWORK_BODY
B(B_CONTACT,,X0_bMotorSwitch,8,5,10,7,R);
B(B_VARIN,,dutHomeType1,15,6,17,8,);
B(B_VARIN,,0,15,7,17,9,);
B(B_COMMENT,,Example for home position return,1,2,18,4,);
B(B_F,F177_PulseOutput_Home!,Instance,17,4,30,9,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
L(10,6,17,6);
L(1,6,8,6);
L(1,0,1,12);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(X0_bMotorSwitch) then
dutHomeType1.diInitialSpeed:=diInitialSpeed;
dutHomeType1.diTargetSpeed:=diTargetSpeed;
dutHomeType1.diAccelerationTime:=diAccelerationTime;
dutHomeType1.diDecelerationTime:=diDecelerationTime;
dutHomeType1.diCreepSpeed:=diCreepSpeed;
dutHomeType1.diDeviationCounterClearSignalOutputTime:=0;
END_IF;
(*Example for home position return*)
IF DF(X0_bMotorSwitch) then
F177_PulseOutput_Home(s_dutDataTable := dutHomeType1,
n_iPulseOutputChannel := 0);
END_IF;