AWL - Anweisungsliste - Bedingte Sprünge zum Speichern eines Befehls

Jens321

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Foren-Gemeinde!

Ich studiere Maschinenbau und bin derzeit im 5. Semester.

Dies ist mein erster Eintrag.
Ich habe bereits die Suchfunktion benutzt, allerdings bin ich
zu keinem genauen Treffer beziehungsweise einer Lösung meines
Problems gekommen.

Bevor ich dies weiter ausdetailliere, möchte ich ausdrücklich erwähnen,
dass dies nicht um das Lösen irgendwelcher Hausaufgaben geht.
Ich habe lediglich ein Problem & mir fehlt der genaue Ansatz. Bis jetzt
war die Prozessautomatisierung (das dztg. Modul) immer ein Gebiet,
das mir leicht von der Hand gegangen ist.

Es geht um folgendes:

Während des o.g. Moduls finden eine Praktika (Versuche) statt.
Wir können diese zu Hause vorbereiten und mit ins Praktikum nehmen.
Des ergibt eben einfach einen zeitlichen Vorteil. In den Praktia arbeiten
wir mit dem GX IEC Simulator.
Ich hoffe es macht euch damit keine allzu großen Umstände... ;-)

Die Versuchsbeschreibung lautet:

"Nachgebildet wird der Antrieb einer Flächenschleifmaschine.
Ist das Signal Ventil_links logisch 1 und das Signal Ventil_rechts logisch 0, fährt der Schlitten
nach links. Ist das Signal Ventil_links logisch 0 und das Signal Ventil_rechts logisch 1, fährt
der Schlitten nach rechts. Sind beide Signale logisch 0, so bleibt der Schlitten stehen. Es ist
unzulässig, beide Signale gleichzeitig auf logisch 1 zu setzen.
Die Endschalter Endschalter_links bzw. Endschalter_rechts geben ein logisches 1-Signal,
wenn sich der Schlitten am jeweiligen Anschlag befindet.
Mit den Tastern Start bzw. Stop wird der Dauerzyklus gestartet bzw. beendet."


Die Aufgabenstellung lautet:

"(...)
b) Erstellen Sie die Steuerung für das permanente Hin- und Herbewegen des Arbeitstisches
in der Programmiersprache Anweisungsliste.
Beim Drücken des Tasters Start fährt der Tisch immer von der linken Endlage nach
rechts. Er führt den Arbeitszyklus bis zum Betätigungen des Tasters Stop aus. Dann
fährt der Tisch noch bis in die linke Endlage zurück.
Beachten Sie dabei, dass die Betätigung des Tasters Start gespeichert werden muss.
Verwenden Sie dazu ein Flipflop.
c) Verwenden Sie statt eines Flipflops die AWL-Befehle S bzw. R zum Speichern des
Fahrbefehls.
d) Verwenden Sie statt eines Flipflops bedingte Sprünge zum Speichern des Fahrbefehls.(...)"



Die Vorarbeit, sowie die Aufgaben b) & c) sind mir wunderbar von der Hand gegangen.
Allerdings komme ich im Teil d) überhaupt nicht vorran. Ich habe bereits einige gedankliche
Ansätze ausprobiert jedoch immer mit dem Ausgang, dass ich in eine permanente Schleife
komme und die SPS bzw der Simulator einen Fehler anzeigen.

Unter dem Teil d) verstehe ich nun die Steuerung aus c) zu übernehmen und eben mit den bedingten Sprüngen anzupassen.
Wie ich so einen Sprung dort hineinsetze ist mir bewusst. Nur wo genau ich wie springen muss bekomme ich nicht in den Kopf.

Wie bekomme ich es also hin, mir den Fahrbefehl mittels eines bedinten Sprungs zu merken?

Also hiermit bitte ich euch ganz ganz freundlich um einige gedankliche Ansätze zum lösen meines Problems. :)


Im Anhang findet ihr einen Screenshot mit meinem bisherigem Programm (c)und den Variablenzuweisungen.
 

Anhänge

  • V6d.JPG
    V6d.JPG
    141,3 KB · Aufrufe: 42
Also ich würde aus dem Bauch heraus sagen das es eine State machine sein soll. Also das deine Merker keine Bits die gesetzt werden sind, sondern du Zahlen lädst die dann Aktionen auslösen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Danke für deine schnelle Antwort.

Da bin ich mir nicht so sicher. Deine Antwort logisch und macht auch Sinn - nur der entsprechende Stoff, also Zahlen jenseits der 1 & 0 wurden bei und noch nicht bearbeitet.

Deswegen bin ich mir ziemlich sicher, dass ich das Problem ohne die Zahlen angehen muss.

Dennoch vielen dank.
 
