Zähler programmieren

In der SPS-Programmiersoftware Step7 hat man zwei Möglichkeiten, Zähler zu programmieren. Möchte man gemäß der Programmiernorm 61131-3 programmieren, muss man die Systemfunktionsbausteine SFB0 (CTU), SFB1 (CTD) oder SFB2 (CTUD) benutzen. Man kann aber auch auf die firmenspezifischen Zählerbausteine Z_VORW, Z_RUECK und ZAEHLER zurückgreifen. Diese benötigen im Gegensatz zu den Systemfunktionsbausteinen keinen Instanzdatenbaustein. Dafür vergibt man den Zählern einen Zähleroperanden Zx, z.B. Z1.

Ob man die Programmierung der Zähler in Anweisungsliste AWL, Funktionsplan FUP bzw. Kontaktplan KOP und der Programmiersprache SCL vornimmt, spielt im Grunde keine Rolle. Die Zähler werden im Systemspeicher der CPU's abgelegt. Wieviele Zähler in einem SPS-Programm benutzt werden können, hängt von der verwendeten CPU ab. Hier muss man im Referenzhandbuch des Geräts nachschauen, um Näheres zu erfahren.

Zähler bzw. COUNTER gehören zu den Parametertypen und haben die Größe von 16 Bits (2 Bytes, 1 Wort).

Bedeutung der Ein- und Ausgänge anhand des Vorwärts- und Rückwärtszählers (ZAEHLER)

Zähler programmieren

Ein Zähler ist aufgebaut wie auf dem Bild dargestellt. Bei diesem Beispiel handelt es sich um einen Vorwärts- und Rückwärtszähler. Die Eingangs- und Ausgangsoperanden haben dabei folgende Bedeutung:

  • Zx: Die Bezeichnung für den Zähler, z.B. Z1, Z2 usw.
  • ZAEHLER: Hier steht der Typ des Zählers, in diesem Beispiel ist das ein Vorwärts- und Rückwärtszähler. Z_VORW ist nur ein Vorwärtszähler, Z_RUECK ist ein Rückwärtszähler.
  • ZV: Der Eingang für den Vorwärtszählimpuls.
  • ZR: Der Eingang für den Rückwärtszählimpuls.
  • S: Der Setzeingang des Zählers.
  • ZW Eingang für den Zählwert. Darüber kann der Zähler voreingestellt werden (Wortoperand 16 Bit breit).
  • R: Der Rücksetzeingang des Zählers (Bitoperand)
  • DUAL Ausgabe des aktuellen Zählwertes dual codiert als Wortoperand 16 Bit breit.
  • DEZ: Ausgabe des aktuellen Zählwerts dezimal codiert als Wortoperand 16 Bit breit.
  • Q: Ausgang des Zählers zum Abfragen des Zählers als Bitoperand.

Verwendung von Datentypen und Operanden für Ein- und Ausgänge von Zählern

Folgende Operanden und Datentypen werden für die Ein- und Ausgänge verwendet:

  • Zx: Operand Z, Datentyp COUNTER.
  • ZV: Operanden E, A, M, DBX, L, T, und Z, Datentyp Bool.
  • ZR: Operanden E, A, M, DBX, L, T, und Z, Datentyp Bool.
  • S: Operanden E, A, M, DBX, L, T, und Z, Datentyp Bool.
  • ZW Konstante, EW, AW, MW, DBW und LW, Datentyp WORD.
  • R: Operanden E, A, M, DBX, L, T, und Z, Datentyp Bool.
  • DUAL EW, AW, MW, DBW und LW, Datentyp WORD.
  • DEZ: EW, AW, MW, DBW und LW, Datentyp WORD.
  • Q: E, A, M, DBX und L, Datentyp Bool.

Ausgang Q

