1. Geschichte

ClassicLadder ist eine freie Implementierung eines Ladder/Kontaktplan-Interpreters, veröffentlicht unter der LGPL. Sie wurde von Marc Le Douarain geschrieben.

Er beschreibt den Beginn des Projekts auf seiner Website:

Ich beschloss, anfangs, im Februar 2001, eine Kontaktplansprache nur zu Testzwecken zu programmieren. Es war geplant, dass ich nach meinem Ausscheiden aus dem Unternehmen, in dem ich damals tätig war, an einem neuen Produkt mitarbeiten würde. Und ich dachte, dass es eine gute Option wäre, eine Ladder Language in diesen Produkten zu haben. Und so begann ich, die ersten Zeilen zu programmieren, um eine Sprosse mit minimalen Elementen zu berechnen und dynamisch unter Gtk darzustellen, um zu sehen, ob meine erste Idee, das alles zu realisieren, funktioniert.

Und da ich schnell festgestellt habe, dass es recht gut vorankommt, habe ich mit komplexeren Elementen weitergemacht: Zeitschaltuhr, mehrere Sprossen usw…

Voila, hier ist diese Arbeit… und mehr: Seitdem habe ich weitere Funktionen hinzugefügt.

— Marc Le Douarain, aus "Genesis" auf der ClassicLadder Website

ClassicLadder wurde angepasst, um mit LinuxCNC’s HAL arbeiten, und ist derzeit zusammen mit LinuxCNC verteilt werden. Wenn es Fragen/Probleme/Bugs bitte melden Sie sie an das LinuxCNC Projekt.

2. Einführung

Ladder Logic oder die Ladder-Programmiersprache ist eine Methode zum Zeichnen von elektrischen Logikschaltplänen. Sie ist heute eine sehr beliebte grafische Sprache für die Programmierung speicherprogrammierbarer Steuerungen (SPS). Ursprünglich wurde sie erfunden, um eine Logik zu beschreiben, die aus Relais besteht. Der Name beruht auf der Beobachtung, dass Programme in dieser Sprache Leitern ähneln, mit zwei vertikalen "Schienen" und einer Reihe von horizontalen "Sprossen" dazwischen. In Deutschland und anderswo in Europa ist es üblich, die Sprossen waagerecht am oberen und unteren Rand der Seite zu zeichnen, während die Sprossen senkrecht von links nach rechts verlaufen.

Ein Programm in Kontaktplanlogik, auch Kontaktplan genannt, ist einem Schaltplan für eine Reihe von Relaisschaltungen ähnlich. Die Kontaktplanlogik ist nützlich, weil eine Vielzahl von Ingenieuren und Technikern sie aufgrund der Ähnlichkeit ohne viel zusätzliche Schulung verstehen und verwenden kann.

Die Kontaktplanlogik wird häufig zur Programmierung von SPS verwendet, wenn eine sequenzielle Steuerung eines Prozesses oder eines Fertigungsvorgangs erforderlich ist. Die Kontaktplanlogik ist nützlich für einfache, aber kritische Steuerungssysteme oder für die Überarbeitung alter festverdrahteter Relaisschaltungen. Da speicherprogrammierbare Steuerungen immer ausgereifter wurden, wurde sie auch in sehr komplexen Automatisierungssystemen eingesetzt.

Die Kontaktplanlogik kann als regelbasierte Sprache und nicht als prozedurale Sprache betrachtet werden. Eine "Sprosse" im Kontaktplan stellt eine Regel dar. Bei der Verwendung von Relais und anderen elektromechanischen Geräten werden die verschiedenen Regeln gleichzeitig und sofort "ausgeführt". Bei der Implementierung in eine speicherprogrammierbare Steuerung werden die Regeln in der Regel sequentiell von der Software in einer Schleife ausgeführt. Wenn die Schleife schnell genug ausgeführt wird, in der Regel viele Male pro Sekunde, wird der Effekt der gleichzeitigen und unmittelbaren Ausführung erzielt.

Die Kontaktplanlogik folgt diesen allgemeinen Schritten für den Betrieb.

  • Eingänge lesen

  • Logik auflösen

  • Ausgaben aktualisieren

3. Beispiel

Die gebräuchlichsten Bestandteile von Leitern sind Kontakte (Eingänge), die in der Regel entweder Öffner (NC) oder Schließer (NO) sind, und Spulen (Ausgänge).

  • der Schließer images/ladder_action_load.png

  • der Öffner images/ladder_action_loadbar.png

  • die Spule (Ausgang) images/ladder_action_out.png

Natürlich gibt es noch viele weitere Komponenten einer vollständigen Leitersprache, aber das Verständnis dieser Komponenten wird Ihnen helfen, das Gesamtkonzept zu begreifen.

Die Leiter eines Kontaktplans besteht aus einer oder mehreren Sprossen. Diese Sprossen sind horizontale Leiterbahnen (die Drähte darstellen), auf denen sich Komponenten befinden (Eingänge, Ausgänge und andere), die von links nach rechts ausgewertet werden.

