ZÄHLER EINER SPS
Zähloperationen werden für verschiedene Belange in der Steuerungstechnik gebraucht, z.B. zum Erfassen von Stückzahlen oder Impulsen. In der Siemens SPS-Familie gibt es zwei Arten von Zähler (englisch Counter): Die S7-Zähler, auch Simatic-Zähler genannt und IEC-Counter. Beide Arten sind sowohl in den (alten) S7-300/400 Steuerungen als auch in den neuen S7-1500er programmierbar. In den S7-1200er CPUs sind hingegen nur IEC-Counter programmierbar. S7-Zähler sind in der CPU-Firmware eingebettet und in der Menge begrenzt. Je nach CPU ist die Anzahl an verfügbaren Zählern unterschiedlich. Dagegen ist die Anzahl an IEC-Counter nur durch die Speichergröße der SPS begrenzt. S7-Zähler haben einen stark eingeschränkten Zählbereich (0 - 999), während der Bereich des IEC-Counter wesentlich größer ist. (z.B. bei Datentyp Integer (INT) -32.768 bis +32.767). IEC-Zähler sind in der Firmware der CPU eingebettete System-Funktionsbausteine (SFB). Der Aufruf des IEC-Zählers erfolgt als Instanz.
Zähler-Arten
S7-Zähler
S7-Zähler werden über eine Nummer absolut adressiert. Durch diese Nummernabhängigkeit sind Programmbausteine mit S7-Zähler nicht mehrfach verwendbar. Der Zählbereich ist auf 0 - 999 begrenzt. Die Ausgabe des aktuellen Zählwertes erfolgt im BCD-Code und Hexadezimal, die Statusausgabe Q des Zählers als Bool.

