www.brix.de - Hauptseite, Elektrotechnik, SPS | Stand: 2013-02-10 |
Hier wird über Speicherprogrammierbare Steuerung (SPS) geschrieben und es handelt sich um einen Einstieg oder Grundkurs. Das heißt, es wird nur in Ausblicken angedeutet was z.B. Datenbausteine, Instanzdaten, Funktionsbausteine, andere Organisationsbausteine oder direkte Peripheriezugriffe sind. Es geht vornehmlich um Grundlagen der Programmierung und es geht in Beispielen um Siemens S7 Steuerungen der 300er-/400er-Serie. Viele Details sind weggelassen, einige ganz spezielle Dinge aber doch aufgenommen, wenn sie zum erfolgreichen Arbeiten und Weiterkommen notwendig sind. Diese Details sind dann nicht unbedingt erschöpfend erklärt.
Speicherprogrammierbare Steuerung bedeutet also den Abschied von der Verbindungsprogrammierten Steuerung (VPS) oder salopp gesprochen:
Auch wenn die Software von S7 200 und 1200 mit "Vornamen" Simatic Step 7 heißt, ist sie doch ein vollständig anderes Produkt als Simatic Step 7 Professional. Das heißt, wer Automatisierungstechnik programmieren will, muss zwar nur einmal die Grundprinzipien der SPS verstehen lernen, aber dennoch bis zu vier Software-Produkte für die Umsetzung der Programme auf der jeweiligen Maschine beherrschen lernen. - Das kann zum Teil ziemlich schwierig sein, weil sich die Bedienkonzepte widersprechen und nicht gerade durch übertragbare einübbare Handlungen glänzen.
[Bild fehlt: Aufbau, Mengenlehre Kompakt- u. Modular-SPS]
Das Anwender-Programm ist durch Batteriepufferung (teilweise doppelt!) oder Ablage in Flash-Memory-Karten (neu) nicht flüchtig. Die Speicherkarte kann sogar ganze Projekte, nicht nur das lauffähige Programm aufnehmen (für den PC ähnlich einem USB-Stick).
Das Spezialthema: Sensoren - Aktoren (Aktuatoren)
Arten und Funktionsprinzipien ist nun ausgelagert auf eine eigene Seite, weil es eine allgemeine vom Typ der SPS unabhängige Darstellung ist und den Umfang hier sprengen würde.
In Schaltplänen ist bei Schützen, die nicht gleichzeitig aktiv sein dürfen (Wendeschütze oder Stern-/Dreieck-Schütze), immer wieder eine externe Schützverriegelung zu finden. Der Grund dafür ist nicht, dass man der SPS nicht vertrauen würde, doch Schütze können nun mal "kleben" oder auch "festbrennen". Wenn die SPS davon dann aber nichts weiß (weil auf einen Rückmeldekontakt verzichtet wurde), kommt es trotz korrekter Programmierung zur Fehlfunktion.
Die externe Schützverriegelung ist nur möglich, wenn am Leistungsschütz ein Öffner-Kontakt vorhanden ist (an den meisten Versionen ist ein Schließer, wegen der dann einfach zu bauenden Selbsthaltung), so dass normalerweise ein Hilfskontaktkopf für die Schütze nötig ist.
Um sich den Verdrahtungsaufwand der externen Verrigelung zu sparen, gibt es auch Schützpaare, die sich gegenseitig mechanisch verriegeln. Diese Lösung ist teurer vom Materialaufwand, aber billiger in der Installation.
Die beste Lösung ist allerdings, auf die Rückmeldekontakte nicht zu verzichten, denn dann "weiß" die SPS von einem eventuell gestörtem Schütz. Dies erfordert aber immer auch einen zusätzlichen digitalen Eingang und natürlich die Berücksichtigung desselben im Programm.
Zustand 0 und Drahtbruch sind für die SPS nicht zu unterscheiden. -> Sicherheitskritische Funktionen müssen immer mit "ausgelöst = 0" programmiert werden. Das externe Schaltelement ist ein Öffner (unbetätigt = 1).
Zustand 0 = Drahtbruch = unbetätigter Schließer = betätigter Öffner Zustand 1 = Leiterschluss = betätigter Schließer = unbetätigter Öffner
Leider erzeugen die Begriffe "Öffner" und "Schließer" immer wieder Verwirrung insbesondere bei der KOP-Programmierung. Es ist streng zu unterscheiden zwischen dem realen Schaltelement und der Signalabfrage im Programm! Der Ausschalter einer rücksetzdominanten, dynamischen Selbsthaltung ist als Schaltelement ein Öffner, seine Signalabfrage in der SPS erfolgt aber "auf 1", daher steht im KOP ein Schließer-Symbol! Da auf diese Symbole im FUP verzichtet wird, fällt die Programmierung in FUP oftmals leichter, auch wenn die Signalwege nicht ganz so vertraut dargestellt sind.
Nochmals für die KOP-Fans:
Schließer-Symbol --> Signalabfrage auf 1,
Öffner-Symbol --> Signalabfrage auf 0,
beides sagt aber nichts über das reale Schaltelement, welches das Eingangssignal liefert aus!
"Signalabfrage auf 1" bedeutet, dass das Signal bei einer "1" der Variablen über dem Symbol durchgeschaltet wird. Bei der "Signalabfrage auf 0" wird das Signal durchgeschaltet, wenn der Wert der Variablen über dem Symbol "0" ist.
Ein SPS-Programm mus in verschiedenartige Bausteine unterteilt werden, die unter verschiedenen Bedingungen, aber in der Praxis meistens seriell-zyklisch bearbeitet werden. Die hier vorgenommene Beschreibung hat sowohl die Siemens-Eigenheiten als auch die IEC 61131 im Blick:
Stellt man Vergleiche zu den "Programmorganisationseinheiten der IEC 61131 an, so könnte man zu folgendem Schluss kommen:
Die Bausteine werden in der Reihenfolge ihres Aufrufes abgearbeitet. Die Bausteinnummern spielen (außer bei OBs, die man aber ohnehin nicht aufrufen kann) keine Rolle.
Bausteine sind unterteilt in Netzwerke. Netzwerke werden von oben nach unten in ihrer Reihenfolge abgearbeitet.
Was "globale" und "lokale" Variablen überhaupt sind und wie auf sie zugegriffen wird und welche Vor- und evtl. auch Nachteile damit verbunden sind, muss in einem späteren (noch zu schreibenden) Kapitel erläutert werden.
Bitte gleich die richtigen Dinge lernen und nicht mit unpassenden Analogien aus der S5-Welt arbeiten ("Vergessen musst, was früher du gelernt", Yoda, Star Wars Episode V): Die S5-Bausteine PB und SB können weder Parameter noch Instanzdaten haben und der S5-Baustein FB kann zwar Parameter haben, aber ebenfalls keine Instanzdaten, daher wurden in der S5 die Parameter als Instanzdaten missbraucht.
In der S7 ist der Unterschied von FC und FB nur die lokale Speicherung (in einem DB) der statischen Instanzdaten. Beide Bausteine können Parameter haben, aber nur der FB ist in der Lage, sich Daten von Zyklus zu Zyklus zu merken. Tatsächlich gibt es aber kaum ein passende Analogie zur S5, allenfalls kann man den S5-FB mit der S7-FC vergleichen (beide haben Parameter, beide haben keine Instanzdaten).
Bei AWL (Anweisungsliste), KOP (Kontaktplan) und FUP (Funktionsplan) handelt es sich (bei Siemens S7 300/400) nicht um verschiedenen Programmiersprachen, sondern um verschiedenen Ansichten derselben Sache. KOP und FUP sind grafische Darstellungen von bestimmten AWL-Sequenzen. Es lassen sich also alle FUP- und KOP-Symbole in AWL darstellen, aber nicht jede AWL in KOP oder FUP.
AWL, KOP und FUP sind eigentlich nach EN 61131-3 (IEC 61131-3) genormte Sprachen der Programmierung von SPSen. Allerdings heißt FUP (Funktionsplan) dort FBS (Funktionsbausteinsprache) oder englisch FBD (Function-Block-Diagramm)!
Es kommt aber schlimmer, denn nach heutiger Definition hat der Begriff Funktionsplan eine neue wesentliche Bedeutung für die Automatisierungstechnik bekommen nämlich:
Projektierungswerkzeug für eine Ablaufsteuerung (auch: Schrittkette), definiert in der zurückgezogenen DIN 40719.
Und tatsächlich am wichtigsten:
Grafcet, Spezifikationssprache für die Darstellung von Ablaufbeschreibungen nach DIN EN 60848, Nachfolger der DIN 40719-6
Auf der Festplatte des PG (=Programmiergerät, das ist heutzutage ein gewöhnlicher PC) wird aber nur die AWL gespeichert. Dazu die Informationen über Symboltabellen und Kommentare. Die FUP- oder KOP-Darstellung wird bei der Bearbeitung jedesmal neu aus der AWL erzeugt.
Im AG (=Automatisierungsgerät, also die SPS) wird aber nur ein Maschinencode namens MC7 gespeichert, der aus der AWL generiert wird. Auf dem PG liegen also die Quelldaten (AWL-Programm, Symboltabellen, Kommentare), in die SPS wird aber nur der lauffähige Maschinencode übertragen. Das heißt, wenn man aus der SPS ein Programm herunterlädt, für das man die Projekt-Dateien nicht hat, dann hat man keine Symboltabelle und keine Kommentare zur Verfügung, weil diese nur in der ursprünglichen Projekt-Quelle gespeichert sind.
Quelle (menschenlesbar):
Programm (in AWL, z.T. darstellbar in KOP oder FUP)
Symboltabellen
Kommentare
Maschinencode (maschinen-ausführbar):
Programm in MC7
Das Hauptprogramm (zu finden unter C:\Siemens\Step7\s7bin\s7tgtopx.exe) verwaltet alle anderen Programme, sorgt für die Zusammenarbeit
Hardware Konfigurator
Die eigentliche Programmierumgebung
eine gute Idee ist es, zwischendurch die Arbeit mit "Station: Speichern" (nicht "Station: Speichern und übersetzen") zu sichern. Für die meisten Funktionen gibt es außer Menüeinträgen auch Symbole.
CPU-Tausch geht problemlos nur mit "kompatiblen" CPUs per Drag-and-Drop. "Kompatibel" heißt, dass der Funktionsumfang und die Schnittstellenanzahl gleich ist. - Selbst dann kann es aber unbedingt notwendige Anpassungen von Adressen geben (siehe Schritt 6 und 7).
"Von Hand" geht ein CPU-Tausch so:
Das
Siemens-Hardware-Spezialthema:
S7-300-Steckplatz-Adressen
ist nun ausgelagert auf eine eigene Seite. Es besteht aus einer kurzen Erklärung und einer größeren Tabelle.
Ein Projekt ist ein Ordner mit einem auf 8 Zeichen verstümmelten Namen (als Standardeinstellung in C:\Programme\Siemens\Step7\S7Proj). Dieser enthält je nach Projektumfang einige Unterordner und etliche Dateien.
Will man das Projekt "mitnehmen", muss man also den kompletten Ordner kopieren. Sinnvoller ist es allerdings, dazu die Funktionen
Datei:Archivieren und Datei:Dearchivieren
des Simatic Managers zu nutzen!
Die Funktion Archivieren erlaubt es, ein beliebiges Projekt zu archivieren. Das gerade in Bearbeitung befindliche Projekt wird als ausgewählt angeboten (1. Schritt).
Auswahldialog: Welches Projekt soll archiviert werden? |
Auswahldialog: Wohin soll archiviert werden? - Wie soll das Archiv heißen? |
Danach fragt die Funktion nach einem Speicherort für das Archiv. Dieser kann sich auf Wechseldatenträger oder im Netzwerk befinden. Dabei wird der (meist sehr schlechte) verstümmelte Ordnername als Vorschlag für den Dateinamen angeboten. Dieser sollte unbedingt in einen sinnvollen, wiedererkennbaren Namen mit vorangestelltem Datum (nach ISO 8601/EN 248601 in der Form JJJJ-MM-TT) geändert werden!
Schließlich fragt das Archivprogramm nach einem "Diskettenübergreifenden Archiv", damit ist gemeint, dass die entstehende Archivdatei in Einzelteile zerlegt wird, die auf eine Diskette passen. Diese Funktion ist im Zeitalter der 16 GB-USB-Sticks im Allgemeinen überflüssig. Danach läuft der ZIP-Packer in einem Konsolenfenster und erzeugt das Archiv mit dem gewünschten Namen an der vorgewählten Stelle. - Fertig.
Optionendialog: Diskettenübergreifendes Archiv? - Soll das Archiv in Teile zerlegt werden? |
Meldedialog: Archivieren auf Disketten oder Wechseldatenträger allgemein kann bis zu 18 Minuten dauern ... |
Die ZIP-Datei ist als einzelne Datei wesentlich transportabler als die ungepackte Ordnerstruktur, daher sollte man auch bei ausreichend großen Speichermedien (wobei es auf das Komprimieren der Daten nicht ankommt, das gute alte tar würde es also auch tun!) trotzdem die Archivieren-Funktion nutzen!
Denkbare Lösungen für Arbeitsanweisungen mit in Schaltschränken unverlierbar montierten USB-Sticks könnten so aussehen:
Arbeitsanweisung 1, Arbeitsanweisung 2
Das Dearchivieren erfolgt sinngemäß umgekehrt: Es ist die ZIP-Datei auszuwählen und der Ort, wohin das Projekt entpackt werden soll. Nach dem Entpacken wird der Simatic Manager anbieten, das Projekt zu öffnen.
Auswahldialog: Welches Projekt (welche ZIP-Datei) soll dearchiviert werden? |
Auswahldialog: Wohin soll das Projekt-Verzeichnis dearchiviert werden? |
Optionendialog: Wie soll mit dem neuen Projekt-Verzeichnis gegenüber dem bestehenden Verzeichnis umgegangen werden? |
Meldedialog: Wo unter und unter welchem Namen wurde das dearchivierte Projekt-Verzeichnis abgelegt? |
Meldedialog: Soll das dearchivierte Projekt geöffnet werden? |
|
Hinweis: Es gibt leider immer noch gelegentlich Probleme mit der Simatic-Software, wenn der Projektordner auf einem Netzlaufwerk liegt! - Daher ist es eine akzeptable Empfehlung, das Projekt selbst auf einer lokalen Platte zu haben und nur die Archiv-Daten auf ein Netzlaufwerk zu übertragen.
Die Variablen der SPS sind Bits und Bytes im RAM der Zentraleinheit, das heißt das Anwenderprogramm bearbeitet nur einen Speicher und nicht die "echten" Signale an den Ein- oder Ausgangsklemmen. Daher kann prinzipiell auch ein Eingang zugewiesen werden, weil ja nur an die entsprechende Stelle im RAM geschrieben wird, wo das PAE liegt. Was mit dem Wert passiert ist aber davon abhängig, ob es auf der von der Zuweisung benutzten Adresse einen "echten" Eingang gibt oder nicht! - Gibt es einen echten Eingang, so wird der Wert zum nächsten Zyklusbeginn vom Wert des Eingangs überschrieben, gibt es an dieser Adresse keinen echten Eingang, so kann die Adresse wie ein Merker benutzt werden. - Empfehlenswert ist das aber keinesfalls! - Ein akzeptables Beispiele für das Beschreiben des PAE vom Anwenderprogramm könnte das Übertragen von Eingangsdaten aus einem Profibus CP mit DPRECV sein. Wenn die abgebildeten Eingänge in der Symboltabelle dokumentiert werden, kann kaum etwas schief gehen. Ein weiteres Beispiel wäre das Beschreiben des PAE durch Bediengeräte wie Panels. Hier ist die entsprechende Dokumentation noch wichtiger, da es bei dieser Methode gar keinen sichtbaren Schreibzugriff innerhalb des Anwenderprogrammes gibt!
Die Adressierung erfolgt immer nach der Nummer des Bytes. Auch bei Wörter und Doppelwörtern. Dort ist die Adresse die Nummer des ersten Bytes der Datenmenge im Speicher, gleichzeitig ist diese niedrige Bytenummer aber das höchstwertige Byte innerhalb der Datenmenge. Bit-Nummer 31 (das 32. Bit) steht also im ersten Byte der Datenmenge. Oder anders gesprochen: Dateninhalte werden immer "rechtsbündig" in die Datenmenge geschrieben. Wird beispielsweise eine 16 Bit-Dualzahl in Wort 12 geschrieben, so stehen die "Einer" ganz rechts (Bit 0), die "32-Tausender" ganz links (Bit 15).
Auf diese Problematik muss beim Benutzen von Datenbausteinen (DBs), durch Bediengeräte (HMI) noch gesondert eingegangen werden!
Eine typische Adress-Angabe besteht aus drei Teilen:
Die Angabe des Speicherbereiches, der Datenmenge und deren nummerische Adresse.
Speicherbereiche gibt es (im Augenblick für uns) drei:
Alle diese Bereiche liegen im RAM der CPU und sind voneinander unabhängig.
Datenmengen können sein:
Die nummerische Adresse ist eine Zahl, bzw. bei Bit-Adressen ein Zahl gefolgt von einem Punkt und der Ziffer für die Bit-Nr. innerhalb des Bytes.
Beispiele:
E 0.1
AB 4
MD 32
EW 2
MW 30
Zu Beginn eines Zyklus wird der Zustand der wirklichen Eingänge in das PAE (Prozessabbild der Eingänge) übertragen, danach bleibt eine Änderung des wirklichen Einganges für das PAE ohne Folgen. Diese Aktion führt das Betriebssystem der SPS durch, sie muss nicht programmiert werden.
Dann wird das Programm seriell, also in Reihenfolge der Befehle (bzw. Unterprogrammaufrufe) abgearbeitet (letzte Zuweisung zählt --> "Renate-Effekt"). Eingangswerte kommen aus dem PAE und Zuweisungen von Ausgängen erfolgen an das PAA (Prozessabbild der Asugänge), also nicht an die wirklichen Ausgänge selbst, daher ändern sich die Zustände der Ausgänge während der Programmbearbeitung nicht.
Schließlich wird der Zustand der gespeicherten Variablen der Ausgänge (das PAA) auf die "echten", externen Ausgänge übertragen. Erst jetzt ändern sich die Zustände der Ausgänge. Auch diese Aktion führt das Betriebssystem der SPS durch.
Die Bearbeitung startet von vorn! - Zyklisch!
Für das Programmieren sind Grundkenntnisse der Digitaltechnik oder genauer der zweiwertigen Logik notwendig. Allerdings bleibt die Mathematik im überschaubaren Rahmen. Es genügt, die wesentlichen Verknüpfungen zu kennen und bestimmte Konsequenzen aus den Theoremen zu berücksichtigen. Die Regel von De Morgan ist eher aufgeführt, um sie nicht anzuwenden.
E1 E0 | A ---------|------ 0 0 | 0 0 I | 0 I 0 | 0 I I | I
E1 E0 | A ---------|------ 0 0 | 0 0 I | I I 0 | I I I | I
E0 | A -----|------ 0 | I I | 0
E1 E0 | A ---------|------ 0 0 | I 0 I | I I 0 | I I I | 0
E1 E0 | A ---------|------ 0 0 | I 0 I | 0 I 0 | 0 I I | 0
E1 E0 | A ---------|------ 0 0 | 0 0 I | I I 0 | I I I | 0
E1 E0 | A ---------|------ 0 0 | I 0 I | 0 I 0 | 0 I I | I
Die Theoreme beschreiben wie sich eine Variable in bestimmten Verknüpfungsfällen verhält. Durch dieses Wissen kann man sich die Untersuchung von Digitalverknüpfungen erheblich erleichtern.
Die Variable heißt hier "A" und kann einen der beiden möglichen Werte des Wertebereiches [NULL, EINS] annehmen.
A ^ 0 = 0
Unabhängig von A wird das Ergebnis einer UND-Verknüpfung an deren einem Eingang eine "0" ist, immer "0" sein. Daraus folgt, dass wenn man nur eine "0" an einem UND-Glied findet, man sofort das Ergebnis sagen kann, ohne die Werte der anderen Eingänge überhaupt zu kennen!
A ^ I = A
Die "I" ist das neutrale Element der UND-Verknüpfung. Das heißt, findet man eine "I" an einem UND-Glied so bringt dies keinen Erkenntnisgewinn über das Ergebnis. Es könnte "I" sein, könnte aber auch "0" sein, da es von den anderen Eingängen als dem untersuchten abhängt.
A ^ A = A
Verknüpft man ein Signal mit sich selbst in einer UND-Verknüpfung, so kommt das Signal selbst wieder heraus. Dieses Wissen ist für die SPS-Programmierung nicht nötig, in der "Hardware-Digitaltechnik" ist aber unentbehrlich, denn es ermöglicht, aus einem NAND einen Inverter zu machen.
A ^ -A = 0
Verknüpft man ein Signal mit seiner Inversion in einer UND-Verknüpfung, muss das Ergebnis immer eine "0" sein, da ja durch die Negation ein Eingang ganz sicher "0" ist und eine einzige "0" ausreicht, um eine "0" am Ausgang zu erzeugen (siehe Theorem 1 der UND-Verknüpfung).
Dies ist wichtig, wenn man eine sichere "0" aus dem Nichts erzeugen muss (z.B. um einen Signalweg im Programm zu unterbrechen). In vielen Programmen wird dies am Anfang von OB1 gemacht, um solch ein Signal zur Verfügung zu haben (siehe Merker_0 oder VKE 0).
A v 0 = A
Die "0" ist das neutrale Element der ODER-Verknüpfung. Das heißt, findet man eine "0" an einem ODER-Glied so bringt dies keinen Erkenntnisgewinn über das Ergebnis. Es könnte "0" sein, könnte aber auch "I" sein, da es von den anderen Eingängen als dem untersuchten abhängt.
A v I = I
Unabhängig von A wird das Ergebnis einer ODER-Verknüpfung an deren einem Eingang eine "I" ist, immer "I" sein. Daraus folgt, dass wenn man nur eine "I" an einem ODER-Glied findet, man sofort das Ergebnis sagen kann, ohne die Werte der anderen Eingänge überhaupt zu kennen!
A v A = A
Verknüpft man ein Signal mit sich selbst in einer ODER-Verknüpfung, so kommt das Signal selbst wieder heraus. Dieses Wissen ist für die SPS-Programmierung nicht nötig, in der "Hardware-Digitaltechnik" ist aber unentbehrlich, denn es ermöglicht, aus einem NOR einen Inverter zu machen.
A v -A = I
Verknüpft man ein Signal mit seiner Inversion in einer ODER-Verknüpfung, muss das Ergebnis immer eine "I" sein, da ja durch die Negation ein Eingang ganz sicher "I" ist und eine einzige "I" ausreicht, um eine "I" am Ausgang zu erzeugen (siehe Theorem 1 der ODER-Verknüpfung).
Dies ist wichtig, wenn man eine sichere "I" aus dem Nichts erzeugen muss (z.B. um einen Signalweg im Programm unabhängig von anderen Signalen zu schaffen). In vielen Programmen wird dies am Anfang von OB1 gemacht, um solch ein Signal zur Verfügung zu haben (siehe Merker_1 oder VKE 1).
Ganz knapp formuliert lautet die Regel von De Morgan: "Wird eine Negation über ein Verknüpfungsglied verschoben, so muss sich das Verknüpfungsglied von UND zu ODER bzw. von ODER zu UND ändern, damit die Aussage gleich bleibt".
Die Folgerung für die SPS-Programmierung daraus lautet: "Im Allgemeinen werden Negationen nicht über Verknüpfungen himweg verschoben". Die Begründung lautet schlicht: Es bringt nichts, das zu tun.
Gelegentlich hört man, dass Computer mit Hexadezimalen Zahlen rechnen würden. Das ist (im Allgemeinen) nicht so. Computer rechnen mit Binärzahlen. Doch Binärzahlen sind für Menschen nur sehr schlecht sprech- und vor allem merkbar. Daher werden immer vier Bits (eine Tetrade) zusammengefasst und als eine Hexadezimalziffer dargestellt. Das funktioniert so gut, weil 16 = 2 ^ 2 ^ 2, also eine Zweierpotenz ist, deren Exponent wiederum eine Zweierpotenz ist.
Das heißt, man muss nur 16 Bitmuster (Dezimal 0 - 15) auswendig lernen und kann sich damit Binärzahlen als Hexadezimalzahlen merken.
Eine Umrechnung geht beispielsweise so:
Bit-Nr. in der Zahl 7 6 5 4 3 2 1 0 Stellenwert in der Zahl (hex) 80 40 20 10 8 4 2 1 Bit-Nr. in der Hex-Ziffer 3 2 1 0 3 2 1 0 Stellenwert in der Hex-Ziffer 8 4 2 1 8 4 2 1 Binärzahl 0 1 0 0 0 0 0 0 Hexadezimalzahl 4 0
Der Datentyp Integer ist eine einfacher, effizienter Datentyp für die Darstellung einer Teilmenge der "Ganzen Zahlen". Im Allgemeinen wird dabei die Menge der möglichen Bit-Kombinationen durch "zwei" geteilt, um einen Bereich für positive und einen weiteren für negative Zahlen zu haben.
Die hier dargestellten Zahlenkreise zeigen, wie diese Aufteilung vorgenommen wird. Einen 4-Bit-Integer gibt es in der Praxis zwar nicht, aber da die Anzahl der möglichen Kombinationen mit 16 überschaubar und vollständig darstellbar ist, dient der 4-Bit-Integer hier als Beispiel zum Verständnis.
Die Null zählt in diesem Zusammenhang als "positive" Zahl, was die Asymmetrie der Beträge auf positiver und negativer Seite erklärt ("von -8 bis +7"). Die auf den ersten Blick etwas eigenartige Aufteilung hat einige wesentliche Vorteile:
Der 16-Bit-Integer ist der gebräuchlichste Datentyp der Ganze Zahlen.
Wenn größere Zahlen benötigt werden, dann hilft der 32-Bit-Integer normalerweise weiter.
Es gibt Bausteine zur Typumwandlung mit z.B. einen BCD-Int-Wandler und einen Int-Dint-Wandler, aber auch einen Int-BCD-Wandler. "Aber" deshalb, weil eine Typumwandlung nur dann in jedem Fall fehlerfrei funktionieren kann, wenn die Definitionsmenge des Zieltyps größer ist als die des Quelltyps. Wenn es umgekehrt ist, kann es passieren, dass man ein Element umwandeln möchte, das in der Definitionsmenge des Zieltyps nicht enthalten ist.
Für solche Fälle gibt es Fehlerbits, die man auswerten sollte.
Hier muss man zum Verständnis mit einem "eigentlich" beginnen: Der Name des Datenformats "REAL" legt eigentlich nahe, dass es sich um "Reele Zahlen" der Mathematik handeln würde. Das aber nicht so. Die Anzahl von Reellen Zahlen der Mathematik ist in jedem noch so kleinen Intervall unendlich groß. Die Menge der REAL-Zahlen in der SPS ist jedoch nur genau 2^32! - Es klaffen also riesige "Lücken" im Zahlenstrahl der REAL-Zahlen und jede Zahl hat einen direkten Nachfolger bzw. Vorgänger.
Gleichwohl kommt das REAL-Zahlenformat den Reelen Zahlen darin nahe, dass alle Operationen, die üblicherweise ein Ergebnis in den Rationalen (Bruch-) oder Reellen Zahlen der Mathematik zur Folge haben, mit diesem Datenformat ausgeführt werden müssen. Tatsächlich bildet aber das Datenformat nur einen Ausschnitt der Rationalen Zahlen ab, denn es gibt prinzipbedingt keine Möglichkeit, eine Zahl mit unendlichen, nicht periodischen Nachkommastellen in einem begrenzten Speicherplatz von 32 Bit unterzubringen.
Datentyp REAL - 32-Bit-Gleitkommazahlen in Exponential-Darstellung --> 1 + 6 Stellen x Zehnerpotenz -3.402 823E+38 +3.402 823E+38 | 0 | | | | | -1.175 495E-38 | +1.175 495E-38 | | | | | | | | | | | |====...====|===...===| | |===...===|====...====| | -1 | 0 | 1 | | | | | | | | größte positive Zahl | | | | | kleinste positive Zahl | | | | | größte negative Zahl | kleinste negative Zahl
Den Simulator erfolgreich zu bedienen, ist eine Grundvoraussetzung, die eigenen Programme testen zu können. Daher hier ein Rezept, das die Bedienung Schritt für Schritt erläutert. Es wird davon ausgegangen, dass ein Projekt vorhanden ist, das eine Station enthält, die wiederum mit einem Programm versehen ist.
Nochmals der Hinweis zur MPI-Adresse: Der Simulator startet immer als ein Gerät mit MPI-Adresse 2! Dies kann man ändern unter "Zielsystem: MPI-Adresse". Notwendig ist das immer dann, wenn in den Systemdaten (also der Hardware-Konfiguration) eine andere Adresse als "2" eingestellt wurde. Der Simatic Manager versucht immer diejenige MPI-Adresse zu erreichen (und nur die!), die in den Systemdaten des jeweiligen Baustein-Ordners hinterlegt ist!
Ein gestarteter Simulator macht das Arbeiten mit einer wirklichen SPS unmöglich. Er hat bei der Kommunikation Priorität und muss beendet werden, wenn mit einem AG gearbeitet werden soll.
Ein AG wird immer über diejenige Schnittstelle angesprochen, die im Simatic Manager global für das ganze Programmpaket, also auch global für ein Projekt eingestellt worden ist. - Wenn die Statuszeile im Simatic Manager eingeblendet ist, wird darin die Schnittstelle dauerhaft angezeigt.
Ausgewählt wird die Schnittstelle über
Simatic Manager --> Extras --> PG/PC-Schnittstelle einstellen...
Die Markierung in diesem Dialog ist nur sehr schwach zu sehen. Wenn die gewünschte Schnittstelle in der Liste nicht zu finden ist, muss die Schaltfläche "Schnittstellen --> Hinzufügen/Entfernen: --> Auswählen..." betätigt werden, um einen Dialog zu öffnen, in dem Schnittstellen nachinstalliert werden können (Administratorrechte erforderlich!).
Hier ist als Beispiel der "PC Adapter" in der Variante "MPI" ausgewählt. Dies wird, wenn man nicht über ein Siemens PG verfügt, das eine RS 485-Schnittstelle eingebaut hat, der erste Weg sein, den man für ein Kommunikation mit einem AG wählt.
Ein PC-Adapter hat zwei Seiten: sozusagen die PC-Seite und die AG-Seite. Auf der PC-Seite ist es möglich die RS 232C-Schnittstelle zu verwenden (dann muss auf die Datenrate geachtet werden!) oder mit dem moderneren Adapter die USB-Schnittstelle zu benutzen, wie hier gezeigt.
Auf der AG-Seite ist durch die Vorauswahl im ersten Dialog die MPI-Schnittstelle festgelegt worden (es gibt auch noch "Auto" für die Kommunikation über Profibus). Diese arbeitet im Allgemeinen mit einer Datenrate von 187,5 kbit/s. Diese Einstellung sollte man sicherheitshalber kontrollieren, da nur moderne CPUs auch eine höhere Datenrate beherrschen. - Und insbesondere beim seriellen Adapter nicht davon beeindrucken lassen, dass auf der PC-Seite auch eine Datenrate eingestellt werden muss! Diese haben miteinander nicht zu tun und beziehen sich jeweils nur auf eine Seite der Kommunkation. Zwischen diesen Seiten vermittelt der Adapter, sowohl was die Pegelanpassung angeht als auch was die Datenrate betrifft.
Eine Selbsthaltung ist eine Schaltung, die sich ihren Zustand (EIN oder AUS) "merkt", ohne dafür ein mechanisches Glied zu benutzen. Im Gegensatz zum gewohnten Lichtschalter, der in der jeweiligen Stellung einrastet und mechanisch umgelegt bleibt, speichert die Selbsthaltung ihren Zustand elektrisch. Ihre Betätigungsorgane sind ausschließlich Taster, also Schaltelemente, die nach der Betätigung in die Ausgangslage zurückkehren und damit keine mechanische Speicherfunktion haben. Selbsthaltung sind Bistabile Kippstufen.
In der SPS kann man Selbsthaltungen auf zwei prinzipiell unterschiedliche Arten programmieren: dynamisch und statisch. Eine dynamische Selbsthaltung "errechnet" ihren Zustand in jedem Zyklus neu und weist diesen Zustand dem Ausgang auch in jedem Zyklus zu.
Eine solche dynamische Selbsthaltung in FUP sieht so aus:
AWL ist nicht unbedingt der Hauptgegenstand dieser Abhandlung, dennoch soll hier ein Blick auf die AWL geworfen werden, um zu zeigen, dass im Zweifel durch das Umschalten in AWL die Bearbeitungsreihenfolge der Befehle nachgeschaut werden kann. Zwar gilt grundsätzlich von "oben nach unten" und von "links nach rechts", doch sieht es in FUP ja zunächst so aus, als ob der obere Eingang am ODER ganz oben links stünde. Tatsächlich beginnt die Bearbeitung aber am oberen Eingang des UND:
Die dynamische Selbsthaltung in KOP programmiert sieht fast genau so aus wie ein um 90 Grad nach links gedrehter Stromlaufplan. Dieser Umstand macht KOP sehr beliebt, leider aber auch ebenso verführerisch, sich falschen Vorstellungen hinzugeben.
Hier sieht man nämlich, dass E 1.0 ein vermeintlich falsches Schließer-Symbol hat, obwohl doch solch ein AUS-Taster immer ein Öffner ist. Und genau das ist er auch wirklich und dennoch ist das Symbol auch richtig programmiert! - Das liegt daran, dass Symbole in KOP nichts mit den wirklichen Schaltgliedern zu tun haben und vor allem sie sich keinesfalls in der Programmierung widerspiegeln. Der KOP-Schließer ist eine Signalabfrage auf "1", d.h. das Signal wird weitergeleitet, wenn das über dem Symbol stehende Bit eine "1" ist. Der KOP-Öffner ist eine Signalabfrage auf "0", d.h. das Signal wird weitergeleitet, wenn das über dem Symbol stehende Bit eine "0" ist.
Für den konkreten Fall bedeutet dies, dass das Signal der Selbsthaltung an E 1.0 "1" ist, also der reale Öffner geschlossen ist und damit am realen Eingang der SPS eine "1" erzeugt wird. Das heißt wiederum, dass die Programmierung richtig ist, denn bei einer "0" (betätigter Öffner) soll das Signal ja unterbrochen werden. In der Praxis gilt die nur scheinbar paradoxe Regel, dass reale Eingänge der SPS fast immer auf "1" abgefragt werden, solange man "dynamisch gedacht" programmiert. - Egal ob das echte Schaltglied ein Schließer oder ein Öffner ist.
Nun wird sofort der Einwand erhoben werden, dass doch die rücksetzenden Eingänge eines SR-Gliedes alle negiert werden müssen. - Stimmt. - Aber die Begründung dafür ist nicht, dass es sich um Öffner handelt, sondern dass ein SR-Glied mit einer "1" abgeschaltet wird (am R-Eingang) und nicht mit einer "0" (wie ein gewöhnliches UND)!
Was macht eigentlich ein S-R-Glied genau?
"0" am S --> Ausgang/Merker bleibt wie er ist "1" am S --> Ausgang/Merker wird zu "1" "0" am R --> Ausgang/Merker bleibt wie er ist "1" am R --> Ausgang/Merker wird zu "0"
Ein Zuweisung des Ausgangs/Merkers findet nur statt, wenn mindestens einer der Eingänge "1" ist, ansonsten bleibt der Zustand des Ausgangs/Merkers unangetastet.
Eine solche Zuweisung wir "Statische Zuweisung" genannt.
Am S stehen Einschaltbedingungen diese sind ...
Einschaltbedingungen sind also Signale, die den Start des Vorganges erst ermöglichen, aber deren Wegfall den laufenden Vorgang nicht unterbrechen.
Am R stehen Ausschaltbedingungen diese ...
Ausschaltbedingungen sind also Signale, die den Start des Vorganges verhindern und den laufenden Vorgang unterbrechen.
Um über die folgende Flankenauswertung zu sprechen sollte man sich über zwei Fragen möglichst klar sein:
1. Was ist eine Signal-Flanke?
2. Wie funktioniert das mit dem Zyklus der SPS und dem PAE?
Wiederholen wir kurz was eine Flanke ist: Eine Signal-Flanke liegt vor, wenn der Zustand des Signales wechselt. Für die SPS bedeutet dies, dass es zwei Flanken gibt: Die positive oder steigende Flanke, wenn ein Eingangssignal von "0" auf "1" wechselt und die negative oder fallende Flanke, wenn das Signal von "1" auf "0" wechselt.
Ein Signal-Zustand beschreibt einen Zeitraum, eine Signal-Flanke einen Zeitpunkt. Der wesentliche Unterschied ist also, dass eine Flanke "schnell vorbei" ist und erst wiederkehrt, wenn sich der Zustand weitere zwei Male ändert! Das ist der Grund, warum (positive) Flanken gerne für Einschaltsignale benutzt werden: Ein blockierter EIN-Taster (Schließer) erzeugt beim Drücken nur genau eine positive Flanke. Betätigt man den AUS-Taster, wird die Maschine beim Loslassen des AUS-Tasters nicht wieder anlaufen, obwohl der EIN-Taster immer noch betätigt ist und am Eingang der SPS eine "1" erzeugt. Eine positive Flanke würde aber erst wieder erzeugt, wenn der Taster geöffnet und erneut geschlossen wird.
Damit die SPS eine (positive) Flanke erkennen kann, muss sie den Zustand des Einganges von einem zum anderen Zyklus vergleichen: War der Zustand des Einganges im vorherigen Zyklus "0" und ist er im jetzigen Zyklus "1" liegt eine positive Flanke vor. Innerhalb eines Zyklus kann sich der Zustand des PAEs nicht ändern, da es nur einmal zu Beginn des Zyklus von der wirklichen Klemme übernommen und danach nicht mehr verändert wird.
Da es aber nur ein PAE (nämlich das für diesen laufenden Zyklus) gibt, muss der Wert des Einganges aus dem letzten Zyklus zwischengespeichert werden, um ihn mit dem Wert des Einganges in diesem Zyklus vergleichen zu können. Dieses Zwischenspeichern muss aber bereits im vorherigen Zyklus erfolgt sein, damit in diesem Zyklus überhaupt eine "Erinnerung" an den letzten vorliegen kann, und im laufenden Zyklus muss das Speichern wiederholt werden, um für den nächsten Zyklus den Wert aufzubewahren.
Die Netzwerke zur manuellen Auswertung einer Flanke sehen so aus:
Die Funktion erklärt sich am besten, wenn man im 2. Netzwerk zu denken beginnt: Dort wird der Zustand des Einganges aus diesem Zyklus für den nächsten Zyklus im Merker gespeichert. Im nächsten Zyklus wird der Wert aus diesem Zyklus ja bereits der Wert aus dem vorherigen Zyklus sein. Im nächsten Zyklus ist das PAE aber ebenfalls ein neues, daher muss der Wert in diesem Zyklus aufbewahrt werden, um im nächsten Zyklus zur Verfügung zu stehen.
Im 1. Netzwerk wird mit Hilfe einer UND-Verknüpfung ein einfacher Vergleich der Werte durchgeführt: Ist der aktuelle Wert "1" und der Wert aus dem vorherige Zyklus "0" (daher die Negation), dann liegt eine positive Flanke vor.
Flankenauswertung mit "P" (und "N") aus dem Vorrat der Siemens Bitverknüpfungen
Diese Flankenauswertung erscheint zwar einfacher, ist aber im Grunde nicht weniger aufwändig, als wenn man es gleich selbst macht. Wichtig ist, dass man den Merker über der P- oder N-Box immer nur genau einmal benutzt, daher zur Laufzeit der Box verändert wird: Vorher enthält der Merker den Wert des P-Box-Einganges aus dem vorherigen Zyklus, nachher den Wert des Box-Einganges aus dem laufenden Zyklus (um ihn für den nächsten Zyklus aufzubewahren).
Der Stromstoßschalter (im Volksmund nach dem Hersteller und Markennamen "Eltako" (Elektrischer Tastkontakt) genannt) oder digitaltechnisch gesprochen das T-Flipflop ist ein einfaches Gerät, das bei der Betätigung eines Takteinganges den Zustand wechselt und ohne weiteres Taktsignal den Zustand beibehält. Sozusagen eine bistabile Kippstufe mit nur einem Eingang.
Daher könnte man sagen der Stromstoßschalter ist ein S-R-Glied, das eingeschaltet wird, wenn es vorher AUS war und ausgeschaltet wird, wenn es vorher EIN war. Allerdings gibt es dabei (jedenfalls in der Siemens-Ausführung) zwei Schwierigkeiten:
Erstens etwas, was nur in der Siemens-Welt der S-R-Glieder auftritt. Da der geneigte Siemens-Programmierer den Ausgang gern direkt über das S-R-Glied schreibt, wird er feststellen, dass diese Variante schon mal nicht funktioniert:
Denn dabei wird bereits im Durchlauf des S-R-Gliedes der (darüberstehende) Ausgang verändert (im PAA, nicht in der Wirklichkeit der Klemme!), so dass die zweite Abfrage am UND vor dem R-Eingang beim Einschalten bereits eine "I" vom Ausgang sieht und ihn sofort wieder ausschaltet. Also muss es mindestens so aussehen:
Aber auch das funktioniert noch nicht so ganz, da der Benutzer den Taster an E8.0 im Allgemeinen länger als einen Zyklus lang betätigen wird. Das wiederum schaltet im ersten Zyklus den Ausgang EIN und im nächsten Zyklus den Ausgang wieder AUS und so weiter.
Zu guter Letzt muss also noch eine Flankenauswertung eingebaut werden. Egal ob man die "von Hand" macht oder eine P-Box einsetzt, das Ergebnis sollte auf einen Merker geschrieben und dann zwei Mal verwendet werden. Wenn übermütige P-Box-Fans zwei dieser Boxen einsetzen, dann unbedingt für jede Box einen eigenen Merker verwenden - ja, auch wenn dasselbe Signal ausgewertet wird! Jede P-Box verändert den darüberstehenden Merker (das ist gewissermaßen ihr Instanzdatum) bei ihrem Durchlauf!
So sieht aus, wenn man alles "von Hand macht". Sehr schön.
Mit P-Box und Merker. Auch gut.
Die Variante für Nicht-Merker. Im wahresten Sinne der Aussage. - Aber immerhin richtig programmiert.
Und noch eine Variante wie man es machen könnte. Hier mit einer Konnektor-Box, die das Ergebnis der Flankenauswertung in einem Merker zwischenspeichert.
Nun wird man natürlich anmerken können, dass man das UND am S-Eingang auch weglassen könnte, weil das S-R-Glied ja rücksetzdominant ist. Das stimmt, aber das Beispiel hat didaktischen, keinen programmoptimierten Charakter. Deshalb wird hier so getan, als ob es keine Dominanz gäbe.
Im vielen SPS-Programmen findet man einen Merker der grundsätzlich "0" und einen anderen der grundsätzlich "1" ist. das ist praktisch wenn man mal schnell eine "sichere 0" oder eine "sichere 1" braucht. - Doch wie werden solche Werte überhaupt erzeugt?
Es muss eine (möglichst einfache) Funktion gefunden werden, die ohne Voraussetzungen garantiert eine "0" oder eine "1" erzeugt. Das geht mit dynamischen Zuweisungen in ein einziges Netzwerk integriert so:
Mit statischen Zuweisungen sieht das Ganze so aus:
Die Reihenfolge der Auflistung ist Wertung! - Da eine Einschaltverzögerung "nichts speichert" (das muss ja das Einagngssignal machen), benötigt sie keinen Reset, da mit der Wegnahme des Eingangssignals auch das Ausgangssignal verschwindet. Merke: Eine Einschaltverzögerung verzögert das Einschalten, aber nicht das Ausschalten!
Wenn man Zeitglieder benötigt, sollte man sich also fragen: Geht das nicht einfach mit einer Einschaltverzögerung? - Wenn es nicht einfach geht, nimmt man natürlich ein anderes Zeitglied, aber ganz sicher nicht die "Speichernde Einschaltverzögerung"! - Wenn man solch eine Funktion benötigt, baut man sie unbedingt aus einem S-R und einer gewöhnlichen Einschaltverzögerung selbst!
Die Zeitangabe für die Siemens-Zeitglieder erfolgt im veralteten S5TIME-Format. Dieses Format hat eine erhebliche Einschränkung hinsichtlich der Zeitdauer und der Auflösung (weil es sich intern um eine 12 Bit BCD-Zahl (0 - 999) multipliziert mit dem Faktor 10 ms oder 100 ms oder 1 s oder 10 s handelt), die man wenigstens ansatzweise kennen sollte.
Es sind folgende Zeitangaben möglich:
10 ms - 9s990 ms in 10 ms-Schritten
10 s - 99s900 ms in 100 ms-Schritten
100 s - 999 s in 1 s-Schritten
1000 s - 9990 s in 10 s-Schritten
Die Angabe der Zeit erfolgt in der Form S5T#1m3s200ms. Bei unzulässigen Eingaben wird die Zeitangabe vom Editor kommentarlos auf die nächste mögliche Eingabe gerundet. Die größtmögliche Zeit für einen Siemens-Zeitglied sind 9990 s oder 2h46m30s.
Wenn man diesen Sachverhalt aus heutiger Sicht betrachtet und das Format TIME kennt, das mit der Schrittweite 1 ms Zeitglieder bis zu guten 24 Tagen (oder waren es knappe 50 Tage?) realisieren kann, dann erscheint das Wissen um S5TIME eher vernachlässigbar. Dennoch sind die Siemens-Timer gut und brauchbar, insbesondere wegen ihres Reset-Einganges.
Diese einfache Rolltorsteuerung ist - obwohl ihr Not-AUS, Motorschutz, Sicherheitsleiste und zusätzliche Lichtschranken fehlen - mit allem programmiert, was zum Verständnis wichtig ist:
Wie man sieht ist der Reset-Eingang der Einschaltverzögerung unbeschaltet, so dass die S_EVERZ problemlos durrch ein IEC-TON, dass gar keinen Reset-Eingang hat, ersetzt werden könnte. - Dann müsste man allerdings am ODER in NW2 statt "T17" das passende Instanz-Datum des TON verwenden, denn dass sozusagen der "Merker des Q-Ausgangs" so heißt wie der Nummer des Zeitgliedes ist eine Siemens-Eigenheit.
Auch bei dieser Steuerung fehlen Motorschutz und Not-AUS an jedem S-R-Glied, aber das Wcihtige ist der Charakter der Folgeschaltung: Es nur in einer Reihenfolge möglich, die Motoren einzuschalten (3-2-1) und erst dann kann das Silo zu geöffnet werden. Dennoch sind zwei völlig unterschiedliche Konzepte programmiert worden:
Kommt darauf an! - Was ist denn für den Prozess im Falle eines Aufalles günstig? - Wenn beispielsweise ein Förderband wegen Motorschutz (Überlast) ausfällt und alle anderen weiterlaufen, aber das Silo geschlossen wird, dann fahren alle Bänder leer und es gibt einen großen Haufen des Schüttgutes vor den ausgefallenen Band. Das hört sich zunächst ungünstig an. Falls aber die Antriebe zu schwach dimensioniert sind, um ein volles Förderband wieder anzufahren, wird man für dieses Verhalten der Anlage dankbar sein, weil nur ein Förderband (das ausgefallene) leergeschaufelt werden muss. Und den großen Haufen kann man vielleicht relativ leicht mit einem Radlader beseitigen. Das ist viel einfacher als drei Bänder von Hand leer zu schaufeln, was man hätte machen müssen, wenn alle Bänder durch den Ausfall eines einzigen Antriebes stillgesetzt werden würden. Wenn die Antrieb dagen stark genug sind, auch voll beladenen Förderbänder wieder anzufahren, wird man natürlich dieses letztere Methode auswählen.
Nun mag man sagen, dass Stern-Dreieck-Schaltungen doch inzwischen obsolet sind, weil alle Welt selbst für die einfachsten Anwendungen einen Frequenzumrichter zum Ansteuern von Drehstrommotoren benutzt. Das ist vielleicht richtig, aber hier geht es ja um die Logik eines SPS-Programmes und die Schaltung ist so ein Klassiker, dass man sie einfach kennen muss. Außerdem - und deshalb steht sie an genau dieser Stelle - ist sie die Kombination aus Wendeschütz- und Folgeschaltung. Denn bei der Stern-Dreieck-Schaltung gilt es einerseits Stern- und Dreieck-Schütz gegeneinander zu verriegeln, andererseits darf das Dreieckschütz erst eingeschaltet werden nachdem das Stern-Schütz aktiv war.
Dieser Umstand hat zunächst ein Problem: Ein Signal (Sternschütz EIN) kann nicht ein anderes verriegeln und gleichzeitig freigeben! Daher muss die Information "Sternschütz war EIN" auch nach dem Ausschalten desselben erhalten bleiben.
Dadurch ist die Schaltreihenfolge der Schütze recht eindeutig vorgegeben und daher soll auch in diesem Programmbeispiel von vornherein so gedacht werden:
Im Programmbeispiel wurde wieder auf Not-AUS und Motorschutz verzichtet und es handelt sich um einen reinen Handbetrieb für das Umschalten von Stern auf Dreieck. Allerdings wurde dennoch ein Zeitglied eingebaut, dass das Dreieckschütz ein wenig verzögert, um dem Sternschütz die Gelegenheit zu geben, die Kontakte sicher und vollständig zu öffnen und den Lichtbogen zu löschen. Deshalb wird NW3 nicht das Schütz selbst (also der Ausgang dafür), sondern ein Merker zugewiesen. Im NW4 erfolgt dann die Einschaltverzögerung und die Zuweisung des Ausgangs. Das hat den Charakter einer speichernden Einschaltverzögerung, deren Verwendung aber nicht empfohlen wird.
Diese Programmierung ist natürlich sehr geradeaus und in FUP (FBS) gedacht und mit S-R-Gliedern als Speicher für die Zustände angelegt. Bei etwas genauerer Überlegung wird man allerdings feststellen, dass sich eine sehr einfache Alternative zum NW3 entwickeln lässt. Dabei wird der Umstand ausgenutzt, dass das Dreieckschütz vollständig von den Zuständen der beiden anderen Schütze abhängt und daher keinen eigenen Zustandsspeicher benötigt. Eine einfache (dynamische) Zuweisung genügt:
Eigentlich darf man die Siemens-Zähler gar nicht zur Benutzung empfehlen, weil sie einen so stark eingeschränkten Zählbereich (0 - 999) haben und nur eher eigenartige Datentypen ausgeben.
Aber da sie nun mal vorhanden sind und ihre Instanzdaten nicht in expliziten Datenbausteinen, sondern im Betriebssystem liegen, kann man ja mal ein Beispiel programmieren.
An dieser Stelle angekommen ist eine kurze Wiederholung angebracht.
Adressierungsprobleme: Merkerwörter bei Byte-Adressierung
Zahlensysteme (Wdh.):
binär
BCD
Integer (-32768 .. +32767)
Es scheint zunächst 18 Vergleicher zu geben, doch wenn man sie sich anschaut, stellt man fest, dass es nur 6 Stück sind, die es aber jeweils in drei Gruppen gibt. Die Gruppen sind aufgeteilt nach den Datenformaten der zu vergleichenden Eingänge: Es gibt solche für Integer- (Int), Doppelinteger- (DInt) und Reelle (Real) Zahlen. Alle Vergleicher funktionieren gleich, hier im Beispiel wird nur der Integer-Vergleicher betrachtet.
Ein Vergleicher hat zwei Eingänge IN1 und IN2. Zwischen diesen beiden Eingängen steht in dieser Reihenfolge das Vergleichszeichen des Vergleichers und bildet eine Aussage, die "wahr" (1) oder "falsch" (0) sein kann. Der Wahrheitswert dieser Aussage wird am Ausgang des Vergleichers ausgegeben.
Es gibt also die Aussagen:
IN1 > IN2 (IN1 größer IN2)
IN1 >= IN2 (IN1 größer oder gleich IN2)
IN1 < IN2 (IN1 kleiner IN2)
IN1 <= IN2 (IN1 kleiner oder gleich IN2)
IN1 == IN2 (IN1 gleich IN2)
IN1 <> IN2 (IN1 ungleich IN2)
Wie man sieht, hätte man entweder die beiden "größer-" oder die beiden "kleiner-"Vergleiche auch weglassen können, da sie sich durch das bloße Vertauschen der Operanden ineinander überführen lassen.
Beide Eingänge müssen vom Typ "Int" sein, sonst wird der Vergleicher im KOP/AWL/FUP-Editor wegen des Typ-Konfliktes nur als AWL dargestellt. Notfalls muss man die im Programm vorhandenen Werte in einen der Typen wandeln, die die Verleicher beherrschen. Dies ist das Hauptproblem im Umgang mit Vergleichern. Das heißt, genau genommen hat dies gar nichts mit den Vergleichern zu tun, sondern mit der Art wie der KOP/AWL/FUP-Editor mit Variablentypen und deren Konflikten umgeht: Einen Typkonflikt, kann der Editor nur erkennen, wenn die entsprechende Variable auch in der (globalen) Symboltabelle eingetragen ist. Holt man also aus dem Dual-Ausgang eines Siemens-Zählers ein Merkerwort ab und gibt dieses auf den Eingang eines Integer-Vergleichers wird alles funktionieren und "normal" aussehen, bis man das Merkerwort in die Symboltabelle einträgt. Dort muss man es nämlich als "Word" oder als "Int" eintragen. Hat man dies getan, wird dasjenige Netzwerk in dem der Typkonflikt auftritt (bei "Int" am Zähler, bei "Word" am Vergleicher) nur noch als AWL dargestellt. Die Typüberprüfung kann man allerdings auch unter "Extras: Voreinstellungen: FUP/KOP: Typen überprüfen" abstellen, dann hat man allerdings auch gar keinen Hinweis auf Typkonflikte mehr.
So bleibt nur, auf passende Typen zu achten und am besten keinen Siemenszähler zubenutzen, sondern einen solchen, wo gleich ein Integer oder Doppel-Integer herauskommt. Eine andere Möglichkeit ist die Typumwandlung mit einem Wandler oder das bloße Verschieben des Inhaltes über eine MOVE-Box, die keinen Typkonflikt kennt.
Doppellichtschranken mit Richtungserkennung kommen häufig vor. Die Anwendung reicht vom einfachen Personenzähler bis zum Inkrementalgeber für Längen- oder Drehwinkelerfassung. Früher waren in jeder Rollkugelmaus zwei von der Rollkugel angetriebene Fächerscheiben, jede wurde von einer Doppellichtschranke abgetatstet, die so ein Richtungssignal und Impulse zur Bewegung des Cursors auf dem Bildschirm an den Rechner lieferte.
Es gibt auch mechanische "Doppelschalter" die 90° phasenverschoben kombiniert je einen Schließer- und einen Öffnerkontakt haben und damit zwei 90° phasenverschobene Rechteckimpulse liefern. Diese Drehschalter kann man endlos drehen. Man findet sie an Geräten, bei denen Werte durch einfaches Rauf- und Runterzählen eingestellt werden. Doch meistens sind heute auch in diesen Anwedungen verschleißfreie Lichtschranken eingebaut. Drehwinkeländerungen einer Welle kann man mit zwei Induktiven Näherungsschaltern erfassen, wenn sich entsprechende Vorsprünge an die Welle anbauen lassen.
Jedoch ist bei allen Abtastungen durch Näherungsschalter oder Lichtschranken unabdingbare Voraussetzung:
Das Objekt muss größer sein als der Abstand der Lichtschranken/Näherungsschalter!
Hier ein sehr einfacher, effektiver Versuchsaufbau, um das hier beschriebene "Programmierproblem" nicht nur zu lösen, sondern auch praktisch vorzuführen. Zwei Zweiweglichtschranken (mit unterschiedlich eingestellter Lichterkennung!) und ein Reflektor genügen vollkommen. 2 - 3 m Reichweite ist kein Problem.
Wenn man erstmalig darüber nachdenkt, wie man die Richtung mit der sich ein Objekt durch einen Doppellichtschranke bewegt überhaupt heraus bekommen könnte, dann hat man schnell Merker oder gar Zähler im Kopf, die aber gar nicht nötig sind. Ein einfache, aber genaue Analyse der einzelnen Ereignisse, die passieren, wenn sich das Objekt durch die beiden Lichtschranken bewegt, zeigt, dass bereits die Auswertung eines (beliebigen, aber in beiden Fällen gleichen) Zustandes an der einen und die Auswertung der Flanke an der anderen Lichtschranke zu einem eindeutige Ergebnis führt.
Hier die Ereignisse vollständig aufgelistet. Wenn sich das Objekt von links nach rechts bewegen soll, liest man von oben nach unten (Nummerierung links). Soll sich das Objekt von rechts nach links bewegen, liest man unten nach oben (Nummerierung rechts). Die Zustände "0" sind von der Anlage (als Zustand) nicht unterscheidbar.
Fall/ Fall/ Zeitpunkt Zeitpunkt links rechts ----> <---- rechts links Lichtschranken L1 L2 X X | | ___________ | Objekt | 0. ______|___________|_______________________________ 0. | | ___________ | Objekt | 1. __________|___________|___________________________ 4. | | ___________ | Objekt | 2. _______________|___________|______________________ 3. | | ___________ | Objekt | 3. ______________________|___________|_______________ 2. | | ___________ | Objekt | 4. ___________________________|___________|__________ 1. | | ___________ | Objekt | 0. _______________________________|___________|______ 0. | | X X L1 L2
links -> rechts rechts -> links Fall/ L1 L2 L1 L2 Fall/ Zeit- Zeit- punkt punkt 0. 0 0 0 0 0. ------------------------------------------------------- 1. P 0 N 0 4. 2. I P I N 3. 3. N I P I 2. 4. 0 N 0 P 1. ------------------------------------------------------- 0. 0 0 0 0 0.
"P" bedeutet "Positive Flanke", "N" bedeutet "Negative Flanke".
Selbstverständlich kann man dieselbe Auswertung auch für eine sich drehende Fächerscheibe durchspielen. Dann stellt man folgendes fest: Mit einer 4-blättrigen, gleichmäßig in 45°-Abschnitten aufgeteilten Scheibe und zwei Sensoren, die im Winkel von 22,5° montiert sind, lässt sich der Drehwinkel auf 22,5° genau bestimmen.
Die Grafik zeigt wieder die vier Fälle pro (Dreh-)Richtung. Die Richtung ist hier im Uhrzeigersinn (Rechtslauf) positiv angegeben (also abweichend von der mathematischen Konnvention).
Rechtslauf (Zeit läuft von links nach rechts) |
|||
Linkslauf (Zeit läuft von links nach rechts) |
|||
Ein Timing-Diagramm der Signale zeigt sehr schön, dass eine Phasenverschiebung "B2 90° nacheilend" (Rechtslauf im obigen Fall) und "B1 90° nacheilend" (Linkslauf) wirklich nur ein Austausch der beiden Signale bedeutet.
Außerdem wird wiederholt deutlich, dass kein einziger Fall doppelt vorkommt. Die Richtungs- und Winkelerkennung ist also tatsächlich eindeutig.
Diese Anordnung liefert also an B1 und B2 zwei genau um 90° gegeneinander phasenverschobene Signale. Bitte beachten, dass diese 90° Phasenverschiebung nichts mit 90° Drehwinkel zu tun haben! Die Auswertung aller möglichen Signalkombinationen ergibt alle 22,5° Drehwinkel der Scheibe einen Zählimpuls, also 16 Impulse pro voller Umdrehung.
Da es sich um eine inkrementelle Erfassung handelt, ist eine Nullpunktfahrt und eine dafür geeignet Sensorik nötig, die hier nicht gezeigt ist!
Da CTUD als Zähler benutzt wurden, deren Wertebereich "Integer" ist (-32768 .. +32767) ist die Erfassung von maximal 2048 Umdrehungen in die eine oder andere Richtung möglich (jeweils vom Nullpunkt ausgehend).
Der Funktionsbaustein zählt zunächst sämtliche Impulse in die eine oder andere Richtung. Dabei zählt er während einer Rechtsdrehung hoch und bei Linksdrehung wieder runter. Damit die Auswertung auch funktioniert, falls die Sensoren mehr als 16 Impulse pro Umdrehung liefern, ist diese Zahl parametrierbar.
Die Ausgangssignale sind die bloße unbewertete Impulsanzahl, der Drehwinkel vom Nullunkt aus (Rechtslauf positiv) und die Anzahl der Umdrehungen (mit Nachkommastellen).
Beim Aufruf im Hauptprogramm sieht der Funktionsbaustein dann "von außen" zum Beispiel so aus:
Die (lokale) Variablentabelle des Baustein soll natürlich auch kein Geheimnis bleiben:
Wesentliches Werkzeug, um eine SPS-interne Störung zu analysieren ist der Diagnosepuffer einer jeden S7-SPS.
Er lässt sich (nur online) z. B. auf folgenden Wegen auslesen:
Simatic Manager --> Zielsystem --> Diagnose/Einstellungen --> Baugruppenzustand
oder
KOP/AWL/FUP --> Zielsystem --> Baugruppenzustand
Das Fenster öffnet mit der Registerkarte allgemein, hier ist jedoch die wichtigere Registerkarte "Diagnosepuffer" gezeigt.
Der Diagnosepuffer speichern im Allgemeinen die letzten 100 Ereignisse, die die SPS entscheiden beeinflusst haben. Kommt ein neues Ereignis hinzu fällt das älteste aus der Liste heraus. Wenn ständig neue Ereignisse hinzukommen, lässt sich die Anzeige mit "Aktualisieren" auf den neuesten Stand bringen. D.h. dann werden die Daten erneut von der SPS in diese Anzeige übertragen.
Der Diagnosepuffer bleibt erhalten, solange die CPU eine intakte Pufferbatterie bzw. eine Micro Memory Card hat.
Weitere wichtige Registerkarten sind die allgemeinen Informationen und die Angaben über die Zykluszeit (hier gezeigt). Unter "Leistungsdaten" können die speziellen Daten der jeweiligen CPU eingesehen werden (funktioniert sinnvoll nur mit "echten" CPUs).
Zur Fernsteuerung der SPS dient die Online-Funktion "Betriebszustand". Sie lässt sich folgendermaßen erreichen:
Simatic Manager --> Zielsystem --> Diagnose/Einstellungen --> Betriebszustand
oder
KOP/AWL/FUP --> Zielsystem --> Betriebszustand
Die Fernsteuerung ist allerdings nur möglich, wenn der Schlüsselschalter bei älteren SPSen in der Stellung RUN oder RUN-P steht bzw. der Kippschalter bei neueren SPSen in der Stellung RUN (dort gibt es keinen Modus RUN-P mehr!).
Vor den tatsächlichen Start-/Stop-Vorgängen erfolgt zwar eine Nachfrage, dennoch sollte diese Fernsteuerfunktion immer mit großer Vorsicht benutzt werden! Eine Anlage im "Stop" schaltet sämtliche realen Ausgänge auf "Null", auch wenn das Prozessabbild zunächst erhalten bleibt!
------------------------------------------------- | | | S7-300/400 | | Programmiergerät (PG) | | (heute oft ein gewöhnlicher PC) | | | ----------- PC [D-9, männlich] ------------- RS-232C (seriell) [D-9, weiblich] | Nullmodemleitung | [D-9, weiblich] RS-232C (seriell) --- PC-Adapter [D-9, männlich] ------------- | | | Schnittstellen/Pegelwandler | | RS-232C (seriell) >----> RS-485 (seriell) | | | --- PC-Adapter [feste Leitung] ------------------ | | | Leitung [D-9, männlich] RS-485 (seriell) ----------- AG [D-9, weiblich] ------------------ | | | CPU des AG mit MPI oder DP | | | | | --- ----- Hintergrundbus MPI ------------------ | | ----------------zu anderen Baugruppen (z.B. CPs)---->
Zwischen PC und seriellem PC-Adapter gehört ein Nullmodemkabel, weil PC und PC-Adapter DTEs sind. Diese Leitung kann problemlos mit einer vollständig verdrahteten 1:1-D-9-Verlängerung verlängert werden.
Sub D 9-pol. Sub D 9-pol. female female DCD 1 -- n.c. n.c. -- 1 DCD RxD 2 --<<------------\/----------->>-- 2 RxD TxD 3 ----->>---------/\--------<<----- 3 TxD DTR 4 ----->>--\ /--------------<<----- 4 DTR Gnd 5 ----------\---------------------- 5 Gnd DSR 6 --<<-----/ \----------------->>-- 6 DSR RTS 7 ----->>-------\/----------<<----- 7 RTS CTS 8 --<<----------/\------------->>-- 8 CTS RI 9 -- n.c. n.c. -- 9 RI S --------------------------------- S
An den seriellen PC-Adapter ist ja eine Leitung fest montiert, am USB-PC-Adapter befindet sich eine Buchse (wie für MPI/DP-Geräte üblich). Zwischen USB-Adapter und AG muss aber das beiligende Spezialkabel benutzt werden. Dennoch lässt sich diese Verbindung mit einer vollständig verdrahteten 1:1-D-9-Verlängerung problemlos verlängern. Die Spezialleitung von Siemens sieht so aus.
MPI-Anschluss am AG Sub D 9-pol. Sub D 9-pol. Sub D 9-pol. female female male 1 -- n.c. n.c. -- 1 1 n.c. M24V 2 ----------------------- 2 M24V 2 M24V (Masse 24V) Ltg_B 3 ----------------------- 3 Ltg_B 3 Ltg_B (Datenltg. B) RTS-AS 4 ----------------------- 4 RTS-AS 4 RTS-AS (Sendeanforderung von AS) M5V 5 ----------------------- 5 M5V 5 M5V (Masse 5V) 6 -- n.c. n.c. -- 6 6 P5V (5V Ausgang) P24V 7 ----------------------- 7 P24V 7 P24V (24V Ausgang) Ltg_A 8 ----------------------- 8 Ltg_A 8 Ltg_A (Datenltg. A) 9 -- n.c. n.c. -- 9 9 RTS-PG (Sendeanforderung an AS) S ----------------------- S
Logo!
Programmiergerät (PG) (heute ein gewöhnlicher PC)
PC (D-9, männlich)
RS-232C (seriell)
Leitung (D-9, weiblich) - Pegelwandler im Spezialstecker Logo!
Spezialschnittstelle Logo!
AG (Spezialstecker Logo!)
Was macht |