Merker: Speichern von Zwischenergebnissen in der SPS

Merker sind Adressregister innerhalb der CPU. Die Anzahl der verfügbaren Merkerbytes hängt von der jeweiligen CPU ab und kann aus den technischen Daten entnommen werden. Man kann in einem SPS-Programm Merkerbits, Merkerbytes, Merkerwörter oder Merkerdoppelwörter benutzen. Je nachdem wie viele Bitstellen man benötigt.

Merker

Beispiele für die Adressierung:

  • Merkerbitadresse: M13.5
  • Merkerbyteadresse: MB18
  • Merkerwortadresse: MW2
  • Merkerdoppelwortadrese: MD6

Die Adressen im Register Merker können für vielfältige Aufgaben nützlich sein. Hauptsächlich werden sie als Zwischenspeicher benutzt. Daher kommt auch der Name. Die Adressen im Register merken sich Signale, ohne dabei irgendeinen Ausgangsoperanden zu verwenden. Man kann Merker auch als interne Speicher betrachten, die für vielfältige Aufgaben in einem SPS-Programm verwendet werden können. Wenn z.B. das Ergebnis einer Verknüpfung nicht zu einem Ausgangssignal 1 führen soll, man das Ergebnis der Verknüpfung aber "irgendwo" speichern möchte, da man das Ergebnis der Verknüpfung an einer anderen Stelle im Programm erneut abfragt, dann kann man zum Speichern des Ergebnisses eine Merkeradresse verwenden.

Beispiel:

  • Man hat zwei Eingangsoperanden mit einer UND-Verknüpfung.
  • Wenn man dieselbe UND-Verknüpfung mit denselben Eingangsoperanden mehrfach im Programm verwenden möchte, kann man das Ergebnis der UND-Verknüpfung in einer Merkerbitadresse speichern.
  • An jeder Stelle des Programms, an dem die UND-Verknüpfung mit den beiden Eingangsoperanden verwendet werden soll, braucht man nicht mehr jedes Mal eine neue UND-Verknüpfung zu erstellen.
  • Stattdessen nimmt man einfach die Merkerbitadresse, die den Zustand der UND-Verknüpfung erhalten hat.

Häufig werden Merker auch als Flankenoperanden bei einer Flankenauswertung verwendet, da man hier eine Bitadresse benötigt, der nur intern verwendet wird. Mit Merkern kann man in Verbindung mit SR-Gliedern auch Schrittketten realisieren. Dabei wird zunächst einmal den SR-Gliedern Merkeradressen zugewiesen. Die Zuweisung der Ausgänge erfolgt dann über die Merker. So hätte man eine Trennung zwischen dem Programmcode und den Ausgängen. Sollen Ausgänge vertauscht werden, braucht man nur die Zuweisungen zu ändern, indem man die Merkeradressen vertauscht.

Verwendung von Merkern

Auch wenn die Verwendung von Merkern vielfältige Vorteile bietet und in SPS-Programmiernorm IEC 61131-3 als Operanden genannt werden, die einen festen Speicherplatz innerhalb der CPU haben, sollte man sich angewöhnen, auf Merker weitestgehend zu verzichten. In der Praxis wird es auch so gehandhabt, dass man auf die Verwendung von Merkern wo es geht verzichtet. Der Grund ist, dass Merkeradressen feste Adressen sind, die in einem Anwenderprogramm bausteinübergreifend gültig sind. Wenn Bausteine (FB, FC) programmiert werden, führt die Verwendung von Merkern dazu, dass diese nicht mehr bibliotheksfähig sind.

Ein weiterer Grund ist, dass wenn Merkeradressen benutzt werden, besonders bei großen Programmen die Übersicht verloren geht. Es besteht die Gefahr, dass Merker doppelt verwendet werden, was dann zu Fehlern im Programm führt. Die Fehlersuche zum Beheben des Problems kann dabei sehr zeitaufwendig sein. Deshalb wird in der Praxis, insbesondere bei der Programmierung von großen Anwenderprogrammen auf die Verwendung von Merkern weitestgehend verzichtet.

Durch den Verzicht auf Merker hat man den Vorteil, dass Codebausteine bibliotheksfähig sind und somit beliebig oft verwendet werden können, da die in den Bausteinen verwendeten Variablen frei zuweisbar sind. Werden Signale in Merkern gespeichert, behalten sie auch außerhalb des Bausteins ihre Gültigkeit. Bei Spannungsausfall gehen diese verloren. Es gibt auch sogenannte remanente Merker, die ihre gespeicherten Informationen bei einem Spannungsausfall nicht verlieren. Nichtremanente Merker haben dagegen nach einem Neustart der CPU oder bei einem erneuten Anlaufen den Signalzustand "0".