15 | 8 | 7 | 0 | ||||||||||||
x | x | x | x | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 |
nicht | 1 | 4 | 3 | ||||||||||||
relevant | Zählwert im BCD-Format |
15 | 8 | 7 | 0 | ||||||||||||
x | x | x | x | x | x | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
nicht | 143 | ||||||||||||||
relevant | Zählwert im HEX-Format |
Die Eingabe des Zählwertes (ZW) erfolgt im Word-Format (C#0 bis C#999). Für die Zähleingänge ZV (Vorwärts) und ZR (Rückwärts) sollten immer exakte Signale, z.B. mit positiver Flankenauswertung angewendet werden.
IEC-Zähler
Die IEC-Zähler verfügen gegenüber den S7-Zählern über eine bessere Performance und einem wesentlich größeren Zählbereich. IEC-Zähler werden in dem Programmbaustein, in dem sie aufgerufen bzw. gebraucht werden deklariert. Jeder Zähler braucht eine Datenbausteinstruktur um die Daten zu speichern. Wird ein IEC-Zähler programmiert, erstellt Step 7 bzw. TIA-Portal automatisch den für den Zähler erforderlichen Instanz-DB.

Die Eingabe des Zählwertes (PV) erfolgt mit 16-Bit-Ganzzahlen im Datenformat Integer. Für die Zähleingänge CU (count up) Vorwärts und CD (count down) Rückwärts sollten immer exakte Signale, z.B. mit positiver Flankenauswertung angewendet werden.
Das Datenformat Integer (Int) für den Zählwert (PV) ist für alle Steuerungen der S7-Familie gültig. Bei den neuen 1200/1500er-CPUs können aber noch weitere Datenformate, z.B. 32-Bit-Ganzzahlen Double Integer (Dint) oder Unsingned Double Integer (UDint) frei gewählt werden.

Die max. möglichen Eingabewerte für den Zählbereich (PV) je nach Datenformat
Int | -32.768 bis +32.767 |
Uint | 0 bis 65535 |
Dint | -2147483648 bis +2147483647 |
UDint | 0 bis 4294967295 |


S7-Zähler
Parameter
Parameter: | <Zähler_nr>** |
Deklaration: | Ein/Aus |
Datentyp: | Counter |
Speicherbereich: | Z |
Funktion: | Zähler der Anweisung |
Parameter: | DUAL |
Deklaration: | Ausgang |
Datentyp: | Word,S5Time/Date |
Speicherbereich: | E,A,M,D,L,P |
Funktion: | Aktueller Zählwert* |
Parameter: | DEZ |
Deklaration: | Ausgang |
Datentyp: | Word,S5Time/Date |
Speicherbereich: | E,A,M,D,L,P |
Funktion: | Aktueller Zählwert* |
Parameter: | ZW |
Deklaration: | Eingang |
Datentyp: | Word |
Speicherbereich: | E,A,M,D,L,P |
Funktion: | Einstellung Zählwert* |
Parameter: | S |
Deklaration: | Eingang |
Datentyp: | BOOL |
Speicherbereich: | E,A,M,T,Z,D,L |
Funktion: | Zähler voreinstellen |
Parameter: | R |
Deklaration: | Eingang |
Datentyp: | BOOL |
Speicherbereich: | E,A,M,T,Z,D,L |
Funktion: | Zähler rücksetzen |
Parameter: | Q |
Deklaration: | Ausgang |
Datentyp: | BOOL |
Speicherbereich: | E,A,M,D,L |
Funktion: | Status des Zählers |
Parameter: | ZV |
Deklaration: | Eingang |
Datentyp: | BOOL |
Speicherbereich: | E,A,M,D,L,T,Z |
Funktion: | Vorwärtszähleingang |
Parameter: | ZR |
Deklaration: | Eingang |
Datentyp: | BOOL |
Speicherbereich: | E,A,M,D,L,T,Z |
Funktion: | Rückwärtszähleingang |
Vorwärtszähler

Wenn der Signalzustand am Eingang S von „0“ auf „1“ wechselt, wird der Zählwert auf den Wert von Parameter ZW gesetzt. Ändert sich der Signalzustand am Zähleingang ZV von „0“ auf „1“ (positive Signalflanke), wird der aktuelle Zählwert um den Faktor eins erhöht. An den Ausgängen DUAL und DEZ wird der aktuelle Zählwert hexadezimal bzw. BCD-codiert ausgegeben. Der Signalzustand am Ausgang Q ist logisch „1“ wenn der Zählwert größer Null ist. Ist der Zählwert gleich Null, wird der Signalzustand am Ausgang Q logisch „0“. Der Zählwert wird auf Null gesetzt, wenn der Rücksetzeingang R von „0“ auf „1“ wechselt. Steht an Rücksetzeingang R immer „1“ an, sind die Eingänge ZV und S wirkungslos.
Rückwärtszähler

Der Rückwärtszähler funktioniert im Prinzip wie der Vorwärtszähler mit dem Unterschied, dass bei Änderung des Signalzustandes von „0“ auf „1“ (positive Signalflanke) am Zähleingang ZR der aktuelle Zählwert um den Faktor eins vermindert wird. Der Signalzustand am Ausgang Q ist logisch „1“ wenn der Zählwert ungleich Null ist. Ist der Zählwert gleich Null, wird der Signalzustand am Ausgang Q logisch „0“. Der Zählwert wird auf Null gesetzt, wenn der Rücksetzeingang R von „0“ auf „1“ wechselt. Liegt ständig „1“-Signal am Rücksetzeingang R an, sind die Eingänge ZR und S ohne Funktion.
Vor-/Rückwärtszähler

Der Vorwärts- und Rückwärtszähler erhöht den Zählwert um den Faktor eins, wenn der Signalzustand am Zähleingang ZV von „0“ auf „1“ (positive Signalflanke) wechselt und vermindert den Zählwert um den Faktor eins, wenn am Zähleingang ZR der Signalzustand von „0“ auf „1“ (positive Signalflanke) wechselt. Das Verhalten des Ausgang Q ist analog zu den Zählern mit nur einer Zählfunktion. Der Signalzustand am Ausgang Q ist „1“ wenn der Zählwert größer Null ist. Ist der Zählwert gleich Null, liefert der Ausgang Q logisch „0“. Der Zählwert wird auf Null gesetzt, wenn der Rücksetzeingang R von „0“ auf „1“ wechselt. Liegt ständig „1“-Signal am Eingang R an, sind ZV, ZR und S ohne Funktion.

Das Signalzustandsdiagramm verdeutlicht die Funktionsweise aller Zähler, also Vorwärts-, Rückwärts- sowie Vor-/Rückwärtszähler .
Parallel zu den „fertigen“ Zählern kann man die Einzelkomponenten eines Counters auch separat, quasi in Einzelteile zerlegt, programmieren. Der aktuelle Zählerstand kann bei dieser Variante nur mit einer Lade- und Transferfunktion ermittelt und verarbeitet werden.

Bei den Programmierern sind/waren die S7-Zähler eher unbeliebt und werden/wurden kaum verwendet. Der eingeschränkte Zählbereich (0-999) und die beschränkte Anzahl an Zähler sind/waren sicherlich Gründe, aber auch das Verhalten von Ausgang Q ist nicht unbedingt Nobelpreiswürdig, denn dieser liefert ein „0“-Signal wenn er noch nicht gesetzt wurde und zusätzlich dazu auch bei Erreichen des Zählwertes. Mit anderen Funktionen der SPS (Addition, Subtraktion, Lade- und Transferfunktionen) konnten eigene, besser funktionierende Zähler programmiert werden.
