Zykluszeit von 250 μs

Beachten Sie, dass eine Zykluszeit von 250 μs auf einem CX7000 ein extremes Optimum darstellt und alle Rahmenbedingungen passen müssen. Des Weiteren ist eine Zykluszeit von 250 μs nur dann sinnvoll, wenn die Ein- und Ausgänge entsprechend schnell sind.

Der CX7000 hat unterschiedliche Schnittstellen, darunter beispielsweise den K-Bus. Der K-Bus schafft unter optimalen Bedingungen vielleicht 1 ms und ist daher nicht für Zykluszeiten von 250 μs geeignet. Der E-Bus (EtherCAT) ist viel schneller, nur ist der Aufbau eines EtherCAT-Frames und das Zusammenfügen der Daten in einen EtherCAT-Frame wesentlich aufwendiger, sodass auch hier nur 1 ms möglich sind.

Natürlich kann EtherCAT mit anderen Industrie-PCs unter 100 μs betrieben werden. Diese sind in der Regel aber mit leistungsfähigeren CPUs ausgestattet und nutzen eventuell einen DMA-Controller für die EtherCAT-Bearbeitung. Das ist beim CX7000 allerdings nicht der Fall, sodass die CPU-Leistung und die Schnittstellen zum EtherCAT die begrenzenden Faktoren sind. Natürlich ist der CX7000 als Kleinsteuerung nicht für Highspeed-Anwendungen entwickelt worden und sollte aufgrund seiner Kosteneffizienz nicht mit leistungsfähigeren Industrie-PCs verglichen werden.

Zykluszeit von 250 μs einstellen

Eine Zykluszeit von 250 μs ist auf einem CX7000 möglich, wenn die Rahmenbedingungen stimmen. Beim CX7000 helfen die Multifunktions-I/Os, die über eine schnelle IO-Verbindung mit der CPU verbunden sind. Die Verbindung ist sehr schlank gehalten und hat einen entsprechend guten Datendurchsatz. Mithilfe der Multifunktions-I/Os ist es möglich, die 250 μs zu erreichen. Das SPS-Programm darf natürlich nur sehr wenig Code enthalten und das Core-Limit auf 90 % eingestellt werden, was wiederum die beschriebenen Nachteile mit sich bringt (siehe: Echtzeit und CPU-Auslastung).

Zykluszeit von 250 μs 1:

Zusätzlich sollten Sie die Priorität der Task so einstellen, dass die 250 μs Task die höchste Priorität im System hat.

Zykluszeit von 250 μs 2:

Wenn Sie nun einen digitalen Ausgang des CX7028-Schnittstelle toggeln lassen, in der 250 μs Task beispielsweise mit Out_01:=not Out_01, so wird diese mit einer Frequenz von 2 kHz ausgegeben. Damit der Ausgang optimal schnell ist, sollte dieser Ausgang eine Last haben. Verkabeln Sie den Ausgang nur mit einem digitalen Eingang, dadurch ist die Last sehr klein und das Ausschaltverhalten des Treibers relativ langsam. Langsam bezieht sich hier auf die 250 μs Taskzeit. Es macht schon einen Unterschied aus, ob der Ausgang 50 μs oder 100 μs zum Ausschalten benötigt. Wenn sie nun die Reaktionszeit messen wollen, also die Zeit wie lange der CX7000 braucht, um auf einen Eingang zu reagieren, ist folgender Hintergrund wichtig:

Ab einer Zykluszeit von 1 ms oder größer wird ein optimaler Zyklus gefahren, d.h. die Eingänge der CX7028-Schnittstelle werden ca. 20 % vor dem neuen Taskzyklus vom Prozessor der CX7028-Schnittstelle eingelesen. Ist die Taskzeit schneller als 1 ms, so reicht die Zeit für die optimierte Reaktionszeit nicht aus. Hier werden dann die Eingänge mit dem Taskzyklus eingelesen. Das hat zur Folge, dass eine Taskzeit von 500 μs die gleiche Reaktionszeit erreicht wie Taskzeit von 1 ms. Unter 1 ms Taskzeit braucht das Update für einen Zyklus 4 Taskzyklen. In 1 ms oder langsamer zwei Taskzyklen. Dies soll ihnen bewusst machen, dass nicht immer die Verkürzung der Zykluszeit die Reaktionszeit verkürzt, sondern auch der interne Ablauf, der eine entscheidende Rolle beim Einlesen der Daten spielt.

