AUTO-TRAPEZ-Funktion
Anhand der Parameter im angegebenen strukturierten Datentyp wird eine AUTO-TRAPEZ-Steuerung 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
FP-S, FP-X:
F171_PulseOutput_Trapezoidal_DUT
FP0R:
F171_PulseOutput_Trapezoidal_Type0_DUT
F171_PulseOutput_Trapezoidal_Type1_DUT
Pulsausgabekanal:
FP-XH C30 T/P: 0–3
FP-XH C60 T/P: 0–5
FP-S: 0, 2
FP-X R: 0, 1
FP-XC14T: 0, 1, 2
FP-X C30T/C60T: 0, 1, 2, 3
FP0R: 0, 1, 2, 3
Verwenden Sie folgende, vordefinierte strukturierte Datentypen: F171_PulseOutput_Trapezoidal_DUT.
Im SDT lassen sich folgende Parameter festlegen:
Anfangs- und Restgeschwindigkeit
Sollgeschwindigkeit
Beschleunigungs-/Bremszeit
Sollwert
Kontrollmerker für Pulsausgabe
Ausführungsbedingung
Die Pulsausgabefrequenz ändert sich entsprechend der festgelegten Beschleunigungs- und Bremszeit.Der Unterschied zwischen der Soll- und Anfangsgeschwindigkeit bestimmt die Steigung der Rampen..
FP-X: 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.
FPS: Der Kontrollmerker "Schneller Zähler" (z.B. sys_bIsHscChannel0ControlActive) und der Kontrollmerker "Pulsausgabe" (z.B. sys_bIsPulseChannel0Active) sind derselben Sondermerker-Nummer zugeordnet (z.B. R903A). Daher ist sowohl der Kontrollmerker für den schnellen Zähler (z.B. sys_bIsHscChannel0ControlActive) als auch der Kontrollmerker für die Pulsausgabe (z.B. sys_bIsPulseChannel0Active) für den betreffenden Kanal TRUE, wenn ein schneller Zählerbefehl oder ein Pulsausgabebefehl ausgeführt wird. Solange dieser Merker auf TRUE steht, kann kein anderer schneller Zählerbefehl oder Pulsausgabebefehl ausgeführt werden.
FPS: Wennn der Kreisinterpolationsbefehl F176_PulseOutput_Center ausgeführt wird, wird der Kontrollmerker "Kreisinterpolation" (sys_bIsCircularInterpolationActive) auf TRUE gesetzt, Der Status dieses Merkers bleibt erhalten, bis der Zielwert erreicht ist (auch wenn die Ausführungsbedingung nicht mehr TRUE ist). In dieser Zeit lassen sich keine anderen Pulsausgabebefehle ausführen.
FPS: Setzen Sie einen schnellen Zähler, der einem Pulsausgabekanal zugeordnet ist, in den Systemregistern auf "Unbenutzt".
FP-X: Setzen Sie den gewünschten Kanal im Systemregister auf "Pulsausgabe".
Es ist unbedingt empfehlenswert, die Möglichkeit eines erzwungenen Stopps in Ihrem Positionierprogramm vorzusehen.
Verwenden Sie folgende, vordefinierte strukturierte Datentypen: F171_PulseOutput_Trapezoidal_Type0_DUT (Maximalgeschwindigkeit = erste Sollgeschwindigkeit) oder F171_PulseOutput_Trapezoidal_Type1_DUT (Maximalgeschwindigkeit = 50kHz).
Die Sollgeschwindigkeit lässt sich während der Pulsausgabe ändern.
Es gibt zwei verschiedene Betriebsarten:
Typ 0: Die Geschwindigkeit lässt sich nur innerhalb des zuvor festgelegten Bereichs für die Sollgeschwindigkeit ändern.
Typ 1: Die Geschwindigkeit lässt sich nur innerhalb des zuvor festgelegten Bereichs für die Sollgeschwindigkeit ändern (50kHz).
Im SDT lassen sich folgende Parameter festlegen:
Merkmale der Pulsausgabe
Anfangs- und Restgeschwindigkeit
Sollgeschwindigkeit
Beschleunigungszeit
Bremszeit
Sollwert
Kontrollmerker für Pulsausgabe
Ausführungsbedingung
Signal für gebremsten Halt
Typ 0:
Der Unterschied zwischen der Soll- und Anfangsgeschwindigkeit bestimmt die Steigung der Beschleunigungsrampe.Der Unterschied zwischen der Soll- und Endgeschwindigkeit bestimmt die Steigung der Bremsrampe.
Typ 1:
Der Unterschied zwischen der Maximalgeschwindigkeit von 50kHz und der Anfangsgeschwindigkeit bestimmt die Steigung der Beschleunigungsrampe.Der Unterschied zwischen der Maximalgeschwindigkeit von 50kHz und der Endgeschwindigkeit bestimmt die Steigung der Bremsrampe.
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.
Gebremster Halt
Um einen gebremsten Halt auszuführen, setzen Sie Bit 5 des Datenregisters, in dem der Steuercode für die Pulsausgabe gespeichert wird von FALSE auf TRUE (z.B. MOVE(16#120, sys_wHscOrPulseControlCode);
).Wenn während der Beschleunigung das Signal für einen gebremsten Halt ausgelöst wird, wird der Bremsvorgang mit derselben Geschwindigkeit ausgeführt wie der normale Bremsvorgang, der von der Sollgeschwindigkeit ausgeht.
Sollgeschwindigkeit während der Pulsausgabe ändern
Typ 1: Die Geschwindigkeit lässt sich nur innerhalb des zuvor festgelegten Bereichs für die Sollgeschwindigkeit ändern (50kHz).
Sollgeschwindigkeit
1. Änderung der Sollgeschwindigkeit
2. Änderung der Sollgeschwindigkeit
Beschleunigungszeit
Beschleunigung
Bremsvorgang
Bremszeit
Kontrollmerker für Pulsausgabe
Ausführungsbedingung
Die Geschwindigkeit kann nur geändert werden, wenn die Ausführungsbedingung kontinuierlich TRUE ist.
Typ 0:
Wenn der gewählte Wert außerhalb des zuvor festgelegten Bereichs für die Sollgeschwindigkeit liegt, wird diese Angabe korrigiert und stattdessen die anfangs festgelegte Sollgeschwindigkeit verwendet.
Typ 1:
Wenn für die Sollgeschwindigkeit ein höherer Wert als 50kHz festgelegt wurde, erfolgt eine Korrektur auf 50kHz.
Wenn der Istwert während der Beschleunigung den Beschleunigungswert überschreitet (z.B. sys_diPulseChannel0AccelerationForbiddenAreaStartingPosition), wird die Beschleunigung gestoppt.
Die Bremsgeschwindigkeit kann nicht unter der korrigierten Restgeschwindigkeit liegen.
Wenn Sie Programme, die diesen Befehl verwenden, im RUN-Modus bearbeiten (Online-Editieren), wird die Pulsausgabe beendet.
Wenn sowohl das Hauptprogramm als auch das Interrupt-Programm Code für denselben Kanal enthalten, dürfen die Programme nicht gleichzeitig ausgeführt werden.
Es ist unbedingt empfehlenswert, die Möglichkeit eines erzwungenen Stopps in Ihrem Positionierprogramm vorzusehen.
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
bMotorSwitch: BOOL:=FALSE;
dutTrapez: F171_PulseOutput_Trapezoidal_DUT:=dwControlCode := 16#1100;
(*Control code:
Digit 3: 1=Duty ratio 25%
Digit 2: 1=Frequency range 48Hz-100kHz
Digit 1: 0=Relative value control
Digit 0: 0=CW/CCW*)
END_VAR
VAR_EXTERNAL
X0_bMotorSwitch: BOOL:=FALSE;
(*at X0*)
END_VAR
VAR
diInitialSpeed: DINT:=100;
diTargetSpeed: DINT:=2000;
diAccelerationTime: DINT:=300;
diTargetValue: DINT:=10000;
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 16 ;
NETWORK_BODY
B(B_CONTACT,,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,,dutTrapez.diTargetSpeed,23,6,25,8,);
B(B_VARIN,,diTargetSpeed,15,6,17,8,);
B(B_VAROUT,,dutTrapez.diAccelerationAndDecelerationTime,23,10,25,12,);
B(B_VARIN,,diAccelerationTime,15,10,17,12,);
B(B_F,E_MOVE!,Instance,17,12,23,16,,?DEN?D?AENO?C);
B(B_VAROUT,,dutTrapez.diTargetValue,23,14,25,16,);
B(B_VARIN,,diTargetValue,15,14,17,16,);
B(B_F,E_MOVE!,Instance,17,0,23,4,,?DEN?D?AENO?C);
B(B_VAROUT,,dutTrapez.diInitialAndFinalSpeed,23,2,25,4,);
B(B_VARIN,,diInitialSpeed,15,2,17,4,);
L(7,2,7,6);
L(7,6,7,10);
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,10,7,14);
L(7,14,17,14);
L(1,0,1,16);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_CONTACT,,bMotorSwitch,4,2,6,4,R);
B(B_VARIN,,dutTrapez,14,3,16,5,);
B(B_VARIN,,0,14,4,16,6,);
B(B_F,F171_PulseOutput_Trapezoidal!,Instance,16,1,31,6,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
L(6,3,16,3);
L(1,3,4,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(bMotorSwitch) then
dutTrapez.diInitialAndFinalSpeed:=diInitialSpeed;
dutTrapez.diTargetSpeed:=diTargetSpeed;
dutTrapez.diAccelerationDecelerationTime:=diAccelerationTime;
dutTrapez.diDeviationCounterClearSignalOutputTime:=10;
END_IF;
IF DF(bMotorSwitch) then
F171_PulseOutput_Trapezoidal(s_dutDataTable := dutTrapez,
n_iPulseOutputChannel :=0);
END_IF;