zu Punkt d): Wie du ja bereits weist verändern die Anweisung S(Setze) und R(Rücksetze) den Signalzustand des entsprechenden Speicherbits nur wenn zuvor eine Abfrage mit positivem Verknüpfungsergebnis war. Ist die vorangegangene Verknüpfung negativ, passiert gar nichts.

Wenn du das oben beschriebene verhalten im Kopf ein wenig weiter zerlegst ergibt sich folgendes:
Wenn Verknüpfung negativ tue nichts (springe/führe den nächste Code nicht aus) und verändere das Signal nicht.
Wenn Verknüpfung positiv tue etwas (springe nicht/ führe den nächste Code aus) und verändere das Signal.
Zum verändern des Signals kannst du dann ein S(Setze), R(Rücksetze) oder sogar eine =(Zuweisung) verwenden.

Grundsätzlich scheinst du die restlichen Anforderungen zu erfüllen. Ein paar Dinge solltest du eventuell noch berücksichtigen...

a) Würde es im Betrieb zu einem Spannungsausfall/SPS-Stopp (einem unerwartetem Stopp) welcher Art auch immer kommen, kann dein Tisch in der Mitte stehen bleiben, sofern deine Wegbefehle nicht remanent gespeichert werden, kann dein Tisch nicht mehr starten...
Hier wäre es sowieso empfehlenswert wenn der Tisch im Falle eines Starts ohne anliegende Endlagen in eine definierte Richtung fährt.
b) Was passiert bei einem Endschalterdefekt (Endschalter schaltet nicht)?
 
Zuletzt bearbeitet:
Die Aussagen sind definitiv richtig.
Zu deinen Hinweisen:
a) Der Fall ist ausgeschlossen, da es für diesen Versuch nicht berücksichtigt wird. Allerdings habe ich eine POE zum Initialisieren der Anlage programmiert.
b) Dieserfall ist ebenfalls komplett für den Versuch ausgeschlossen.

Wieder zurück zu meinem Problem...
Ich hänge hier schon einen weiteren Tag an diesem Problem. Ich habe den ganzen Tag am Rechner gesessen und versucht zu programmieren. Allerdings komme ich auf einen grünen Zweig...

Wie also bekomme ich es hin, diesen besagten Fahrbefehl mit einem bedigten Sprung zu speichern?
Falls noch weitere Background-Infos fehlen, so meldet euch bitte...

Vielen Dank nochmal für die Ansätze bisher...
Ich habe irgendwie das gefühl ich sehe den Wald vor lauter Bäumen nicht.

:confused::confused::confused:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Aussagen sind definitiv richtig.
a) Der Fall ist ausgeschlossen, da es für diesen Versuch nicht berücksichtigt wird...
b) Dieserfall ist ebenfalls komplett für den Versuch ausgeschlossen...
War ja auch nur als Tipp für die Realität außerhalb der Versuchsgrenzen gedacht. ;)

Ich habe irgendwie das gefühl ich sehe den Wald vor lauter Bäumen nicht.
Das Gefühl hab ich auch... :ROFLMAO:

Ich werde meine Ausführung aus dem Vor-Post nochmal verfeinern...
Wenn du das oben beschriebene verhalten im Kopf ein wenig weiter zerlegst ergibt sich folgendes:
Wenn Verknüpfung negativ tue nichts (springe/führe den nächste Code nicht aus) und verändere das Signal nicht.
Wenn Verknüpfung positiv tue etwas (springe nicht/ führe den nächste Code aus) und verändere das Signal.
Zum verändern des Signals kannst du dann ein S(Setze), R(Rücksetze) oder sogar eine =(Zuweisung) verwenden.
Code:
1.) Signalabfrage
2.) Wenn Verknüpfung negativ tue nichts (springe)
3.) Beeinflusse Bit (Fahrbefehl)
4.) Sprungmarke
5.) Signalabfrage (das andere)
6.) Wenn Verknüpfung negativ tue nichts (springe)
7.) Beeinflusse Bit (Fahrbefehl) in die anderer Richtung
8.) Sprungmarke
So, wenn ich's noch weiter vereinfache wird AWL-Code draus. Damit müsstest du das Bäumchen im Wald finden. :ROFLMAO:
 
Hi,

ein ganz fettes Dankeschön erstmal für die schnelle Antwort.

Es mag vielleicht an der Uhrzeit liegen, aber ich verstehe nun aus deiner Antwort nur, dass ich zwar bedingte Sprünge verwende, aber dennoch den Fahrbefehl (FB) setzen (S) bzw zurücksetzen (R) muss.

Mir ist dieser Satz bei d) ein Dorn im Auge, laut dem ich das Speichern eben nicht durch S bzw. R erfüllen soll, sondern nur allein durch den bedingten Sprung.

Wenn ich das nun falsch verstehe siehe dies bitte als nichtig an :ROFLMAO:...

