TIA Tastschalter/Stromstoßschalter FUP im Tia-Portal

Rainör

Member
Beiträge
20
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich habe eine SIMATIC S7-1200 in die ich programmieren soll.

Der Punkt an dem es gerade scheitert ist, dass ich über einen Taster ein Signal hineingeben soll, der die Anlage startet, aber auch auch stoppt. Ich möchte also bei ersten Betätigen eine 1 haben und wenn ich den Taster ein zweites mal betätige eine 0. Dann beim dritten Betätigen wieder eine 1 usw. Letzentlich wie eine Stromstoßschaltung. Diese Funktion brauche ich, um meine Anlage im Automatikbetrieb mit dem selben Taster Starten und Stoppen zu können, ohne, dass der Ablauf wieder neu gestartet wird.

Versuche ich es mit einem SR-Baustein zu realisieren, komme ich immer an den Punkt, bei dem der Ausgang zwar sehr kurz eine 1 ausgibt, aber danach sofort wieder auf 0 springt.

Versuche ich es mit einer positiven Flanke, gibt mir der Ausgang Q nie eine 1 heraus. Da ich noch recht neu im Thema bin, habe ich nicht verstanden wieso dies nicht funktioniert. Leider verfolgt meine Lehrfirma ein Selbstlernkonzept, sodass mir das Programm TIA-Portal nur sehr bedürftig gezeigt worden ist. Ich muss das Programm recht schnell lösen, um weiterzukommen.

Ich hoffe, dass ihr mir helfen könnt.
Liebe Grüße
 
ToggleBit auf ein XOR geben.
Vom TastenSignal eine Flanke bilden (positiv oder negativ) und auf den anderen Eingang der XOR-Verknüpfung geben.
Den Ausgang der XOR-Verknüpfung auf das ToggleBit geben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke, dir. Werde ich auf jeden Fall ausprobieren.

Bis jetzt hatte ich es noch nicht geschafft den Flankenbaustein so zu besetzten, dass er mir bei Q auch das entsprechende Signal rausgibt.
Ich hatte bei positiver Flanke immer nur im Speicher eine 1, wenn der Taster gedrückt war, jedoch nicht bei Q.
Wie muss ich den belegen, sodass es funktioniert?
 
Danke, dir. Werde ich auf jeden Fall ausprobieren.

Bis jetzt hatte ich es noch nicht geschafft den Flankenbaustein so zu besetzten, dass er mir bei Q auch das entsprechende Signal rausgibt.
Ich hatte bei positiver Flanke immer nur im Speicher eine 1, wenn der Taster gedrückt war, jedoch nicht bei Q.
Wie muss ich den belegen, sodass es funktioniert?
Evtl. siehtst du das beim Beobachten nur nicht! Der Ausgang Q ist bei einer Flanke nur einen Zyklus lang das. I.d.R. sieht man das beim Beobachten nicht.
Du kannst den Ausgang der Flanke mal auf einen Zähler legen oder mit den Ausgang eine Int hochzählen, dann wirst du die Wirkung sehen. Mit jeder Flanke erhöht sich der Zähler um 1.
 
Bis jetzt hatte ich es noch nicht geschafft den Flankenbaustein so zu besetzten, dass er mir bei Q auch das entsprechende Signal rausgibt.
Was wäre Deiner Meinung nach das "entsprechende Signal bei Q"? Der FlankenBaustein gibt einen Impuls aus, der nur einen einzigen SPS-Zyklus lang auf TRUE geht.
Um funktionieren zu können, muss allerdings das "GedächtnisBit" des FlankenBausteins statisch (keinesfalls temporär!) sein und es darf nicht anderweitig im Programm verwendet (= "verfälscht") werden.
Falls das Verständnis der Funktionsweise eines FlankenBausteins noch Probleme bereitet, rate ich dazu, selbst eine FlankenErkennung mittels einer UND-Verknüpfung und der Negation eines der beiden Eingänge zu bauen.
Der andere Eingang des UND wird mit dem "GedächtnisBit" gefüttert.
Danach muss noch der Eingang, dessen Flanke erkannt werden soll, auf das "GedächtnisBit" gegeben werden.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für eure Hilfe! Ich habe zwar kein Toggle-Baustein gefunden, aber das Problem mit euren Erklärungen doch gelöst bekommen. Ich habe jetzt ein XOR-Baustein genommen, auf den einen Eingang die Positive Flanke von meinen Taster gelegt und auf den anderen Eingang den Ausgang der XOR-Bausteins gesetzt.

