F165_HighSpeedCounter_Cam

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.

Parameter

Eingang

iHscChannel* (INT)

Kanal des schnellen Zählers: 0–5

s_dutDataTable (ANY_DUT)

Anfangsadresse des Bereiches, der die Datentabelle enthält

Beispiel: F165_HighSpeedCounter_Cam_8_Values_DUT

Ausgang

dutBitOutputs (ANY_DUT)

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.

Anmerkungen

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

Maximalwertsteuerung

  • 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

Überblick:

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:

  • Der Zeiger kehrt zu Sollwert 1 zurück

  • Der Ausgang 0 wird auf TRUE gesetzt

  • Der Istwert wird auf 0 gesetzt

Wenn der Istwert den letzten Sollwert erreicht:

  • Der Zeiger kehrt zu Sollwert 1 zurück

  • Der Ausgang 0 wird auf TRUE gesetzt

  • Der Istwertzähler zählt weiter vorwärts und beginnt erneut beim Minimalwert des Ringzählers

Rückwärtszählen:

Der Zeiger der Datentabelle bewegt sich vom letzten Sollwert zu Sollwert 1.

Wenn der Istwert den Wert -1 erreicht:

  • Der Zeiger kehrt zum letzten Sollwert zurück

  • Der Ausgang, der dem letzten Sollwert entspricht, wird auf TRUE gesetzt.

  • Der Istwert wird auf den maximalen Sollwert gesetzt

Wenn der Istwert den Wert -1 erreicht:

  • Der Zeiger kehrt zu Sollwert n zurück

  • Der Ausgang, der dem letzten Sollwert entspricht, wird auf TRUE gesetzt.

  • Der Istwertzähler zählt weiter rückwärts und beginnt erneut beim Maximalwert des Ringzählers.

Anmerkung

Voraussetzung ist, dass weder ein Rücksetzeingang noch ein Software-Reset verwendet wird.

Hardware-Reset

Kanal

Hardware-Reset-Eingang

0

X2

1

2

X5

3

Interrupt-Betrieb

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

Allgemeine Programmierhinweise

  • 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.

Fehleralarmmerker

sys_bIsOperationErrorHold (wird auf TRUE gesetzt und bleibt TRUE)
  • wenn die Kanalnummer oder Werte der Datentabelle außerhalb des zulässigen Bereichs liegen
  • wenn die Pulsausgabe nicht in den Systemregistern gesetzt wurde
  • wenn der Sollwert > maximaler Sollwert ist.

  • wenn der Sollwert = 0 ist.

  • wenn die Sollwerte nicht in aufsteigender Folge sortiert werden

sys_bIsOperationErrorNonHold (wird für einen Zyklus auf TRUE gesetzt)
  • wenn die Kanalnummer oder Werte der Datentabelle außerhalb des zulässigen Bereichs liegen
  • wenn die Pulsausgabe nicht in den Systemregistern gesetzt wurde
  • wenn der Sollwert > maximaler Sollwert ist.

  • wenn der Sollwert = 0 ist.

  • wenn die Sollwerte nicht in aufsteigender Folge sortiert werden

Beispiel mit Maximalwertsteuerung

SDT

Der SDT F165_HighSpeedCounter_Cam_8_Values_DUT ist in der FP Library enthalten und lässt sich als Beispiel nutzen.

Globale Variablen

In der globalen Variablenliste können Sie Variablen festlegen, die von allen POEs des Projekts verwendet werden können.

POE-Kopf

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

POE-Rumpf

Wenn die Variable bStartCam auf TRUE gesetzt wird, wird die Funktion ausgeführt.

KOP-Rumpf

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

ST-Rumpf

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;

Beispiel ohne Maximalwertsteuerung

SDT

Der SDT F165_HighSpeedCounter_Cam_8_Values_DUT ist in der FP Library enthalten und lässt sich als Beispiel nutzen.

POE-Kopf

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

POE-Rumpf

Wenn die Variable bStartCam auf TRUE gesetzt wird, wird die Funktion ausgeführt.

KOP-Rumpf

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

ST-Rumpf

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;

Letzte Änderung am: 2022-06-28Feedback zu dieser SeitePanasonic Hotline