# Ablaufsteuerung Stromstoßschalter (Ich komm nicht auf die Lösung)



## MarkusSether (15 April 2017)

Hallo,

ich Programmiere nun schon seid einem dreiviertel Jahr für meine Firma Siemens SPS in Step7 Tia Portal v13. 
Meistens benutze ich FUP und SCL und bekomme damit die meisten Probleme sauber gelöst. Jetzt komme ich aber leider nicht weiter.
Folgendes:

Ich habe 3 Taster als Eingänge und 3 Ausgänge.

Ich will dass:

Taster 1 (Erste mal gedrückt) --> Ausgang 1 = Ein
Taster 1 (Zweite mal gedrückt) --> Ausgang 1 = Aus
Taster 2 (Erste mal gedrückt) --> Ausgang 1 und 2 = Ein
Taster 2 (zweite mal gedrückt) --> Ausgang 1 und 2 = Aus
Taster 3 (Erste mal gedrückt) --> Ausgang 1,2 und 3 = Ein
Taster 3 (Zweite mal gedrückt) --> Ausgang 1,2 und 3 = Aus

soweit habe ich das schon hinbekommen ABER zusätzlich soll es auch möglich sein das ganze durcheinander zu drücken sodass Taster 2 oder 3 zuerst gedrückt werden können und die Anlage dann nicht erst Aus geht sondern zuerst die Ausgänge bis dahin geschalten werden und erst wenn der zum Taster gehörige Ausgang gelaufen ist ein zweiter Druck alle Ausgänge wieder Aus schaltet. 

Ebenso wenn die Ausgänge 1-3 laufen und ich wieder Taster 1 drücke soll nicht alles Aus gehen sondern wieder Eingang 1 einzeln laufen. Analog das selbe mit Ausgang 2.

Theoretisch fällt mir gerade ein das ich für jede Möglichkeit ein RS-Flip-Flop nehmen könnte und jede andere Möglichkeit dieses Ausschaltet, das wären dann 8 denkbare Möglichkeiten pro Ausgang aber irgendwie bin ich gescheitert das ganze in eine Wahrheitstabelle zu übertragen.

Mag sein das ich überarbeitet bin oder einfach meine Erfahrung noch nicht ausreicht jedenfalls wäre es schön wenn mir jemand einen Brauchbaren Tipp geben könnte.

Mir fehlt leider die Zeit mich für dieses Problem in Graph einzuarbeiten.

Vielen Dank für jede Hilfe.


----------



## Thomas_v2.1 (15 April 2017)

Ich würde für "Ausgang" einen Integer vorsehen.

Wenn Ausgang==0 und Taster1 dann Ausgang=1
Wenn Ausgang=1 und Taster1 dann Ausgang=0, wenn Ausgang >1 und Taster1 dann Ausgang=1 usw.

Zuweisung der Ausgänge 1 bis 3 dann mit:
Ausgang1 = Ausgang == 1;
Ausgang2 = Ausgang == 2;
Ausgang3 = Ausgang == 3;


----------



## MarkusSether (15 April 2017)

Oh Nein, ich bin so doof XD ...

So ein ähnliches Konstrukt habe ich bereits geschrieben, als Notlösung. Ich habe mit If-Anweisungen einen Integer mit Zahlen belegt und die Ausgänge je nach Zahl gesetzt. So brauchte man aber einen Zweiten Button zum ausschalten für jeden Taster.
Das ist so einfach und Genial das ich nich drauf gekommen bin -.- ...
Dankeschön das löst gleich noch ein paar mehr Probleme die ich hatte =D ...


----------



## Heinileini (16 August 2017)