Nur das mit dem Zyklus ist noch nicht ganz klar. Wahrscheinlich wird es so sein, dass wenn sich ein Eingangssignal (In meiner Fall der Taster) ändert, der Zyklus wieder von vorne beginnt und das Programm von oben nach unten abgearbeitet wird. Dann wäre auch klar warum ich den Ausgang nicht sehen konnte bei den Mikrosekunden, die so ein Zyklas dauert.
 
Hier gibt's auch extra 'ne spezielle FAQ zu dieser viel gestellten Frage:
 
Nur das mit dem Zyklus ist noch nicht ganz klar. Wahrscheinlich wird es so sein, dass wenn sich ein Eingangssignal (In meiner Fall der Taster) ändert, der Zyklus wieder von vorne beginnt und das Programm von oben nach unten abgearbeitet wird. Dann wäre auch klar warum ich den Ausgang nicht sehen konnte bei den Mikrosekunden, die so ein Zyklas dauert.
Ein SPS-Programm wird immer zyklisch von oben bis unten abgearbeitet, und dann wieder von vorn, unabhängig davon ob sich irgendwas ändert. Und so ein Zyklus dauert nicht Mikrosekunden sondern einige Millisekunden, typisch in der Größenordnung 5 bis 100 ms.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, das zyklische Programm läuft in einer "EndlosSchleife".
Jedesmal, nach dem das Programm komplett durchgelaufen ist, wird das ProzessAbbild der Ausgänge ("PAA") auf die AusgabeBaugruppen ausgegeben und die Zustände der Eingänge der EingabeBaugruppen werden in das ProzessAbblid der Eingänge ("PAE") kopiert.
Dann beginnt entweder sofort oder nach einer kleinen WarteZeit der nächste Zyklus, in dem obiges wiederholt wird u.s.w..
Ob und an welcher Stelle des Zyklus eine kleine WarteZeit eingefügt wird, hängt von der SPS ab.
In den AnfangsZeiten der SPS hat man keine WarteZeiten eingefügt. Man war froh, wenn ein Zyklus möglichst schnell abgearbeitet war und hat den nächsten Zyklus sobald wie möglich gestartet.
Überwacht wurde und wird immer noch, dass ein vorgegebener Wert für die ZyklusZeit nicht überschritten wird, weil zu lange ZyklusZeiten natürlich die ReaktionsGeschwindigkeit der SPS zu sehr verlangsamen oder sogar einen ProgrammierFehler (z.B. EndlosSchleife) entlarven.
Heutzutage mit schnellen CPUs hat man eher das Problem, dass ein Zyklus zu schnell fertig werden kann und damit die ReaktionsGeschwindigkeit angeschlossener Geräte nicht schritthalten kann.
Deshalb gibt es oft eine Vorgabe, wie lang ein Zyklus mindestens dauern muss.
Wird ein Zyklus zu früh fertig, so wir dementsprechend eine WarteZeit eingefügt.
Jenachdem, wie ein Programm aufgebaut ist, kann z.B. durch das Überspringen von Befehlen die tatsächlich für die Abarbeitung benötigte Zeit schwanken.
 
Nochmal danke für eure ausführlichlichen Erklärungen. Ich habe gestern das Programm noch vollständig fertig schreiben und simulieren können und kann es somit am Montag an meiner Anlage testen. :D
@hucki Ich hatte tatsächlich auch ähnlichen Beiträge vorher gefunden, aber da ich den Flankenbaustein nicht richtig verstanden hatte, hats bei mir in der Simulation nicht geklappt bzw. ist nicht das passiert, was ich erwartet hatte, weswegen ich nicht weiter gemacht habe.
 
Das ist doch kinderleicht zu lösen.
Nimm einen SR-Baustein. Am Ausgang setzt Du das Bit „Anlage start“.
Am Setz-Eingang kommt eine UND-Verknüpfung. Auf diese kommt das Bit vom Taster und an zweite Stelle das negierte Bit von „Anlage start“.
Beim Rücksetzeingang kommt auch eine UND-Verknüpfung. Dort kommt ebenfalls das Bit für den Taster und das Bit für „Anlage start“.

