Nockensteuerung für FP0R
Dieser Befehl führt eine Nockensteuerung mit den Parametern im angegebenen SDT und maximal 31 Sollwerten durch. Immer, wenn ein Istwert einem Sollwert entspricht, kann ein Interrupt-Programm ausgeführt werden.
Eingang
Kanal des schnellen Zählers: 0–5
Anfangsadresse des Bereiches, der die Datentabelle enthält
Beispiel: F165_HighSpeedCounter_Cam_8_Values_DUT
Ausgang
Anfangsadresse (WR) des Bereiches, der die Wortadresse für Ausgänge enthält, z.B.. BOOL32_OVERLAPPING_DUT. Wählen Sie die Größe (16 oder 32 Bits) entsprechend der mit diNumberOfTargetValuesAndOutputRelays festgelegten Anzahl aus.
Erstellen Sie auf der Basis des folgenden Musters ihren eigenen SDT: F165_HighSpeedCounter_Cam_8_Values_DUT
Im SDT lassen sich folgende Parameter festlegen:
Steuercode
Wortadresse für Ausgänge
Anzahl der Sollwerte
Sollwert1
...
Sollwertn
Maximaler Sollwert
y |
Istwert des schnellen Zählers | 14000 |
Maximaler Sollwert |
(1) |
Ausführungsbedingung | 10000 |
Sollwert4 |
(2) |
Kontrollmerker des schnellen Zählers | 8000 |
Sollwert3 |
(3) |
Ausgang0-4 |
4000 |
Sollwert2 |
2000 |
Sollwert1 |
Immer, wenn der Istwert im Bereich des Sollwerts n bis n+1 (Vorwärtszählen) oder n+1 bis n (Rückwärtszählen) liegt, wird der zugehörige Ausgangsmerker n auf TRUE gesetzt.
Im Beispiel oben wurde die Maximalwertsteuerung aktiviert. Wenn der Istwert den maximalen Sollwert erreicht, wird der Istwert auf 0 zurückgesetzt und die Zählung beginnt erneut.
Geben Sie die Wortadresse der Ausgänge in einem überlappenden strukturierten Datentyp an, z.B. BOOL32_OVERLAPPING_DUT, und legen Sie diesen SDT an dutBitOutputs an.
Es können maximal 31 Sollwerte angegeben werden.
Die Sollwerte müssen in aufsteigender Folge angegeben werden. Kein Wert darf zweimal vorkommen.
Sobald die Ausführung beginnt, sind alle Ausgänge auf FALSE gesetzt, ausgenommen Ausgang 0, der auf TRUE gesetzt wird, sofern der Istwert kleiner ist als Sollwert 1. Ansonsten wird der Ausgang, der dem Sollwertbereich entspricht, auf TRUE gesetzt. Beispiel Wenn der Istwert zwischen Sollwert 2 = -4000 und Sollwert 3 = +4000 liegt, ist der Ausgang 2 TRUE. Im folgenden Beispiel, wurde die Maximalwertsteuerung deaktiviert. Wenn der Istwert den letzten Sollwert erreicht, zählt der Zähler weiter und der Istwert wird nicht auf 0 zurückgesetzt.
y |
Istwert des schnellen Zählers | 8000 |
Sollwert4 |
(1) |
Ausführungsbedingung | 4000 |
Sollwert3 |
(2) |
Kontrollmerker des schnellen Zählers | -4000 |
Sollwert2 |
(3) |
Ausgang0-4 |
-10000 |
Sollwert1 |
INT0 |
Interrupt-Programm 0 |
Wenn der Befehl mit Maximalwertsteuerung ausgeführt wird, wird der Istwert auf 0 zurückgesetzt, sobald der maximale Sollwert erreicht ist. Die Maximalwertsteuerung kann im Steuercode des Befehls F165_HighSpeedCounter_Cam_8_Values_DUT aktiviert werden. Anstatt der Maximalwertsteuerung kann auch der Rücksetzeingang oder ein Software-Reset verwendet werden, um den Istwert zurückzusetzen.
Die Maximalwertsteuerung kann nur verwendet werden, wenn für die Sollwerte positive Ganzzahlen gewählt werden.
Vorwärts-/Rückwärtszählung mit Maximalwertkontrolle:
y |
Istwert des schnellen Zählers | 14000 |
Maximaler Sollwert |
(1) |
Ausführungsbedingung | 10000 |
Sollwert4 |
(2) |
Kontrollmerker des schnellen Zählers | 8000 |
Sollwert3 |
(3) |
Ausgang0-4 |
4000 |
Sollwert2 |
2000 |
Sollwert1 |
Maximalwertsteuerung: |
Aktiviert |
Deaktiviert (siehe Anmerkung) |
---|---|---|
Vorwärtszählen: Der Zeiger der Datentabelle bewegt sich vom Sollwert 1 zum letzten Sollwert. |
Wenn der Istwert den maximalen Sollwert erreicht:
|
Wenn der Istwert den letzten Sollwert erreicht:
|
Rückwärtszählen: Der Zeiger der Datentabelle bewegt sich vom letzten Sollwert zu Sollwert 1. |
Wenn der Istwert den Wert -1 erreicht:
|
Wenn der Istwert den Wert -1 erreicht:
|
Voraussetzung ist, dass weder ein Rücksetzeingang noch ein Software-Reset verwendet wird.
Kanal |
Hardware-Reset-Eingang |
---|---|
0 |
X2 |
1 |
|
2 |
X5 |
3 |
Das Interrupt-Programm wird ausgeführt, wenn der Istwert dem Sollwert entspricht. Jedes Interrupt-Programm, das in die Taskliste eingegeben wird, ist automatisch aktiviert. Jeder Kanalnummer wird ein spezielles Interrupt-Programm zugewiesen.
Kanal |
0 |
1 |
2 |
3 |
4 |
5 |
Interrupt-Programm |
0 |
1 |
3 |
4 |
6 |
7 |
Wählen Sie den Eingang des schnellen Zählers für den gewünschten Kanal in den Systemregistern aus.
Wenn ein schneller Zählerbefehl ausgeführt wird, wird der Kontrollmerker für den benutzten Kanal (z.B. sys_bIsHscChannel0ControlActive) auf TRUE. Andere Schnelle-Zählerbefehle, die denselben Kanal nutzen, können nicht ausgeführt werden, solange der Kontrollmerker auf TRUE steht.
Um die Ausführung eines Befehls abzubrechen, setzen Sie Bit 3 des Datenregisters, in dem der Steuercode für den schnellen Zähler (sys_wHscOrPulseControlCode) gespeichert wird, auf TRUE. Der Kontrollmerker "Schneller Zähler" wechselt dann zu FALSE. Um die Ausführung des schnellen Zählerbefehls wieder zu aktivieren, setzen Sie Bit 3 auf FALSE zurück.
Wenn der Istwert des Kanals während der Befehlsausführung überschrieben wird, kann es zu unerwartetem Verhalten kommen.
Stellen Sie sicher, dass die Zeitspanne zwischen benachbarten Sollwerten größer ist als 1ms.
Wenn der Befehl im Hauptprogramm ausgeführt wird, muss die minimale Zeitspanne zwischen benachbarten Sollwerten größer sein als die SPS-Zykluszeit.
Wenn der Befehl in einem Interrupt-Programm ausgeführt wird, muss die minimale Zeitspanne zwischen benachbarten Sollwerten größer sein als die maximale Ausführungszeit des Interrupt-Programms.
Dieser Befehl kann auf maximal zwei Kanälen gleichzeitig ausgeführt werden.
Wenn ein Rücksetzeingang oder Software-Reset verwendet wird, muss Sollwert 1 eine Ganzzahl und ³ 1 sein.
Wenn die Maximalwertsteuerung zusammen mit einem Rücksetzeingang oder Software-Reset verwendet wird, verwenden sie diese nicht gleichzeitig.
Der Status des Kontrollmerkers für den schnellen Zähler oder den Pulsausgang kann sich innerhalb eines Zyklus ändern.
wenn der Sollwert > maximaler Sollwert ist.
wenn der Sollwert = 0 ist.
wenn die Sollwerte nicht in aufsteigender Folge sortiert werden
wenn der Sollwert > maximaler Sollwert ist.
wenn der Sollwert = 0 ist.
wenn die Sollwerte nicht in aufsteigender Folge sortiert werden
Der SDT F165_HighSpeedCounter_Cam_8_Values_DUT ist in der FP Library enthalten und lässt sich als Beispiel nutzen.
In der globalen Variablenliste können Sie Variablen festlegen, die von allen POEs des Projekts verwendet werden können.
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
bStartCam: BOOL:=FALSE;
dut_F165_CAM_Example1: F165_Cam_Example1_4_Values_DUT;
END_VAR
VAR_EXTERNAL
WR0_bits_F165_CAM_Examples: BOOL16_OVERLAPPING_DUT;
END_VAR
Wenn die Variable bStartCam auf TRUE gesetzt wird, wird die Funktion ausgeführt.
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_CONTACT,,sys_bIsFirstScan,5,2,7,4,);
B(B_F,E_MOVE!,Instance,14,1,20,5,,?DEN?D?AENO?C);
B(B_VARIN,,0,12,3,14,5,);
B(B_VAROUT,,sys_diHscChannel0ElapsedValue,20,3,22,5,);
B(B_COMMENT,,Reset the elapsed value,1,0,21,1,);
L(1,3,5,3);
L(7,3,14,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_F,F165_HighSpeedCounter_Cam!,Instance,14,1,28,6,,?DEN?HiHscChannel?Ds_dutDataTable?AENO?CdutBitOutputs);
B(B_VARIN,,0,12,3,14,5,);
B(B_VARIN,,dut_F165_CAM_Example1,12,4,14,6,);
B(B_VAROUT,,WR1_dut_CAM1,28,3,30,5,);
B(B_CONTACT,,bStartCam,5,2,7,4,R);
B(B_COMMENT,,Start the cam control,1,0,21,1,);
L(1,3,5,3);
L(7,3,14,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (sys_bIsFirstScan) then
sys_diHscChannel0ElapsedValue:=0;
END_IF;
IF DF(bStartCam) then
F165_HighSpeedCounter_Cam(iHscChannel := 0,
s_dutDataTable := dut_F165_CAM_Example1,
dutBitOutputs => WR0_bits_F165_CAM_Examples);
END_IF;
Der SDT F165_HighSpeedCounter_Cam_8_Values_DUT ist in der FP Library enthalten und lässt sich als Beispiel nutzen.
VAR
bStartCam: BOOL:=FALSE;
dut_F165_CAM_Example2: F165_Cam_Example2_4_Values_DUT;
END_VAR
VAR_EXTERNAL
WR0_bits_F165_CAM_Examples: BOOL16_OVERLAPPING_DUT;
END_VAR
Wenn die Variable bStartCam auf TRUE gesetzt wird, wird die Funktion ausgeführt.
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_CONTACT,,sys_bIsFirstScan,5,2,7,4,);
B(B_F,E_MOVE!,Instance,14,1,20,5,,?DEN?D?AENO?C);
B(B_VARIN,,0,12,3,14,5,);
B(B_VAROUT,,sys_diHscChannel0ElapsedValue,20,3,22,5,);
B(B_COMMENT,,Reset the elapsed value,1,0,21,1,);
L(1,3,5,3);
L(7,3,14,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_F,F165_HighSpeedCounter_Cam!,Instance,14,1,28,6,,?DEN?HiHscChannel?Ds_dutDataTable?AENO?CdutBitOutputs);
B(B_VARIN,,0,12,3,14,5,);
B(B_VARIN,,dut_F165_CAM_Example2,12,4,14,6,);
B(B_VAROUT,,WR0_bits_F165_CAM_Examples,28,3,30,5,);
B(B_CONTACT,,bStartCam,5,2,7,4,R);
B(B_COMMENT,,Start the cam control,1,0,21,1,);
L(7,3,14,3);
L(1,3,5,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF (sys_bIsFirstScan) then
sys_diHscChannel0ElapsedValue:=0;
END_IF;
IF DF(bStartCam) then
F165_HighSpeedCounter_Cam(iHscChannel := 0,
s_dutDataTable := dut_F165_CAM_Example2,
dutBitOutputs => WR0_bits_F165_CAM_Examples);
END_IF;