@MarkusSether und alle, die ratlos vor einer Aufgabe sitzen und nicht wissen, wie sie sie umsetzen sollen.
Als ich vor einiger Zeit Deinen Beitrag entdeckt habe, habe ich zunächst gedacht, der Markus weiss noch gar nicht so recht, welche Aufgabe er lösen will.
Deine Beschreibung kam mir vor, wie "Kraut und Rüben". Umso mehr habe ich Thomas_v2.1 Auffassungsgabe bewundert, dass er sie offensichtlich verstanden hat und Dir helfen konnte.
Damit war das Thema für mich abgehakt - bis heute, als ich nochmal reingeschaut habe.
Mein Tipp lautet, insbesondere wenn es um BedienOberflächen geht: *zuerst die BedienAnleitung schreiben*!
Im Zeitalter der selbsterklärenden BedienOberflächen und der intuitiven Bedienung klingt das sehr anachronistisch - aber es hilft dabei, die Bedienung einfach und gut erklärbar zu gestalten.
Sobald man darüber stolpert, dass man nicht weiss, wie man die Bedienung verständlich formulieren soll, sollte man das als Zeichen dafür deuten, dass einem u.U. ein viel zu komplizierter Lösungsweg vorschwebt, den man wahrscheinlich auch noch nicht konsequent genug bis ins Detail durchdacht hat. 
Eine einfache Regel wird leicht zu einem Monster, sobald man eine endlose Liste von Ausnahmen hinzufügen muss, damit alles richtig beschrieben ist.
Die Zeit, die man in diesem Stadium der Entwicklung investiert, kann man bei der Umsetzung des Programms oder der Schaltung wieder einsparen, natürlich auch beim Schreiben der endgültigen Bedienanleitung, bei Schulungen und man kann sich auch die meisten verzweifelten Rückfragen der Anwender ersparen.
Mit einer klarem Umschreibung der Aufgabenstellung kann man sich auch mit grosser Aussicht auf positve Rückmeldungen an das SPS-Forum wenden, wenn man noch Hilfe benötigt.
Oft, so weiss ich aus eigener Erfahrung, genügt aber schon der Versuch, etwas zu erklären, dass man sich selbst bewusst wird, wo die Haken und Ösen liegen und anfängt über (bessere) Alternativen nachzudenken.
"... irgendwie bin ich gescheitert das ganze in eine Wahrheitstabelle zu übertragen" hast Du geschrieben - gut, solche Fälle gibt es natürlich. Ich habe diesen Satz so gedeutet, dass Du noch keine halbwegs konkrete Vorstellung hattest, was Du eigentlich umsetzen wolltest. Erst durch Thomas_v2.1 Lösungsvorschlag (und Deine Begeisterung darüber), habe ich verstanden, was Du gemeint hast - glaube ich jedenfalls.
Habe ich Deine Aufgabenstellung richtig verstanden, wenn ich sage:
- wenn Ausgang 2 aktiv ist, darf Ausgang 1 nicht inaktiv werden und
- wenn Ausgang 3 aktiv ist, dürfen Ausgänge 1 und 2 nicht inaktiv werden?
Für diesen Fall stelle ich mir z.B. eine BedienOberfläche mit 2 Tastern und 3 AnzeigeLämpchen (alternativ ein "Balken" oder eine ZiffernAnzeige) vor.
Nämlich: 
ein Taster für "-" (Minus) und einer für "+" (Plus), Plus erhöht die INT-Variable (oder einen Zähler) um 1 und Minus verringert sie(/ihn) um 1.
Die erlaubten Werte sind 0, 1, 2 und 3, d.h. Unterlauf (unter 0) und Überlauf (über 3) müsstest Du verhindern.
Die 3 Lämpchen zeigen 1 zu 1 den Zustand der 3 Ausgänge an.
Ein direktes Wechseln, z.B. von 0 auf 3 oder von 3 auf 1 wäre damit nicht möglich - aber werden diese Möglichkeiten denn wirklich auch gebraucht - oder sorgen sie nur dafür, dass man unnötige Ausnahmen in der Beschreibung formulieren (und im Programm realisieren) muss?
Um von 0 (AUS) auf 3 (alles EIN) zu schalten, muss man 3-mal Plus drücken u.s.w.. Es ist so der eine oder andere zusätzliche Tastendruck erforderlich, aber das kann man viel leichter erklären und die Tastendrücker können es schneller verstehen und sich auch leichter merken. 
Statt der beiden Taster könnte auch ein Drehgeber verwendet werden, der die Vorwärts-/RückwärtsZählimpulse generiert.
Gruss, Heinileini


----------



## Blockmove (17 August 2017)

@Heinilein

Es gibt diverse Hilfsmittel um Aufgaben zu gliedern bzw. zu analysieren.
Ablauf-Diagramme, Nassi Shneiderman, Boolsche Algebra, Wahrheitstabellen, Text, ...
Wichtig ist mehrere davon zu beherrschen und sich die zum Problem passende rauszupicken.
Ganz besonders als Anfänger.

Gruß
Blockmove


----------



## Heinileini (18 August 2017)

@Blockmove
Na klar gibt es diverse Hilfsmittel, um Aufgaben zu gliedern bzw. zu analysieren.
Du sprichst von der Phase, in der eine konkrete Aufgabe vorliegt, so dass man mit dem Gliedern bzw. Analysieren anfangen kann.
Ich meinte hingegen die vorausgehende Phase, in der die Aufgabe erstmal konkretisiert werden sollte.
Im Eifer des Gefechts wird diese Phase anscheinend - nicht nur von Anfängern - gelegentlich mal übersprungen.
Gruss, Heinileini