Der Ausgang Q hat das Signal 1, solange der Zählerstand über 0 ist. Wird der Zähleroperand, z.B. Z1, abgefragt und der Zählerstand ist über 0, dann erhält man das Signal 1 zurück, was soviel bedeutet wie "Der Zählerstand ist nicht Null". Den Status des Zählers kann man in Verbindung mit den binären Grundverknüpfungen (AND, OR, XOR, NAND, NOR etc.) verwenden.

Ausgänge DUAL und DEZ

Über diese beiden Ausgänge kann der aktuelle Zählerstand abgefragt werden.

Setzen eines Zählers

Über eine positive Flanke am Setzeingang, wird der Zählerstand auf den Zählwert gesetzt, den man am Eingang ZW eingeben kann.

Eingabe des Zählwerts

Der Zählwert am Eingang ZW kann entweder als Konstante oder BCD-codiert eingegeben werden. Beispiele:

  • C#999, Eingabe als Konstante
  • W#16#999, Eingabe BCD-codiert

Ein Zählwert kann auch mit dem Ladebefehl L geladen werden, z.B. L C#999 oder L W#16#999. Der Befehl steht für Laden in den Akkumulator 1. Im Programmablauf sollte man natürlich immer zuerst der Zählwert in den Akku laden und erst danach den Setzbefehl geben. Man kann den Zählwert auch aus Eingangs-, Ausgangs-, Merker-, Lokaldaten- oder Datenwörtern laden.

Der Zählwert belegt im Akku eine Bitlänge von 16 Bits (1 WORD, 2 Bytes) und liegt als BCD-Code vor. Auch wenn der Datentyp WORD 16 Bit breit ist, werden dabei nur die ersten 12 Bits (Bit 0 - Bit 11) belegt. Ein Block von 4 Bits wird dabei als eine Tetrade bezeichnet und mit einer Tetrade kann man die Ziffern 0 - 9 darstellen. Es stehen 3 Tetraden zur Verfügung. Daher kann man nur einen Maximalwert von 999 eingeben.

Die Eingabe des Zählwerts ist ähnlich wie bei der Programmierung von Zeitgliedern. Der Unterschied ist, dass bei Zeitgliedern zusätzlich die Bits 12 und 13 benutzt werden, um eine Zeiteinheit anzugeben. Bei Zählern werden diese Bitstellen nicht benutzt. Zeitglieder und Zähler benutzen auch die Bitstellen 14 und 15 nicht.

Werden Zähler in SPS-Programmen außerhalb von Step7 nach der Programmiernorm 61131-3 programmiert, gibt es die Möglichkeit der Zählwerteingabe von -32768 bis 32767. Hier muss man in der Hilfefunktion der jeweiligen Software nachschauen, inwieweit die Zählwerteingabe begrenzt ist.

Rücksetzen eines Zählers

Über den Rücksetzeingang wird ein Zähler rückgesetzt. Der Zählerstand erhält dadurch den Wert 0, der Ausgang ist dann ebenfalls 0. Ein Zähler ist rücksetzdominant. Solange ein Signal 1 am Rücksetzeingang anliegt, kann nicht gezählt werden und der Zähler kann auch nicht auf den Zählwert gesetzt werden.

Vorwärts- und Rückwärtszählen

Eine positive Flanke am Eingang ZV (Vorwärtszählers) oder am Eingang ZR (Rückwärtszählen) lässt den aktuellen Zählerstand um 1 hoch- bzw. runterzählen. Dabei kann der Zählerstand nur Zahlenwerte innerhalb 0 - 999 haben. Bei einem Versuch, darüber oder darunter zu zählen, bleibt der Zählerstand an der Wertegrenze stehen (bei 0 oder 999).

Zählerfunktionen einzeln verwenden

Man kann in Step7 einzelne Zählerfunktionen auch separat bedienen wie folgende Übersicht zeigt.

Rückwärtszählen
Rückwärtszählen
Vorwärtszählen
Vorwärtszählen
Zähler zurücksetzen
Zähler zurücksetzen
Zähler auf Zählwert setzen
Zähler auf Zählwert setzen