Fertig
 
@KarlMeier Das funktioniert so leider nicht. Wird der Taster betätigt, wird der Ausgang des SR-Bausteins auf 1 gesetzt. Wird der Taster nun jedoch länger betätigt als die Abarbeitung des Programms dauert, führt das dazu, dass der SR-Baustein schnell wieder zurückgesetzt wird. Grund hierfür ist, dass sobald der Ausgang eine 1 ausgibt und der Taster noch betätigt ist die beiden Bedigungen für die UND-Funktion vor dem Rücksetzeingang erfüllt sind.
Der Taster wird also betätigt und der Ausgang bleibt i.d.R. auf 0, weil die Betätigung zu lange gedauert hat. Mit einer positiven Flanke müsste es jedoch ebenfalls funktionieren.
 
@KarlMeier Das funktioniert so leider nicht. Wird der Taster betätigt, wird der Ausgang des SR-Bausteins auf 1 gesetzt. Wird der Taster nun jedoch länger betätigt als die Abarbeitung des Programms dauert, führt das dazu, dass der SR-Baustein schnell wieder zurückgesetzt wird. Grund hierfür ist, dass sobald der Ausgang eine 1 ausgibt und der Taster noch betätigt ist die beiden Bedigungen für die UND-Funktion vor dem Rücksetzeingang erfüllt sind.
Der Taster wird also betätigt und der Ausgang bleibt i.d.R. auf 0, weil die Betätigung zu lange gedauert hat. Mit einer positiven Flanke müsste es jedoch ebenfalls funktionieren.
Das ist richtig!
Ich hab es nicht dazu geschrieben, weil ich dachte es wäre selbstverständlich. Aber ja natürlich muss die positive Flanke des Tasters abgefragt werden.
 
"Kinderleicht" ist der Standard-Stromstoßschalter, wie er in der FAQ beschrieben ist, auf die auch hucki in #7 schon hingewiesen hat.

Harald
Mag sein, dass „einfaches“ Abschreiben noch einfacher ist. Dann lernt man aber auch nichts.
Die von mir genannte Lösung finde ich außerdem wesentlich verständlicher und logischer. Auch angelehnt an die Funktionsweise der Stromstoßschalter im Elektrobereich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mag sein, dass „einfaches“ Abschreiben noch einfacher ist. Dann lernt man aber auch nichts.
Klar kann jeder sein eigenes Dreirad konstruieren, wenn er nicht gelernt hat, daß auch schon materialsparende Zweiräder erfunden wurden. ;)

Die von mir genannte Lösung finde ich außerdem wesentlich verständlicher und logischer.
Für manche Programmierer sind alle Alternativlösungen zu XOR "wesentlich verständlicher". Das liegt aber nicht an den Alternativlösungen, sondern daran daß der Programmierer eine Wissenslücke hat, weil er XOR nicht kennt oder nicht versteht.

Auch angelehnt an die Funktionsweise der Stromstoßschalter im Elektrobereich.
Stromstoßschalter im Elektrobereich arbeiten nicht mit Setzen/Rücksetzen. Sie haben nicht 2 oder 3 Spulen, sondern nur eine.

Für Stromstoßschalter mit S/R in FUP
- braucht man fast dreimal soviel Programm-/Arbeitsspeicher wie für die XOR-Variante
- braucht man 3 Speicherbits und ein temporäres Hilfsbit (oder 2 Speicherbits und 2 Hilfsbits), die XOR-Variante braucht nur 2 Speicherbits
- braucht man länger zum Eingeben des Programmcodes und es gibt mehr Möglichkeiten für Tippfehler, weil doppelt so viele Operanden/Verknüpfungen benötigt werden, die XOR-Variante braucht nur 4 Operanden in 3 Operationen
- braucht man (bei fremden Programmen) länger, um den Programmcode des Netzwerks zu lesen und zu verstehen, als bei der XOR-Variante
- braucht der compilierte Code Sprünge, für die XOR-Variante nicht (Stichwort: branchless programming)

Meine Erfahrung: Programme, die in S/R-Denkweise programmiert sind, sind größer und enthalten mehr logische Fehler und unnötige Verknüpfungen, als Programme die mit "="-Zuweisungen programmiert sind.

Harald
 
Zurück
Oben