Dann werde ich mir die ganze Sache morgen früh nochmal nach einer gemütlichen Tasse Kaffe zur Gemüte führen.

Mittlerweile denke ich nämlich schon nur noch in einsen und nullen :p.

In diesem Sinne erstmal eine gute Nacht.

Viele Grüße.
 
Na dann sind wir ja schon einen Schritt weiter.

sondern nur allein durch den bedingten Sprung.
Wenn ich das nun falsch verstehe siehe dies bitte als nichtig an :ROFLMAO:...
Allein durch einen Sprung ist nicht möglich, du brauchst irgendwelche Funktionen die den Zustand deines Bits manipulieren.


Wie ich oben beschrieben habe kannst du allerdings auch eine normale Zuweisung verwenden.
Du könntest zum Beispiel innerhalb des übersprungenen Bereiches folgendes machen.
Code:
1.) Sprungbefehl
2.) UND Logisch 1 (Ein Abfrage auf ein Signal das immer wahr ist)
3.) = Fahrbefehl (Zuweisung)
4.) Sprungmarke
Da die Zuweisung nur dann ausgeführt wird wenn der Code-Teil nicht übersprungen wird, erreichst du das was du willst.
Das "rücksetzen" (Auf 0-Zuweisen) des Bits funktioniert dann analog dazu.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Jens,
du musst in den den Programmteilen nach den Sprungmarken kein R oder S verwenden.
Eine einfache Zuweisung OUT reicht.
Du musst bedenken das eine übersprungene Anweisung nicht ausgeführt wird!
Ohne die Sprünge würde sowas nicht klappen
TerraCharly

Beispiel:
Wenn nicht Signal Links und nicht Signal Rechts dann Sprung 0
Wenn nicht Signal Links dann Sprung 1
OUT Rechts ein
OUT Links aus
Ziel 1
Wenn nicht Signal Rechts dann Sprung 2
OUT Rechts aus
OUT Links ein
Ziel 2
OUT Links aus
OUT Rechts aus
Ziel 0
 
Du könntest zum Beispiel innerhalb des übersprungenen Bereiches folgendes machen.
Code:
1.) Sprungbefehl
2.) UND Logisch 1 (Ein Abfrage auf ein Signal das immer wahr ist)
3.) = Fahrbefehl (Zuweisung)
4.) Sprungmarke
Da die Zuweisung nur dann ausgeführt wird wenn der Code-Teil nicht übersprungen wird, erreichst du das was du willst.
Das "rücksetzen" (Auf 0-Zuweisen) des Bits funktioniert dann analog dazu.
Und m.M.n. sollte man dann die Verantwortlichen für diesen Teil der Aufgabenstellung auch noch darauf hinweisen, das es sich hierbei um einen wirklich bescheidenen Programmierstil handelt, den man besser nicht auch noch durch gezielte Fragen danach fördern sollte.


Zuweisungen sollten eine solche Logik enthalten, dass sie auch in jedem Zyklus abgearbeitet werden können.
 
Zuletzt bearbeitet:
Hallo zusammen!

Danke für die vielen Ansätze.
Ich bin auch zu einem einigermaßen sinnvollem Ergebnis gekommen.

Anbei einmal ein Screen vom Code.

Das läuft auch alles. Durch "Start" kann ich den Fahrbefehl starten.
Selbst zyklisch läuft es.

Nur ich komme nicht mehr raus. Denn letztendlich drücke ich ja Stop um rauszukommen.
Aber nach der Betätigung von Stop muss der Zyklus noch beendet werden.

Sagen wir es so, ich würde schon raus kommen, nur mir fehlt der Weg dahin.
Ist meine Umsetzung vielleicht falsch?

Ps. Es ist wirklich eine bescheidene Art :D


Viele Grüße
 

Anhänge

  • V6d2.JPG
    V6d2.JPG
    35,3 KB · Aufrufe: 13
Yeha! Problem gelöst!

Wie oben beschrieben, der Code funktioniert im Simulator. Das Problem war nur, dass es zwar funktionierte, den Schlitten in den Zyklus zu bringen - Aber es war mir nicht möglich, mit dem Befehl (Taster) Stop der Anlage zu signalisieren, den letzten Zyklus zu fahren und anschließend stehen zu bleiben.

Aber laut Aufgabenstellung sollte nur der Fahrbefehl mit bedingten Sprüngen gespeichert werden. So habe ich einfach einen "Stopmerker" anlgelegt ... Dieser merkt sich, dass Stop betätigt wurde und die Anlage fährt den Zyklus zu ende.

Viel Grüße & danke für eure Hilfe!

Wenn Bedarf ist, poste ich auch gerne den fertigen Code.

Viele Grüße ! :)
 
Zurück
Oben