----------



## Blockmove (18 August 2017)

Heinileini schrieb:


> @Blockmove
> Na klar gibt es diverse Hilfsmittel, um Aufgaben zu gliedern bzw. zu analysieren.
> Du sprichst von der Phase, in der eine konkrete Aufgabe vorliegt, so dass man mit dem Gliedern bzw. Analysieren anfangen kann.
> Ich meinte hingegen die vorausgehende Phase, in der die Aufgabe erstmal konkretisiert werden sollte.
> ...



Nein Heini ich meine die selbe Phase wie du.
Ich nutze bereits in der Entwurfsphase diverse Tools. Das Buzzword hierfür ist wohl Mindmapping.
Ab einer bestimmten Komplexität reicht mir persönlich Bleistift und Schmierzettel nicht mehr aus.

Gruß
Blockmove


----------



## Heinileini (18 August 2017)

@Blockmove
Unsere Meinungen sind anscheinend vieler näher bei einander, als es anfangs schien.
Es kommt also auf die "aufgeräumte" Denkweise an und nicht darauf, welche der Hilfsmittel man wann und wofür einsetzt, um die Gedanken zu skizzieren und zu sortieren - das dürfte u.a. auch eine individuelle Geschmacksache sein.
Eigentlich wollte ich nur den Bediener als zusätzliches Hilfsmittel ins Rampenlicht zu rücken. Einmal, um ihm das Leben nicht unnötig schwer zu machen, aber auch aus dem "egoistischen" Motiv, die Bedienung und Aufgabenstellung in Hinblick auf Einfachheit und Erklärbarkeit frühest möglich zu überdenken, so dass man selbst (oder andere) die vermeidbaren Schnörkel nicht erst viel zu spät entdeckt. 
Immerhin verspreche ich mir auch davon, dass hier im Forum Fragen zu klarer formulierten Aufgabenstellungen gestellt werden. So blieben uns viele der Rückfragen an den TE erspart und auch die Antworten, die am eigentlichen - weil missverstandenen - Thema vorbei gehen.
Gruss, Heinileini


----------



## Blockmove (18 August 2017)

Heinileini schrieb:


> @Blockmove
> Es kommt also auf die "aufgeräumte" Denkweise an und nicht darauf, welche der Hilfsmittel man wann und wofür einsetzt, um die Gedanken zu skizzieren und zu sortieren - das dürfte u.a. auch eine individuelle Geschmacksache sein.



*ACK*

In den guten alten Zeiten mit dem Siemens PG675 blieb einem schlichtweg gar nix Anderes übrig als sich vor dem Programmieren sehr detailiert mit dem Themen zu beschäftigen.
Mußte man gar an einer alten S5-110A eine Änderung machen, dann war jedesmal Eprom schießen angesagt.
Daher gab es damals viel weniger Quick and Dirty. Ok manchmal war's trotzdem nur Dirty 
Zumindest haben wir damals gelernt, Ablaufdiagramme, Weg-Zeit-Diagramme und dergleichen zu erstellen und die Probleme zu analysieren.
Davon profitiere ich heute noch.
Vorallem stelle ich fest, dass sowas heute kaum noch vermittelt wird.
Der erste Weg heute ist Google fragen und dann die evtl. gefundene Lösung per Drag und Drop ins Programm zu ziehen.
Ob die Lösung dann unter allen Rahmbedingungen funktioniert ... Erstmal egal.
Wenn man Glück hat, dann findet derjenige den Fehler vielleicht noch während der Ausprobe.
Wenn nicht kann sich nachher die Instandhaltung damit rumschlagen.
Daher stimme ich dir vollkommen zu Heinilein

Gruß
Blockmove


----------



## Heinileini (18 August 2017)

Blockmove schrieb:


> In den guten alten Zeiten mit dem Siemens PG675 ...


Noch besser waren die noch älteren Zeiten mit dem PG670! Es folgte einem (mehr oder weniger) willig auf seinen 4 (manchmal zu) kleinen Röllchen und an der Baustelle angekommen, wurde der GehäuseDeckel abgenommen und ward fortan der Sitz(arbeits)platz. Passenden SchaltschrankSchlüssel aus dem immer-dabei-Sammelsurium gepickt, Steckdose gesucht, AS511 in die PLC geschoben und schon war man startklar.
Konzentriertes Arbeiten ohne Ende ... keine Ablenkungen durch Google ... gelegentlicher, ungeduldiger SeitenBlick auf den Fortschritt des EPROM-Löschgeräts (nicht nur bei S5-110A, auch bei 130W(A/B), 150K/S, 155U!) ... 
Gruss, Heinileini


