Allgemeines zu Zählern, Zählfunktionen, Counter
In Anwenderprogrammen werden Zählfunktionen für z.B. Mengenerfassung, Ereigniserfassung oder Frequenzmessung verwendet.
Es gibt in Automatisierungssystemen grundsätzlich drei Möglichkeiten eine Zählfunktion zu realisieren:
Die Norm DIN EN 61131-3 beschreibt drei Arten von Zählern als Standardfunktionsbausteine, den Vorwärts- oder Aufwärtszähler, den Rückwärts- oder Abwärtszähler und einen Zähler der beide Zählarten in sich vereinigt. An diesen drei Zählern wird an den Zähleingängen die positive Flanke eines Signals augewertet und damit der Zählimpuls nach vorwärts oder rückwärts ausgelöst.
Übersicht über die drei Zähler nach DIN EN 61131-3:
| Zähler nach DIN EN 61131-3 |
Darstellung |
| Vorwärtszähler | ![]() |
| Rückwärtszähler | ![]() |
| Vorwärts/Rückwärts zähler |
![]() |
Eingänge und Ausgänge der Zählfunktionen nach DIN EN 61131-3:
Die numerischen Werte der Grenzvariablen PVmax und PVmin sind implementierungsabhängig. Mögliche Werte sind PVmax = 32767 und PVmin = - 32768.
Die drei Zählerfunktionsbausteine der Norm DIN EN 61131-3 werden in Step7® in der Standardbibliothek als Systemfunktionsbausteine SFB0 CTU, SFB1 CTD und SFB2 CTUD zur Verfügung gestellt. Werden diese Systemfunktionsbausteine aufgerufen, muß man ihnen einen Instanzdatenbaustein zuordnen.
Im Operationsvorrat von Step7 gibt es neben diesen Systemfunktionsbausteinen Zählfunktionen. Diese Zählfunktionen benötigen keinen Instanzdatenbaustein, ihnen muß ein Zähloperand Zx zugewiesen werden.
Zählfunktionen bzw. COUNTER gehören zu den Parametertypen in SIMATIC Step7. Der Parametertyp COUNTER hat eine Größe von 2Bytes bzw. WORD (16 Bit).
In Step7 gibt es allerdings eine Obergrenze für die Eingabe eines Zählwertes. Die Eingabe eines Zählwertes in Step7® wird über BCD-Code realisiert und erlaubt die Werte 000 bis 999 bzw. C#999 oder auch vom Wert W#16#0000 bis Wert W#16#0999. Werden Zähler in Automatisierungsprogrammen außerhalb von Step7 nach DIN EN 61131-3 programmiert, gibt es die Möglichkeit der Zählwerteingabe von 0 bis 32767. Inwieweit es möglich ist mit diesem doch recht großen Zählwert und den Standardfunktionsbausteinen SFB0, SFB1 und SFB2 in Step7 zu arbeiten haben wir noch nicht getestet. In Step7 ist die Anzahl der verfügbaren Zähler abhängig von der CPU.
Z_VORW, Z_RUECK und ZAEHLER geben an um welche Zählfunktion es sich handelt. Zählfunktionen können in den Programmiersprachen Anweisungsliste AWL, Funktionsplan FUP bzw. Kontaktplan KOP und der Programmiersprache SCL aufgerufen werden. Z_VORW ist ein Vorwärtszähler mit einem Eingang zum Vorwärts- bzw. Aufwärtszählen, Z_RUECK ist ein Rückwärtszähler mit einem Eingang zum Rückwärts- bzw. Abwärtszählen und ZAEHLER ist ein Zähler mit einem Eingang zum Vorwärtszählen und einem Eingang zum Rückwärtszählen.
Die Eingabe eines Zählwertes und die Eingabe eines Zeitwertes in Step7® sind sich ähnlich. Beide Eingabe sind in Wortbreite (16 Bit) definiert mit dem Maximalwert 999 unter Verwendung des 8421-BCD-Codes. Der Unterschied liegt darin das bei den Zeitwerten die Bits 12 und 13 für die Eingabe der Zeitbasis verwendet werden. Bei den Zählern sind die Bits 12 bis 15 nicht von Bedeutung.
Über den Eingang ZW kann man eine Zählfunktion mit einem Zählwert vorbelegen und damit einen definierten Anfangswert bestimmen. Den zu ladenden Zählwert übernimmt die Zählfunktion nur bei einer positiven Flanke am Setzeingang "S". Der Anfangswert eines Zählers muß zuvor in den Akkumulator 1 geladen worden sein. Der Zählwert wird BCD-codiert als Wort mit 16 Bit eingegeben, umfasst aber nur 12 Bit aufgrund des Wertebereiches von 000 bis 999. Ein konstanter Zählwert kann mit L C#000 bis L C#999 oder L W#16#000 bis L W#16#0999 angegeben werden. Der Befehl L steht für Lade in den Akkumulator 1. Auch basiert der Maximalwert der Zählwerteingabe auf der Verwendung des 8421-BCD-Codes in Step7. Die Zählwerteingabe erfolgt immer als positiver Wert. Im Programmablauf sollte immer zuerst der Zählwert in den Akku geladen werden und dann der Setzbefehl gegeben werden. Ein Zählwert kann auch aus Eingangs-, Ausgangs-, Merker-, Lokaldaten- oder Datenwörtern geladen werden.
Fragt man den Status des Zähloperanden Zx ab, wobei das x für die Nummer des Zählers steht, kann ausgewertet werden, ob der Zähler den Zählwert "0" oder "Nicht Null", also "1", hat. Der Status kann über die binären Operationen (U, O, XOR, NAND, NOR und XN) in Step7 abgefragt werden. Dadurch kann der Status des Zählers in Form eines Bitzustandes (0, 1) für Verknüpfungen genutzt werden. Das Ergebnis einer Statusabfrage eines Zähloperanden liefert den Wert "1", solange der Zählerstand größer als null ist.
Der Setzeingang "S" setzt einen Zähler auf einen Vorgabewert. Der Rücksetzeingang "R" setzt einen Zähler zurück. Solange am Rücksetzeingang R der Signalzustand "1" anliegt, haben Signalzustandsänderungen an den anderen Eingängen keinen Einfluß auf den Zähler.
Eine positive Flanke am Eingang ZV eines Vorwärtszählers läßt den Zähler um "1" aufwärtszählen / inkrementieren. Der maximale Zählumfang reicht von 0 bis 999. Einen Übertrag gibt es nicht. Ist der Wert 999 erreicht zählt der Zähler nicht mehr weiter. Die binäre Abfrage der Zählfunktion führt den Wert "1", solange der Zählerstand von Null verschieden ist. Erhält der Rücksetzeingang R den Signalzustand 1 wird der Zähler zurückgesetzt, d. h. der Zählwert wird auf null gesetzt und die binäre Abfrage des Zähloperanden liefert den Signalzustand "0".
Eine positive Flanke am Eingang ZR eines Rückwärtszähler läßt den Zähler um "1" abwärtszählen. Der Zähler kann dann maximal von 999 an rückwärtszählen / dekrementieren. Ist der Wert 0 erreicht zählt der Zähler nicht mehr weiter, negative Werte können nicht dargestellt werden. Die binäre Abfrage der Zählfunktion führt den Wert "1", solange der Zählerstand von Null verschieden ist. Erhält der Rücksetzeingang R den Signalzustand 1 wird der Zähler zurückgesetzt, d. h. der Zählwert wird auf null gesetzt und die binäre Abfrage des Zähloperanden liefert den Signalzustand "0".
| Zähler in Step7® | Darstellung im Funktionsplan FUP in Step7® |
| Vorwärtszähler | ![]() |
| Rückwärtszähler | ![]() |
| Vorwärts/Rückwärts zähler |
![]() |
Bedeutung der Eingänge und Ausgänge:
| Zählerfunktionen einzeln setzen | ||||||||
|