Tipp-Betrieb
Dieser Befehl wird für den Tipp-Betrieb verwendet. Wenn der Positionierungstrigger-Eingang auf TRUE gesetzt wird, wird die zuvor festgelegte Zahl von Pulsen ausgegeben. Ehe der Sollwert erreicht ist und die Pulsausgabe endet, wird eine Abbremsung ausgefü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
Pulsausgang: 0 oder 1
Verwenden Sie folgende, vordefinierte strukturierte Datentypen: F169_PulseOutput_Jog_DUT
Im SDT lassen sich folgende Parameter festlegen:
Steuercode
Geschwindigkeit
Merkmale der Pulsausgabe
Die Frequenz und das Puls-Pausenverhältnis können in jedem SPS-Zyklus geändert werden. (Die Änderung wird bei der nächsten Pulsausgabe wirksam.)
Wenn Sie Programme, die diesen Befehl verwenden, im RUN-Modus bearbeiten (Online-Editieren), wird die Pulsausgabe beendet.
Setzen Sie einen schnellen Zähler, der einem Pulsausgabekanal zugeordnet ist, in den Systemregistern auf "Unbenutzt".
Wenn sowohl das Hauptprogramm als auch das Interrupt-Programm Code für denselben Kanal enthalten, dürfen die Programme nicht gleichzeitig ausgeführt werden.
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.
Bleibt die Drehrichtung immer gleich, kann es passieren, dass die Zählerobergrenze erreicht wird. Die Pulsausgabe wird dann gestoppt. Als Gegenmaßnahme setzen Sie den Istwert auf 0 zurück, ehe Sie diesen Befehl ausführen. Die Pulsausgabe stoppt nicht, wenn die FP0R im FP0-Kompatibilitätsmodus verwendet wird, da der Datenbereich für den Istwert ein vorzeichenbehafteter 32-Bit-Wert ist.
Beim Vorwärtszählen wird die Pulsausgabe beendet, wenn der Istwert den Wert 2147483647 übersteigt.
Beim Rückwärtszählen wird die Pulsausgabe beendet, wenn der Istwert den Wert -2147483648 unterschreitet.
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.
Um die FP0R im FP0-Kompatibilitätsmodus auszuführen, können Sie ein FP0-Programm auf die FP0R übertragen Bitte beachten Sie folgende Beschränkungen:
Die FP0R unterstützt vorzeichenbehaftete 32-Bit-Daten für Ist- und Sollwerte; die FP0 unterstützt vorzeichenbehaftete 24-Bit-Daten. Auf der FP0 zählen Zähler und Pulsausgabe auch über den FP0-Bereich hinaus weiter.
Das Puls-Pausenverhältnis beträgt immer 25%, unabhängig von den Befehlseinstellungen. 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.
Die Einstellung "Nicht zählen" wird von der FP0R nicht unterstützt. Wenn bei FP0-Pulsausgabefehlen die Einstellung "Nicht zählen" gewählt wurde, interpretiert die FP0R dies als "Vorwärtszählen".
Die maximale Pulsausgangsfrequenz beträgt 10000Hz.
Stellen Sie sicher, dass der Pulsausgabebefehl keinen Ausgang verwendet, der als normaler Ausgang genutzt wird.
Um ein FP0-Programm im FP0-Kompatibilitätsmodus auszuführen, müssen die SPS-Typen (C10, C14, C16, C32 und T32) exakt übereinstimmen. Der Typ F32 der FP0R bietet keinen FP0-Kompatibilitätsmodus.
Kanäle und Pulsausgänge
Kanal-Nr. | Pulsausgang | Pulsausgangsart |
0 |
Y0 |
Puls |
Y2 |
Richtung | |
1 |
Y1 |
Puls |
Y3 |
Richtung |
Systemvariablen für vorgesehene Speicherbereiche. Die Werte in Klammern gelten für die FP0 T32.
Beschreibung |
Systemvariable |
|
---|---|---|
Pulsausgabe: Kontrollmerker für Kanal |
0 |
sys_bIsPulseChannel0Active |
1 |
sys_bIsPulseChannel1Active |
|
Pulsausgabe: Istwert für Kanal |
0 |
sys_diPulseChannel0ElapsedValue |
1 |
sys_diPulseChannel1ElapsedValue |
|
Pulsausgabe: Sollwert für Kanal |
0 |
sys_diPulseChannel0TargetValue |
1 |
sys_diPulseChannel1TargetValue |
|
Steuercode schneller Zähler und Pulsausgabe |
sys_wHscOrPulseControlCode |
In der globalen Variablenliste können Sie Variablen festlegen, die von allen POEs des Projekts verwendet werden können.
Der SDT F169_PulseOutput_Jog_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;
END_VAR
VAR
dut_Jog: F169_PulseOutput_Jog_DUT:=wControlCode := 16#110,
iSpeed := 0;
(*Digit2: 1= Duty 10%
Digit1: 1=Incremental counting
Digit0: 0=No direction output*)
@'': @'';
END_VAR
Die Kommentarfelder erläutern die Funktion dieses Beispiels.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_COMMENT,,define frequency~ 300Hz,2,1,22,2,);
B(B_F,E_MOVE!,Instance,9,2,15,6,,?DEN?D?AENO?C);
B(B_VARIN,,300,7,4,9,6,);
B(B_VAROUT,,dut_Jog.iSpeed,15,4,17,6,);
B(B_CONTACT,,X0_bMotorSwitch,5,3,7,5,);
L(1,0,1,6);
L(1,4,5,4);
L(7,4,9,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_F,F169_PulseOutput_Jog!,Instance,12,2,25,7,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dut_Jog,10,4,12,6,);
B(B_VARIN,,0,10,5,12,7,);
B(B_CONTACT,,X0_bMotorSwitch,5,3,7,5,);
B(B_COMMENT,,start pulse output to output,2,1,22,2,);
L(1,4,5,4);
L(7,4,12,4);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (X0_bMotorSwitch) then
dutJog.ispeed := 300;
END_IF;
IF (X0_bMotorSwitch) then
F169_PulseOutput_Jog(s_dutDataTable := dutJog,
n_iPulseOutputChannel := 0);
END_IF;