Startseite

SCHLEICHER System Auswahl

Programmiergeräte

Programmier-sprache

Themen auf dieser Seite:

Wahlschalter

Berechnungen

Bereichserkennung

Zähler

Zeiten

Ausgewählte Programmsequenzen der PDPS

 

Es ist müßig, anzunehmen, dass in der Zeit des angehenden dritten Jahrtausends irgend ein Mensch ein neues Programm für eine PDPS schreiben würde. Sehr wohl ist es aber möglich, dass eine PDPS unauffällig und fleißig jahrelang eine Maschine gesteuert hat. Nun interessiert man sich für das Programm, vielleicht um eine kleine Anpassung einzuprogrammieren, oder um die Steuerung auszutauschen.
Die Kontaktplantechnik ist weitgehend selbsterklärend, weit über Sprachbarrieren hinweg. Im Folgenden habe ich einige Besonderheiten herausgegriffen, die ohne Erklärung rätselhaft erscheinen.

Sollten Sie in Ihrem eigenen PDPS Programmausdruck rätselhafte Dinge entdecken, so schicken Sie mir bitte eine e-mail, ich will Ihnen gerne helfen.

Auswahl von Werten:

Angenommen, es gibt einen Wahlschalter mit drei Stellungen. In jeder Stellung soll ein Sollwert für einen Antrieb vorgewählt werden können:

Programmbeispiel "Selector"


Die erste Ladeanweisung LDW 0 wird immer ausgeführt. Sie besetzt den Akku mit 0 vor. Falls keine der folgenden Zweige aktiv wird, so wird der Sollwert in 3100 zumindest auf Null gehalten. Falls Null unbefriedigend ist (z.B. bei Temperaturen) so kann dort ein anderer unbedenklicher Wert stehen. Wenn die erste Nebenlinie fehlt, und keiner der Kontakte ist betätigt, bleibt der zuletzt geladene Wert erhalten. Die Kontakte des Wahlschalters sind an die Eingänge 335, 336 und 337 angeschlossen. Es können, wie im obrigen Beispiel, Eingänge sein, es können aber auch genauso Merker sein, die z.B. Bereiche längs einer Achse markieren und z.B. verschiedene Motordrehzahlen auslösen.

Je nach Schalterstellung wird die entsprechende Nebenlinie aktiviert und der Wert Null des Akkumulators überschrieben. Die letzte Nebenlinie enthält eine Ladeanweisung von einem Speicherplatz, Adresse 2377. Dort könnte ein veränderbarer Wert stehen der z.B. über ein Bediensystem vorgegeben werden kann.

Die Anweisungen ON 4, OH4 und O4 dienen nur zur Festlegung der Feinstruktur dieses Programmteils.

Die Anweisung A 0 dient nur dazu, das Netzwerk abzuschliessen

 

zurück zur Themenübersicht

Berechnungen:

Von einem Bediensystem z.B. Bildschirm kommt ein Sollwert, den der Bediener frei einstellen kann. Es soll nun eine Zone um diesen Sollwert gebildet werden innerhalb der Istwertschwankungen toleriert werden.

screenshot Beispiel "Berechnungen"

1. PDSA, P02:

Netzwerk 316: Der Sollwert wird aus Speicheradresse 2500 in den Akku geladen, dann wir der obere Grenzwertert der Toleranzzone dazuaddiert, und das Ergebnis auf 2531 geschrieben. Dann nochmals den Sollwert holen, jetzt den unteren Grenzwert der Toleranzzone abziehen und das Ergebnis in 2530 schreiben. Das Beispiel ist mit Grenzwerten die symmetrisch zum Sollwert liegen.

Die P02 könnte den Bereich auch als Prozentwert vom Sollwert bilden, das sie multiplizieren und dividieren kann.

 

2. PDSE:

Netzwerk 325: Die PDSE kann nur über das Adressregister addieren. Dazu wird der Sollwert in das Adressregister geladen (LAA 2500). Mit AAW 20D wird der obere Wert der Toleranzzone auf den Inhalt des Adressregisters aufaddiert. Das Ergebnis steht im Akku. Mit LRA 2531 wird der obere Grenzwert in den Speicher geschrieben.

