ZÄHLER EINER SPS

Zähloperationen werden für verschiedene Belange in der Steuerungstechnik gebraucht, z.B. zum Erfassen von Stückzahlen oder Im­pulsen. 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 pro­grammierbar. In den S7-1200er CPUs sind hingegen nur IEC-Counter pro­grammierbar. S7-Zähler sind in der CPU-Firmware ein­gebettet und in der Menge begrenzt. Je nach CPU ist die Anzahl an ver­fügbaren Zählern unter­schiedlich. Dagegen ist die Anzahl an IEC-Counter nur durch die Speicher­größe der SPS begrenzt. S7-Zähler haben einen stark ein­geschränkten Zähl­bereich (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 Firm­ware der CPU ein­gebettete System-Funk­tions­bau­steine (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 Nummern­abhängigkeit sind Programm­bausteine 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 Status­ausgabe Q des Zählers als Bool.

FUP-Darstellung S7-Zähler
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
Ausgang DEZ
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
Ausgang DUAL

Die Eingabe des Zählwertes (ZW) er­folgt im Word-Format (C#0 bis C#999). Für die Zähl­eingänge ZV (Vorwärts) und ZR (Rückwärts) sollten immer exakte Signale, z.B. mit positiver Flanken­aus­wertung 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 Programm­baustein, in dem sie aufgerufen bzw. gebraucht werden deklariert. Jeder Zähler braucht eine Datenbaustein­struktur 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.

IEC-Vor-/Rückwärtszähler

Die Eingabe des Zählwertes (PV) er­folgt mit 16-Bit-Ganzzahlen im Datenformat Integer. Für die Zähl­eingänge CU (count up) Vorwärts und CD (count down) Rückwärts sollten immer exakte Signale, z.B. mit positiver Flanken­aus­wertung 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 Daten­formate, z.B. 32-Bit-Ganzzahlen Double Integer (Dint) oder Unsingned Double Integer (UDint) frei gewählt werden.

IEC-Zähler Auswahl Datenformat

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
IEC-Zähler Datenformat DInt
IEC-Zähler Datenforma UDint

S7-Zähler

Parameter
Parameter: <Zähler_nr>**
Deklaration: Ein/Aus
Datentyp: Counter
Speicherbereich: Z
Funktion: Zähler der Anweisung
** Die Anzahl Zähler ist CPU abhängig
Parameter: DUAL
Deklaration: Ausgang
Datentyp: Word,S5Time/Date
Speicherbereich: E,A,M,D,L,P
Funktion: Aktueller Zählwert*
*(Hexadezimal)
Parameter: DEZ
Deklaration: Ausgang
Datentyp: Word,S5Time/Date
Speicherbereich: E,A,M,D,L,P
Funktion: Aktueller Zählwert*
*(BCD-Format)
Parameter: ZW
Deklaration: Eingang
Datentyp: Word
Speicherbereich: E,A,M,D,L,P
Funktion: Einstellung Zählwert*
*(C#0 bis C#999)
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
S7 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 Signal­zustand am Zähleingang ZV von „0“ auf „1“ (positive Signal­flanke), 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 aus­gegeben. Der Signal­zustand 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 lo­gisch „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
S7 Rückwärtszähler

Der Rückwärtszähler funktioniert im Prinzip wie der Vorwärtszähler mit dem Unterschied, dass bei Änderung des Signal­zustandes von „0“ auf „1“ (positive Signal­flanke) am Zähleingang ZR der aktuelle Zählwert um den Faktor eins vermindert wird. Der Signal­zustand 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 lo­gisch „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
S7 Vor-/Rückwärtszähler

Der Vorwärts- und Rückwärtszähler erhöht den Zählwert um den Faktor eins, wenn der Signal­zustand am Zähleingang ZV von „0“ auf „1“ (positive Signal­flanke) wechselt und vermindert den Zählwert um den Faktor eins, wenn am Zähleingang ZR der Signal­zustand von „0“ auf „1“ (positive Signal­flanke) wechselt. Das Verhalten des Ausgang Q ist analog zu den Zählern mit nur einer Zählfunktion. Der Signal­zustand am Ausgang Q ist „1“ wenn der Zählwert größer Null ist. Ist der Zählwert gleich Null, liefert der Ausgang Q lo­gisch „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.

S7 Vor-/Rückwärtszähler Diagramm
Signalzustandsdiagramm ZW=5

Das Signalzustandsdiagramm verdeutlicht die Funktions­weise 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, pro­grammieren. Der aktuelle Zähler­stand kann bei dieser Variante nur mit einer Lade- und Transfer­funktion ermittelt und verarbeitet werden.

S7 Zähler als Einzelkomponenten

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 be­schrä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 (Ad­dition, Sub­traktion, Lade- und Transferfunktionen) konnten eigene, besser funktionierende Zähler pro­grammiert werden.

IEC-Zähler

Parameter
Parameter: CU
Deklaration: Eingang
Datentyp: BOOL
Speicherbereich: E,A,M,D,L oder
Konstante
Funktion: Vorwärtszähleingang
Parameter: CD
Deklaration: Eingang
Datentyp: BOOL
Speicherbereich: E,A,M,D,L oder
Konstante
Funktion: Rückwärtszähleingang
Parameter: R
Deklaration: Eingang
Datentyp: BOOL
Speicherbereich: E,A,M,D,L,P oder
Konstante
Funktion: Rücksetzeingang
Parameter: LD
Deklaration: Eingang
Datentyp: BOOL
Speicherbereich: E,A,M,D,L,P oder
Konstante
Funktion: Ladeeingang
Parameter: PV
Deklaration: Eingang
Datentyp: Ganzzahlen
Speicherbereich: E,A,M,D,L,P oder
Konstante
Funktion: Zähler voreinstellen
Parameter: CV
Deklaration: Ausgang
Datentyp: Ganzzahlen, CHAR,
WCHAR, DATE
Speicherbereich: E,A,M,D,L,P
Funktion: Aktueller Zählwert
Parameter: Q
Deklaration: Ausgang
Datentyp: BOOL
Speicherbereich: E,A,M,D,L
Funktion: Status des Zählers
Parameter: QU
Deklaration: Ausgang
Datentyp: BOOL
Speicherbereich: E,A,M,D,L
Funktion: Status Vorwärtszähler
Parameter: QD
Deklaration: Ausgang
Datentyp: BOOL
Speicherbereich: E,A,M,D,L
Funktion: Status Rückwärtszähler

Vorwärtszähler
IEC Vorwärtszähler
Signalzustandsdiagramm IEC Vorwärtszähler
Signalzustandsdiagramm PV=56

Der Zähler zählt um jeweils 1 vorwärts, wenn der Signal­zustand am Ein­gang CU von „0“ auf „1“ (positive Signal­flanke) wechselt.
Ist der aktuelle Zähl­wert CV größer oder gleich dem Wert am Eingang PV, ist das Signal am Ausgang Q logisch „1“.
Wechselt der Wert des Rücksetz­eingangs R von „0“ nach „1“, wird der aktuelle Zähl­wert auf 0 zurück­gesetzt.

Wie auch schon bei den IEC-Zeiten erstellt Step 7 bzw. TIA-Portal auch bei den IEC-Zählern automatisch einen Datenbaustein (DB), wahlweise ein Instanz- oder Multi-Instanz-DB. Die DB-Nummer kann frei gewählt werden oder die nächste freie, nicht genutzte DB-Nummer wird von Step 7/TIA-Portal verwendet. Das hier gezeigte Beispiel verwendet den „%DB7“. Sinnvoller ist aber auch hier die Vergabe eines sym­bolischen Namen für den Counter. Im Eigenschaftfenster von Zähler %DB7 erkennt man den DB7 als Instanz-DB von SFB0.

IEC Vorwärtszähler Eigenschaftsfenster
Eigenschaftsfenster von Zähler „%DB7“

CTU_SFB[SFB0] ist ein System Function Block, ein in der Firm­ware der CPU ein­gebetteter Funk­tions­bau­stein (FB), in dem alle Funk­tionen des Vorwärts­zählers ent­halten sind. Ein Zähler ist also „nur“ der Aufruf eines integrierten FBs.

IEC Vorwärtszähler Deklarationstabeller
Deklarationstabelle von Zähler Instanz-„%DB7“

Der Aufruf eines Funktionsbausteins (FB) wird als Instanz bezeichnet. Im Beispiel wird dem Funktionsbaustein SFB0, dem IEC-Vorwärtszähler, ein eigener Instanz-DB, der DB7 zugeordnet. Diese Zuordnung wird als Einzelinstanz bezeichnet. Vor­teilhaft ist die Wieder­verwendbarkeit der Funktions­bausteine und die gute Strukturmöglichkeit für einfache Programme.
Die Daten, mit denen die Instanz arbeitet, werden in dem Instanz-Daten­baustein gespeichert. Die Struktur des Instanz-DBs wird von der Schnitt­stelle des dazu­gehörigen FB bestimmt. Die Deklarations­tabelle zeigt die Baustein­parameter mit den Ab­schnitten Input, Output und InOut. Statische Lokal­daten im Abschnitt Static dienen zum dauer­haften Speichern von Zwischen­ergebnissen über den aktuellen Programm­zyklus hinaus. Der Offset bestimmt den Versatz der Bit- oder Byte-Adresse für die Para­meter inner­halb des Daten­bausteins. Es beginnt bei Bitadresse 0.0 für den Para­meter „CU“ und Bitadresse 0.1 für den Rücksetzeingang „R“. Para­meter „PV“ beginnt bei Adresse 2.0 und hat eine Länge von 2 Byte (Byte 2.0 und Byte 3.0). Ausgang „Q“ belegt die Bytes 4.0 und 5.0. Die jeweiligen Anfangs­adressen werden beim Anlegen auto­matisch von Step 7/TIA-Portal vergeben. Die jeweiligen Datentypen der Parameter werden vom Funktionsbaustein vorgegeben, in diesem Beispiel also vom System-Funktionsbaustein SFB0.

Rückwärtszähler
IEC Rückwärtszähler
Signalzustandsdiagramm IEC Rückwärtszähler
Signalzustandsdiagramm PV=60

Der Zähler zählt um jeweils 1 rückwärts, wenn der Signal­zustand am Ein­gang CD von „0“ auf „1“ (positive Signal­flanke) wechselt.
Ist der aktuelle Zähl­wert CV größer oder gleich 0, so ist der Zählerausgang Q logisch „1“.
Wechselt der Wert am Ladeeingang LD von „0“ nach „1“ wird der Wert des Parameters PV als neuer, aktueller Zählwert CV geladen.
Der CPU-interne Funktionsbaustein ist der SFB1 (CTD_SFB).

Vor-/Rückwärtszähler
IEC Vor- und Rückwärtszähler
Signalzustandsdiagramm IEC Vor- und Rückwärtszähler
Signalzustandsdiagramm PV=99

Der Zähler zählt um jeweils 1 vorwärts, wenn der Signal­zustand am Ein­gang CU von „0“ auf „1“ (positive Signal­flanke) wechselt.
Er zählt um jeweils 1 rückwärts, wenn der Signal­zustand am Ein­gang CD von „0“ auf „1“ (positive Signal­flanke) wechselt.
Das Signal­zustands­diagramm zeigt die Funktionsweise bei einem ganzzahligen Zählwert ohne Vorzeichen und PV = 99.
Ist der Wert des Parameters CV größer oder gleich dem Wert des Parameters PV, dann ist der Signalzustand am Zählerausgang QU = 1.
Ist der Wert des Parameters CV kleiner oder gleich 0, dann ist der Signalzustand am Zählerausgang QD = 1.

Wechselt der Wert von Parameter LD von „0“ nach „1“, wird der Wert an Parameter PV als neuer CV-Wert in den Zähler geladen.
Wechselt der Wert des Rücksetzparameters R von von „0“ nach „1“, wird der aktuelle Zählwert CV auf 0 zurückgesetzt.
Der CPU-interne Funktionsbaustein für den Vor-/Rückwärtszähler ist der SFB2 (CTUD_SFB).

Einen kleinen Haken haben haben diese Zähler aber doch und sollte beim Programmieren tunlichst beachtet werden. Wird im Programmeditor Step 7 bzw. TIA-Portal eine Zähleranweisung mit der Standardeinstellung übernommen, so wird ein Instanz-DB zugewiesen der nicht als remanent definiert werden kann. Bei ein Stop der CPU bzw. ein Neuanlauf wären die gespeicherten Zählerstände "verloren". Um dies zu vermeiden muss entweder ein globaler DB oder ein Multi-Instanz-DB genutzt werden.