Ein Beispiel, damit Sie dieses Verhalten selber reproduzieren können, die Unterschiede sehen und messen können:

  1. Schließen Sie die Spannungsversorgung +24 V Up und“0 V Up zur Versorgung der Multifunktions-I/Os an.
  2. Verbinden Sie den Ausgang 1 mit dem Eingang 1, um den Ausgang wie beschrieben zu toggeln.
  3. Verbinden Sie den Ausgang 2 mit dem Eingang 2.
  4. Stellen Sie das Core-Limit auf 90 % ein, die Base-Zeit auf 250 μs, die Priorität der schnellen Task auf die höchste Priorität und die Idle-Task auf 10 ms.

Die Eingänge haben nur eine minimale Filterzeit und sind daher gut für die Messung geeignet. Eine Last am Ausgang ist in dem Fall nicht notwendig. Die Base-Zeit belassen wir für die folgenden Beispiele immer auf 250 μs und erhöhen nur die Anzahl der Cycle-Ticks, um die entsprechende Taskzeit einzustellen.

Zykluszeit von 250 μs 3:

Beispielprogramm

PROGRAM MAIN
VAR
    bOut_1 AT %Q*:BOOL; (*toggle Output link to digital Output pin 7*)
    bOut_2 AT %Q*:BOOL; (*reaction time link to digital Output pin 14*)

    bIn_1 AT %I*: BOOL; (*toggle Output link to digital Input pin 2*)
    bIn_2 AT %I*: BOOL; (*reaction time link to digital Input pin 10*)

    fbTimer : TON;
    fbflanke1 : R_TRIG;
    fbflanke2 : R_TRIG;

    cnt1: INT; (*toggle Output*)
    cnt1_M: INT; (*toggle Output*)

    cnt2: INT; (*reaction time*)
    cnt2_M: INT; (*reaction time*)
END_VAR


PROGRAM MAIN
bOut_1:= NOT bOut_1; (*toggle Output*)
bOut_2:= NOT bIn_2; (*reaction time*)

fbflanke1(CLK:=bIn_1);
IF fbflanke1.Q THEN
    cnt1:=cnt1+1; (*toggle Output*)
END_IF

fbflanke2(CLK:=bIn_2);
IF fbflanke2.Q THEN
    cnt2:=cnt2+1; (*reaction time*)
END_IF

fbTimer(PT:=T#1S,in:=NOT fbTimer.Q);

IF fbTimer.Q THEN
    cnt2_M:=cnt2; (*reaction time*)
    cnt1_M:=cnt1; (*toggle Output*)
    cnt1:=0;
    cnt2:=0;
END_IF

Das Toggeln des Ausgangs bewirkt eine Frequenz von 2 kHz, 250 μs On 250 μs Off, also eine Periodendauer von 500 μs. Bei einer Messung der positiven Flanke sind dies 2000 Flankenwechsel in einer Sekunde.

Zykluszeit von 250 μs 4:
Messung bei einer Taskzeit von 250 μs.

Bei der Reaktionszeit sind es 500 Wechsel in einer Sekunde, da hier der optimierte Zugriff auf die Eingänge nicht greift.

Zykluszeit von 250 μs 5:
Messung bei einer Taskzeit von 500 μs.

Wie zu erwarten sind bei einer doppelt so großen Taskzeit die Werte nur halb so groß.

Zykluszeit von 250 μs 6:
Messung bei einer Taskzeit von 1 ms.

Bei einer Taskzeit von 1 ms kann man deutlich sehen, dass der optimierte Modus tatsächlich hilft, die Reaktionszeit zu verringern. Während der Toggle-Wechsel sich wieder halbiert hat, also bei einer Taskzeit von 1 ms jetzt noch bei 500 Hz liegt, ist der Wert bei der Reaktionszeit gleichgeblieben.