PWM-Ausgabe
Dieser Befehl liefert ein pulsweitenmoduliertes Ausgangssignal. Die Parameter für die Pulsausgabe werden in einem SDT festgelegt. 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: F170_PulseOutput_PWM_DUT
Im SDT lassen sich folgende Parameter festlegen:
Ungefähre Frequenz
Puls-Pausenverhältnis (der Pulsdauer und -periode)
Das Verhältnis zwischen der Pulsweite und der Pulsperiode einer rechteckigen Wellenform. Für eine Impulsfolge, in der die Pulsdauer 1ms beträgt und die Pulsperiode 4ms, beläuft sich das Puls-Pausen-Verhältnis auf 0,25 oder 25%.
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.
Bei einem Puls-Pausenverhältnis, das nahe am Minimal- oder Maximalwert liegt, wird die Pulsausgabe verzögert. Durch diese Verzögerung kann das Puls-Pausenverhältnis vom festgelegten Wert abweichen.
Das Puls-Pausenverhältnis kann in jedem SPS-Zyklus geändert werden. (Die Änderung wird bei der nächsten Pulsfrequenzperiode wirksam.) Der Frequenzwert wird nur zu Beginn der Befehlsausführung gelesen.
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
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 F170_PulseOutput_PWM_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
X6_bEnablePWM: BOOL:=FALSE;
END_VAR
VAR
dutPWMControl: F170_PulseOutput_PWM_DUT;
(*iFrequencyValue := 1: f=2.0Hz, T=502.5ms;*)
iPulseWidthModulationDuty: INT:=500;
(*500=50% duty*)
@'': @'';
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,E_MOVE!,Instance,15,1,21,5,,?DEN?D?AENO?C);
B(B_VARIN,,iPulseWidthModulationDuty,13,3,15,5,);
B(B_VAROUT,,dutPWMControl.iPulseWidthModulationDuty,21,3,23,5,);
B(B_CONTACT,,X6_bEnablePWM,4,2,6,4,);
L(6,3,15,3);
L(1,3,4,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_CONTACT,,X6_bEnablePWM,4,2,6,4,);
B(B_F,F170_PulseOutput_PWM!,Instance,13,1,26,6,,?DEN?Ds_dutDataTable?Hn_iPulseOutputChannel?AENO);
B(B_VARIN,,dutPWMControl,11,3,13,5,);
B(B_VARIN,,2,11,4,13,6,);
L(1,3,4,3);
L(6,3,13,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (X6_bEnablePWM) then
dutPWMControl.iPulseWidthModulationDuty:=iPulseWidthModulationDuty;
END_IF;
IF (X6_bEnablePWM) then
F170_PulseOutput_PWM(s_dutDataTable := dutPWMControl,
n_iPulseOutputChannel := 2);
END_IF;