----------



## Blockmove (19 August 2017)

Heinileini schrieb:


> Noch besser waren die noch älteren Zeiten mit dem PG670! Es folgte einem (mehr oder weniger) willig auf seinen 4 (manchmal zu) kleinen Röllchen und an der Baustelle angekommen, wurde der GehäuseDeckel abgenommen und ward fortan der Sitz(arbeits)platz. Passenden SchaltschrankSchlüssel aus dem immer-dabei-Sammelsurium gepickt, Steckdose gesucht, AS511 in die PLC geschoben und schon war man startklar.
> Konzentriertes Arbeiten ohne Ende ... keine Ablenkungen durch Google ... gelegentlicher, ungeduldiger SeitenBlick auf den Fortschritt des EPROM-Löschgeräts (nicht nur bei S5-110A, auch bei 130W(A/B), 150K/S, 155U!) ...
> Gruss, Heinileini



Stimmt, PG670 war klasse. Mir ist seither nie mehr eine bessere Tastatur untergekommen.
Allerdings bei Treppen waren die knapp 30kg doch hinderlich.
Und in der Zeit waren auch kiloschwere Ausdrucke auf Endlospapier normal. Meist den Querverweis in einem eigenen Hefter um "schnell" Zugriff zu haben.
"Gehe zu Verwendungsstelle" gab es erst später mit KomDok als Optionspaket. 

Auf Grund der Einschränkungen der Software war man eben wirklich gezwungen sich vorher Gedanken zu machen.
Wir hatten damals selbsterstellte Vordrucke für Schrittketten, E/A/M-Belegung, Programmablauf als Hilfsmittel.
Dafür gibts dann heute Excel, Visio, Dia, FreeMind, ...
Nur nutzen muss man es

Gruß
Blockmove


----------



## Heinileini (19 August 2017)

Blockmove schrieb:


> Allerdings bei Treppen waren die knapp 30kg doch hinderlich.


Darum hatte man einen gewichtigen Grund mehr, zuerst das Gehirn einzuschalten und scheute keinen noch so langen Umweg zum Aufzug.
Vom PG wurde eine DruckAusgabe des kompletten AWL-Programms mit der niedrigsten verfügbaren BaudRate via V24-Konverter auf den Pet-Nachfolger übertragen, der den InformationsSchwall Byte für Byte aufgesogen und auf eine 1MB(!)-5,25"-Diskette gespeichert hat. Auf einer zweiten 1MB(!)-5,25"-Diskette befand sich die ZuordnungsListe. Nach der Übertragung wurde dann ausgedruckt. Start zum Feierabend und - wenn man Glück hatte - war der Ausdruck am nächsten Morgen schon fast fertig.
Das DruckProgramm hat das AWL-Programm mitgelesen und an Stellen, wo es L DD T MD, L DW T MW, L DL T MB oder L DR T MB fand, die ZuordnungsTexte der Daten-DD, -DW, -DL, -DR und der DatenBits für die temporären Merker übernommen. Das war sooo schön! Man brauchte keine Kommentare zu tippen - der Commodore hat automatisch mit den Zuordnungen das AWL-Programm lesbar gemacht. 
Die ersten Zeilen eines jeden FB enthielten das Datum der letzten Änderung und den Autor in Form von "überflüssigen" SprungMarken.
Der Commodore hatte übrigens ganze 32 KB RAM. Davon gingen weg je 1 Puffer für 2 externe FDDs und das, was das BetriebsSystem sonst noch für sich beanspruchte. Das eigene Basic-Programm und seine Variablen mussten sich den spärlichen Rest teilen. Das und die Geschwindigkeit, mit der die Bytes vom PG angeliefert wurden (Handshake war nicht möglich), waren die Herausforderungen, an denen mein Vorkämpfer gescheitert war. 
Genug nostalgiert und zurück zum Thread. Habe da mal etwas AWL-mäßiges vorbereitet (in Excel):

1. Variante mit 3 Tasten: "1", "2" & "3":