Die PDSE kennt keine Subtraktion. Es muß also eine negative Zahl (-20D) addiert werden. Eine Methode, eine negative Zahl zu erhalten besteht darin, sie auf einem Blatt Papier vom maximalen Zahlenbereich abzuziehen.
Also: 2048D - 20D = 2018D (= 3742Q.)

Programmierung: LAA 2500 (Sollwert) kann entfallen, da das Adressregister unbrührt bleibt. Also nur AAW 2018D und LRA 2530.

Die Sequenz der PDSE ist um eine Anweisung kürzer.

Die Sequenz wäre so auch auf der PDSA und der P02 lauffähig, allerdings schwer zu lesen.

 

zurück zur Themenübersicht

 

Bereichserkennung:

Mit den Vergleichsbefehlen kann man Wertebereiche erkennen. Zum Beispiel soll angezeigt werden ob einWert über der Alarmgrenze liegt, zu hoch, im Arbeitsbereich, zu tief oder unterhalb einer Sicherheitsgrenze.

 

Programmbeispiel "Bereichserkennung"


Man kann die Sequenz noch eleganter und sparsamer programmieren. Es wird hier jedoch etwas ausführlicher geschrieben um die Fälle "oberer und unterer fester Grenzwert", "variable Bereichsgrenzen" und Mischformen zwischen diesen Fällen klar zu zeigen.

 Am Anfang des ersten Netzwerkes wird der zu bewertende Istwert geholt: LDA 2101 holt den Inhalt der Speicherzelle 2101 und lädt ihn in den Akkumulator. Er braucht für die gesamte Sequenz nicht aufgefrischt zu werden.
Die Vergleichsanweisung CDW 280D vergleicht mit einem festen Wert 280. Nach dieser Anweisung sind die Bits 0, 1 und 2 gesetzt. Wenn der Wert größer als 280 ist, dann ist das Vergleichsbit 0 gelöscht. Es wird erst gesetzt, wenn der Wert kleiner als 280 wird. Bit 0 wird mit einem Öffner abgefragt. Dieser ist geschlossen, solange der Wert "nicht" kleiner ist. Oder auch größer oder gleich groß. Der Alarmausgang 3254 wird gesetzt, wenn der Wert gleich oder größer 280 ist.

Das nächste Netzwerk vergleicht mit einem festen oberen Grenzwert, dem Alarm, und einen variablen unteren Wert, dem Beginn des Arbeitsbereichs.

Das nächste Netzwerk erkennt den Arbeitsbereich, der mit zwei variablen Werten aus dem Arbeitsspeicher markiert ist. Diese Werte könnten z.B. aus der Berechnung einer Zone um den Sollwert stammen. Der Sollwert kommt z.B. von einem Bildschirmbediensystem.

Auf gleiche Weise werden die Bereiche "zu niedrig" und "untere Sicherheitsgrenze" gebildet.

zurück zur Themenübersicht

 

Zähler

Für diese Grundfunktion jeder SPS gibt es zwei Anweisungen:

  • HRA:  Hochzählen (aufwärts oder vorwärts)
  • NRA:  Niederzählen (abwärts oder rückwärts)

Beide Anweisungen arbeiten flankenorientiert: Nur beim Wechsel des Zustandes des VKE an der Stelle der Anweisung wird der Inhalt des Operanden um eins erhöht oder erniedrigt.

Zur Flankenerkennung wird der alte Zustand des VKE im 12. Datenbit abgespeichert. Dieses Bit wird sowohl von HRA als auch von NRA verwendet. Deshalb ist ein Vorwärts /Rückwärtszähler auf eine gemeinsame Speicheradresse nicht möglich. Folgende Programmierung umgeht das Problem:


00160:|   0043      2025      2026                                    0000
      |---] [-------HRA-------LRA------------------------------------( A )
      |

00164:|   0044      2026     2025                                    0000
      |---] [-------NRA-------LRA------------------------------------( A )
      |

 

Das Rücksetzen oder Setzen des Zählers sollte unmittelbar danach stehen. So kann eine gerade eingelaufene Zählflanke nicht stören


00170:|   0045   0000/0000    2025      2026                          0000
      |---] [-------LDW-------LRA-------LRA--------------------------( A )
      |

Danach, aber auch an irgend einer Stelle des Programms kann die Abfrage des Zählerstandes stehen. Dazu genügt der Zugriff auf nur einen der beiden Zähler


00175:|   2025   0310/0200    0000                                    3043
      |---LDA-------CDW-------]/[------------------------------------( A )
      |

zurück zur Themenübersicht

 

Zeitglieder:

Zeitglieder gehören zu den Standard Programmfunktionen jeder SPS.

Die PDPS kennt keine Zeitglieder. Zeitglieder werden vielmehr durch Befehlsfolgen in der Art von Macros erzeugt. So ist es möglich, die unterschiedlichsten Zeitfunktionen (Aufwärtszählend, Abwärtszählend, integrierend, Anzugsverögert, Abfallverzögert, Puls, Festsollwert, variabler Sollwert..etc.) zu realisieren und für seine Programme zum Standard zu erklären.

Anzugsverzögertes Zeitglied:

Eine herausragende Rolle nimmt das anzugsverzögerte Zeitglied ein, das der Funktion eines anzugsverzögerten Zeitrelais entspricht:

Diagramm anzugsverzögerte Zeit

 

(1) Eingang auf Null:

> Der Ausgang des Zeitglieds steht auf Null.

> Die Anzeige des Zeitglieds steht auf Null.

(2) Der Eingang wird von Null auf Eins gesetzt (Start des Zeitgliedes):

> Die Anzeige des Zeitglieds beginnt von Null aus nach oben zu laufen.

(3) Die Anzeige erreicht den Sollwert des Zeitliedes

> Der Ausgang des Zeitgliedes geht von Null auf Eins
> die Anzeige bleibt stehen

(4) Der Eingang wird von Eins wieder auf Null gesetzt (Start wird weggenommen)

> Der Ausgang geht wieder anf Null.
> Die Anzeige geht ebenfalls auf Null.

(5) Der Eingang wird wieder angesteuert (das Zeitglied wird neuerlich gestartet):

> Die Anzeige beginnt wieder von Null aus nach oben zu laufen.

(6) Der Eingang wird weggenommen, bevor der Zeitsollwert erreicht ist

> Die Anzeige wird wieder auf Null zurückgesetzt
> Der Ausgang des Zeitgliedes ist auf Null geblieben.

 

Ein Zeitglied mit diesem Verhalten wird in der PDPS meist wie folgt programmiert:

 

(1) Das Eingangsbit 120 steht auf Null: im ersten Netzwerk wird der Zeitzählerstand im Wort 3051 auf Null gehalten. Im zweiten Netzwerk unterbrichtdas Bit 120 das VKE, dadurch wird auch der Augang des Zeitgliedes 1230 auf Null gehalten.

(2) Das Eingangsbit 120 wechselt von Null auf Eins (das Zeitflied wird gestartet): Im ersten Netzwerk wird der Zeitzähler 3051 nichtmehr auf Null gehalten. In der zweiten Kette schaltet das Bit 120 das VKE durch bis auf das Pulsbit 6. Dieses pulst mit einer Frequenz von 10 Hz. An jeder steigenden Flanke, also alle 100ms wird das Wort 3051 um eins hochgezählt. Das Zeitglied beginnt von Null aus zu laufen.

(3) Der Wert in der Zeitzählzelle 3051 erreicht den Sollwert von 310Q / 200D: Dadurch wechselt das Vergleichsergebnis Bit 0 seinen Zustand. Der Zeitwert ist nichtmehr kleiner (Öffner 0!) sondern größer oder gleich 200D = 20 Sekunden und das Ausgangsbit 1230 des Zeitgliedes wird auf Eins gesetzt. Das Zeitglied "meldet".
Wenn im nächsten Zyklus der Eingang des Zeitgliedes (Bit120) immer noch gesetzt ist, geht das zweite Netzwerk in Selbsthaltung und hält im Selbsthaltungszweig den Zeitwert auf 200 fest. Das Zeitglied steht auf seinem Sollwert.

(4) Der Eingang wird wieder weggenommen (Bit 120 von Eins auf Null): Das erste Netzwerk wird wieder aktiv und löscht den Zählwert. Das zweite Netzwerk wird deaktiviert, also wird auch das Ausgangsbit 1230 auf Null gesetzt.

(5) und (6) Der Eingang wird auf Eins gesetzt und vorzeitig wieder zurückgenommen: Die Zählzelle beginnt zwar zu laufen, fällt aber bei Wegnahme der Ansteuerung wieder auf Null ohne den Ausgang 1230 des Zeitgliedes verändert zu haben.

 

zurück zur Themenübersicht

Kettner Timer

Angenommen, Sie treffen auf folgende Anweisungen:

Bestimmt stehen Sie dann an einer Anlage stehen, die in der Gegend von Rosenheim programmiert wurde - zum Beispiel bei KETTNER. Aber auch bei älteren BATTENFELD Kunststoffpritzgiessmaschinen ist diese Programmiertechnik anzutreffen, und sie funktioniert folgender Massen:

(1) Zykluszeit: Die Zykluszeit bei PDPS und Promodul-K ist fest. Sie beträgt bei 4k Programmen 10 msec und bei 8K Programmen 20 msec. Die Zykluszeit bleibt unverändert, auch wenn das Programm gekürzt wird. Die Zykluszeit ist auch unabhängig vom Zustand der Variablen oder von der Art der Anweisungen. Die Zykluszeit ist so zuverlässig, dass man mit ihr Zeitgeber aufbauen kann.

(2) Flankenmerker: Der HRA Befehl zählt an der Flanke des aktuellen VKE. Wenn also der Zustand des Netzwerks an der Stelle der HRA Anweisung von 0 auf 1 wechselt, wird der Inhalt des addressierten Wortes um eins hochgezählt.

Den Zustand des Netzwerks merkt sich der Zählbefehl im obersten Bit des Datenwortes (Flankenmerker).

Normal dürfen der HRA und NRA Befehl nur einmal je Adresse vergeben werden.

Andernfalls geschieht, was im Kettnertimer erwünscht ist: wenn der Merker 1473 EIN ist, läuft der Zähler mit der Frequenz der Abtastrate (Programmzyklus) des SPS Programms. Bei einem 4K Programm also mit 100Hz. Dieser Zeitgeber hat eine Auflösung von 10 Millisekunden. Da auch das SPS Programm synchron mit 10 ms Zykluszeit läuft, geht diese Genauigkeit unverfälscht auf die Ausgänge weiter.

(3) Zeitverzögerung: Die Zeitverzögerung im obigen Beispiel beträgt also 250ms mit einer Aufösung von 10ms.

(4) Anekdote: Mit Addierbefehlen (PDSE: AAW 1; PDSA, P02, P03: ADW 1) kann man den Timer mit genau so vielen Befehlen programmieren. Dann wüßte auch die liebe Nachwelt, was mit der Sequenz gemeint war. Warum wurde diese kryptische Befehlsfolge gewählt?

Als seinerzeit KETTNER sich dazu entschied die neue PDPS anstelle der altverdienten PROMODUL-K einzusetzen hörte man von einem Verdikt unter den SPS Programmierern. Demnach waren Programme mit Wortbefehlen für eine damals noblige Steuerungsfamilie des Marktführers vorbehalten. SCHLEICHER Steuerungen mußten mit Bitprogrammen vorlieb nehmen. Einzige Ausnahme waren Zeitgeber. Vielleicht haben sich die Programmierer, denen die Intelligenz kastriert wurde mit einem recht unverständlichen Programmierstil bedankt.

Ich wäre dankbar, von einem Veteranen die Wahrheit und nichts als die reine Wahrheit über den HRA zu hören.
 

zurück zur Themenübersicht

 

Kaltenberg, 24.10.2010