Dieses Beispiel ist die einfachste Sprosse:

images/example_link_contact_coil.png

Der Eingang auf der linken Seite, B0, ein Schließer, ist mit der Spule (Ausgang) auf der rechten Seite, Q0, verbunden. Stellen Sie sich nun vor, dass am linken Ende eine Spannung angelegt wird, weil der Eingang B0 aktiv wird (z. B. weil der Eingang aktiviert ist oder der Benutzer den Schließer betätigt hat). Die Spannung hat einen direkten Weg zur Spule (Ausgang) rechts, Q0. Infolgedessen schaltet die Spule Q0 (Ausgang) von 0/aus/falsch auf 1/an/wahr. Wenn der Benutzer B0 loslässt, kehrt der Ausgang Q0 schnell zu 0/aus/falsch zurück.

4. Grundlegende selbsthaltende Ein-Aus-Schaltung

Nehmen wir an, wir fügen dem obigen Beispiel einen Schalter hinzu, der immer dann schließt, wenn die Spule Q0 aktiv ist. Dies wäre der Fall bei einem Relais, bei dem die Spule die Schaltkontakte aktivieren kann, oder bei einem Schütz, bei dem es oft mehrere kleine Hilfskontakte zusätzlich zu den großen dreiphasigen Kontakten gibt, die das Hauptmerkmal des Schützes sind.

Da dieser Hilfsschalter in unserem früheren Beispiel von der Spule Q0 angesteuert wird, geben wir ihm die gleiche Nummer wie der Spule, die ihn ansteuert. Dies ist die Standardpraxis in der Kontaktplanprogrammierung, auch wenn es zunächst seltsam erscheinen mag, dass ein Schalter mit der gleichen Nummer wie eine Spule bezeichnet wird. Nennen wir also diesen Hilfskontakt Q0 und verbinden ihn mit dem Tasterkontakt B0 aus unserem früheren Beispiel.

Werfen wir einen Blick darauf:

images/example_link_contact_coil2.png

Wenn der Benutzer den Taster B0 drückt, schaltet sich wie zuvor die Spule Q0 ein. Und wenn die Spule Q0 eingeschaltet wird, dann wird der Schalter Q0 eingeschaltet. Jetzt kommt der interessante Teil. Wenn der Benutzer den Druckknopf B0 loslässt, bleibt die Spule Q0 nicht wie zuvor stehen. Das liegt daran, dass der Schalter Q0 dieser Schaltung den Druckknopf des Benutzers tatsächlich gedrückt hält. Wir sehen also, dass der Schalter Q0 die Spule Q0 auch dann noch anhält, wenn der Starttaster losgelassen wurde.

Diese Art von Kontakt an einer Spule oder einem Relais, auf diese Weise verwendet, wird oft als "Haltekontakt" bezeichnet, weil er die Spule, mit der er verbunden ist, "festhält". Gelegentlich wird er auch als "Siegelkontakt" (engl. seal contact) bezeichnet, und wenn er aktiv ist, sagt man, dass der Stromkreis "versiegelt" ist.

Leider hat unsere Schaltung bisher wenig praktischen Nutzen, denn wir haben zwar einen Einschalt- oder Startknopf in Form des Tasters B0, aber wir haben keine Möglichkeit, diese Schaltung abzuschalten, wenn sie einmal gestartet ist. Aber das ist leicht zu beheben. Alles, was wir brauchen, ist eine Möglichkeit, die Stromzufuhr zur Spule Q0 zu unterbrechen. Fügen wir also einen Öffner-Taster direkt vor der Spule Q0 ein.

Das würde folgendermaßen aussehen:

images/example_link_contact_coil3.png

Jetzt haben wir den Taster B1 für "Aus" oder "Stopp" hinzugefügt. Wenn der Benutzer ihn drückt, wird der Kontakt zwischen der Sprosse und der Spule unterbrochen. Wenn die Spule Q0 keinen Strom mehr hat, geht sie auf 0/aus/falsch. Wenn die Spule Q0 erlischt, dann erlischt auch der Schalter Q0, so dass der "Haltekontakt" unterbrochen oder der Stromkreis "entsiegelt" wird. Wenn der Benutzer die Stopptaste loslässt, wird der Kontakt von der Sprosse zur Spule Q0 wiederhergestellt, aber die Sprosse ist erloschen, so dass die Spule nicht wieder eingeschaltet wird.

Diese Schaltung wird seit Jahrzehnten in praktisch jeder Maschine verwendet, die einen durch ein Schütz gesteuerten Drehstrommotor hat, so dass es unvermeidlich war, dass sie von Kontaktplan-/SPS-Programmierern übernommen werden würde. Es handelt sich auch um eine sehr sichere Schaltung, denn wenn "Start" und "Stopp" gleichzeitig gedrückt werden, gewinnt immer die "Stopp"-Funktion.

Dies ist der Grundbaustein eines Großteils der Kontaktplanprogrammierung. Wenn Sie also neu in diesem Bereich sind, sollten Sie sicherstellen, dass Sie verstehen, wie diese Schaltung funktioniert.