```
[TABLE="width: 194"]
[TR]
[TD]      U   Grundstellung[/TD]
[/TR]
[TR]
[TD]      SPB =CLR[/TD]
[/TR]
[TR]
[TD]      L   AusgNr[/TD]
[/TR]
[TR]
[TD]      L   1[/TD]
[/TR]
[TR]
[TD]      U   Tast1[/TD]
[/TR]
[TR]
[TD]      FP  FM-Tast1[/TD]
[/TR]
[TR]
[TD]      SPB =COMP[/TD]
[/TR]
[TR]
[TD]      INC 1[/TD]
[/TR]
[TR]
[TD]      U   Tast2[/TD]
[/TR]
[TR]
[TD]      FP  FM-Tast2[/TD]
[/TR]
[TR]
[TD]      SPB =COMP[/TD]
[/TR]
[TR]
[TD]      INC 1[/TD]
[/TR]
[TR]
[TD]      U   Tast3[/TD]
[/TR]
[TR]
[TD]      FP  FM-Tast3[/TD]
[/TR]
[TR]
[TD]      SPB =COMP[/TD]
[/TR]
[TR]
[TD]      SPA =OUTP[/TD]
[/TR]
[TR]
[TD]COMP  ><I[/TD]
[/TR]
[TR]
[TD]      SPB =STOR[/TD]
[/TR]
[TR]
[TD]CLR   L   0[/TD]
[/TR]
[TR]
[TD]STOR  T   AusgNr[/TD]
[/TR]
[TR]
[TD]OUTP  L   AusgNr[/TD]
[/TR]
[TR]
[TD]      L   1[/TD]
[/TR]
[TR]
[TD]      >=I[/TD]
[/TR]
[TR]
[TD]      =   Ausg1[/TD]
[/TR]
[TR]
[TD]      INC 1[/TD]
[/TR]
[TR]
[TD]      >=I[/TD]
[/TR]
[TR]
[TD]      =   Ausg2[/TD]
[/TR]
[TR]
[TD]      INC 1[/TD]
[/TR]
[TR]
[TD]      >=I[/TD]
[/TR]
[TR]
[TD]      =   Ausg3[/TD]
[/TR]
[/TABLE]
```

2. Variante mit 2 Tasten: "Plus" & "Minus":


```
[TABLE="width: 194"]
[TR]
[TD]      L   0[/TD]
[/TR]
[TR]
[TD]      U   Grundstellung[/TD]
[/TR]
[TR]
[TD]      SPB =STOR[/TD]
[/TR]
[TR]
[TD]      U   TastMinus[/TD]
[/TR]
[TR]
[TD]      FP  FM-TastMinus[/TD]
[/TR]
[TR]
[TD]      SPB =MINU[/TD]
[/TR]
[TR]
[TD]      U   TastPlus[/TD]
[/TR]
[TR]
[TD]      FP  FM-TastPlus[/TD]
[/TR]
[TR]
[TD]      SPB =PLUS[/TD]
[/TR]
[TR]
[TD]      SPA =OUTP[/TD]
[/TR]
[TR]
[TD]MINU  L   AusgNr[/TD]
[/TR]
[TR]
[TD]      >=I[/TD]
[/TR]
[TR]
[TD]      SPB =OUTP[/TD]
[/TR]
[TR]
[TD]      DEC 1[/TD]
[/TR]
[TR]
[TD]      SPA =STOR[/TD]
[/TR]
[TR]
[TD]PLUS  L   3[/TD]
[/TR]
[TR]
[TD]      L   AusgNr[/TD]
[/TR]
[TR]
[TD]      <=I[/TD]
[/TR]
[TR]
[TD]      SPB =OUTP[/TD]
[/TR]
[TR]
[TD]      INC 1[/TD]
[/TR]
[TR]
[TD]STOR  T   AusgNr[/TD]
[/TR]
[TR]
[TD]OUTP  L   AusgNr[/TD]
[/TR]
[TR]
[TD]      L   1[/TD]
[/TR]
[TR]
[TD]      >=I[/TD]
[/TR]
[TR]
[TD]      =   Ausg1[/TD]
[/TR]
[TR]
[TD]      INC 1[/TD]
[/TR]
[TR]
[TD]      >=I[/TD]
[/TR]
[TR]
[TD]      =   Ausg2[/TD]
[/TR]
[TR]
[TD]      INC 1[/TD]
[/TR]
[TR]
[TD]      >=I[/TD]
[/TR]
[TR]
[TD]      =   Ausg3[/TD]
[/TR]
[/TABLE]
```

AusgNr : INT
alle anderen Variablen sind BOOL.
FlankenMerker ("FM-...") müssen natürlich im nächsten Zyklus unverändert verfügbar sein.
Gruss, Heinileini

PS: dieser Editor lässt sich anscheinend durch den Import aus Excel irritieren!?


----------

