Step 7 Ein Problemchen beim Planen einer Schrittkette

Zuviel Werbung?
-> Hier kostenlos registrieren
So wird das noch nicht klappen.
Denk auch noch mal über das ELSEIF nach.

Das Zurücksetzen nach Step 0 braucht eine eigene IF-Anweisung um in allen Fällen zu funktionieren.

Eine Flankenauswertung in SCL macht man auch noch etwas anders.
Ich gebe mal noch nichts vor. Vielleicht willst Du ja selbst noch etwas üben/suchen...

Mein Ansatz bezog sich darauf, wenn man die Schrittkette anhalten möchte. Ich denke das hat Du überlesen.
 
Zuletzt bearbeitet:
Nun, es gibt einen Schalter für Handbetrieb und wenn dieser aktiviert wird, dann können die Zylinder über das Display einzeln gefahren werden...

... und was ist, wenn deine Schrittkette, die ggf. gerade noch läuft etwas anderes befiehlt - oder noch besser was ist, wenn die noch laufende Schrittkette durch die Handbedienung in die Lage versetzt wird etwas ganz Neues zu tun ?

Du solltest nicht zu stark theoretisieren sondern m.E. durch "echtes Ausprobieren" dich da rantasten.
Vielleicht noch einmal, wie ich es mache (damit wollte ich aber ursprünglich nicht kommen, da es deinen Ansatz nicht unbedingt vereinfacht) :
Am Anfang eines Bausteins kann die Schrittkette durch unterschiedlich Bedingungen zurück-gesetzt (also in den Initailschritt kommen) werden. Das ist IMMER das Abschalten (also z.B. Not-Aus oder Sicherheitstüren auf), es ist meißtens auch der Wechsel von Automatik auf Handbetrieb (als Flanke) oder aber auch der Befehl auf Grundstellung zu fahren (auch Flanke). Wie das im Einzelnen gebildet wird lasse ich mal aussen vor. Ich denke aber mal, dass das nicht nur bei mir so ist.

Was ich damit sagen möchte ist, dass du dir Gedanken über die grundsätzliche Rahmen-Funktionalität machen solltest.
In jedem Fall kannst su es aber auch sich schrittweise entwickeln lassen.
Arbeitest du an einem Konzept für ein existentes System ? Gibt es so ein Konzept in deiner Firma in dieser Form bislang noch nicht ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, ihr habt es geschafft... ich gehe zurück an den Kochtopf!

@tigerente:

Eine Flanke kann in SCL auch anders gemacht werden; aber bisher hat es auch auf meine Art eigentlich immer funktioniert. Was ist daran falsch?
Eine Alternative, eventuell?

Code:
Pulse_pos :=  Taster_Start AND NOT FLM;
FLM := Taster_Start;

IF Pulse_pos AND Automatik AND Freigabe AND GS_Aktoren OR LS1 and GS_Aktor1 THEN
   SK_Kette := 1;
END_IF;

IF NOT Freigabe THEN
   SK_Kette := 0;
END_IF;


Zu den IF-Abfragen habe ich Folgendes gefunden:

Bedingungen, die geprüft werden sollen, wenn die Vorbedingungen nicht erfüllt sind, lassen sich mit einem ELSIF einfügen.

Im Grunde würde aber doch dann die VORBEDINGUNG nicht stimmen, wenn die Freigabe durch NotAus entzogen wurde, oder sehe ich das falsch?

@Larry:

Nein, so ein Projekt gibt es leider nicht. Es soll das Projekt (mit dem Drehgeber aus dem anderen Thread) werden.

Aber wenn die Schrittkette gerade arbeitet und es wird auf Hand umgeschaltet, dann soll die Kette noch zu Ende arbeiten bis in Schritt0. Danach können im Handbetrieb über das Panel die Aktoren bewegt werden. Die SK ist doch dann in Schritt0 und macht Nichts mehr!

Ja, schrittweise entwickeln ist schon gut... aber erst einmal muss ja mein Ansatz richtig überlegt und ausprogrammiert sein!


Lieben Dank für eure Einsprüche…
 
Asche auf mein Haupt. Ich gehe für einen Tag für Dich an den Kochtopf... ;)
Ich habe Deinen Code nicht richtig gelesen. Du hast Recht. Dein Code würde so funktionieren.
Trotzdem würde ich die Variante mit den 2 IF bevorzugen.

Wenn Du nichts kaputtfahren kannst, wirst Du sehr viel dabei lernen, wenn es sich "entwickelt"... Natürlich vorausgesetzt Dir wird auch die Zeit dafür gegeben.
 
Asche auf mein Haupt. Ich gehe für einen Tag für Dich an den Kochtopf... ;)

Aja Prima, da lass' ich mir aber was Schweres einfallen, damit du auch mal ins Schwitzen kommst... :p

Also kurze Zusammenfassung (die x-te):

Code:
Pulse_pos :=  Taster_Start AND NOT FLM;
FLM := Taster_Start;

IF Pulse_pos AND Automatik AND Freigabe AND GS_Aktoren OR LS1 and GS_Aktor1 THEN
   SK_Kette := 1;
END_IF;

IF NOT Freigabe OR NOT Automatik THEN
   SK_Kette := 0;
END_IF;

Erklärung:

Sind die Bedingungen erfüllt und der Bediener drückt den Start-Taster, dann geht die SK von Schritt0 in Schritt1 und arbeitet sich weiter, bis sie schließlich wieder in Schritt0 angekommen ist. Dann gelangt sie über die OR-Bedingung aus Schritt0 wieder in Schritt1, usw.

Wird nun NotAus oder Handbetrieb gedrückt, dann gelangt die SK über die zweite IF-Anweisung (evtl. auch ELSEIF?), abhängig von der Zykluszeit, in Schritt0 und führt keine weiteren Aktionen mehr aus.

Im Handbetrieb könnten jetzt über das Display die Aktoren einzeln angesteuert werden...

Fragen:

1)
Ist das jetzt so stimmig?

2)
Ist diese Flankenauswertung besser als die, die ich eingangs verwendet habe?

Vielen Dank!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sind die Bedingungen erfüllt und der Bediener drückt den Start-Taster, dann geht die SK von Schritt0 in Schritt1 und arbeitet sich weiter, bis sie schließlich wieder in Schritt0 angekommen ist. Dann gelangt sie über die OR-Bedingung aus Schritt0 wieder in Schritt1, usw.

So wie das aussieht hast Du ein paar Klammern vergessen...
Jedenfalls glaube ich nicht unbedingt, dass der Code das macht was Du willst.
 
So wie das aussieht hast Du ein paar Klammern vergessen...
Jedenfalls glaube ich nicht unbedingt, dass der Code das macht was Du willst.

Echt? Kann es momentan nicht ausprobieren... Denkst du es liegt an den (fehlenden) Klammern oder eher Grundsätzlich?

Erste IF-Abfrage:

Sind die Bedingungen erfüllt und der Bediener drückt den Start-Taster, dann geht die SK von Schritt0 in Schritt1 und arbeitet weiter, bis sie schließlich wieder in Schritt0 angekommen ist. Dann gelangt sie über die OR-Bedingung aus Schritt0 wieder in Schritt1, usw.

Zweite IF-Abfrage:

Wird nun NotAus oder Handbetrieb gedrückt, dann gelangt die SK, abhängig von der Zykluszeit, in Schritt0 und führt keine weiteren Aktionen mehr aus.
 
Jetzt nur bezogen auf die erste IF-Anweisung: (zum besseren Verständnis)

Code:
Pulse_pos AND Automatik AND Freigabe AND GS_Aktoren
schaltet in Schritt 1

Code:
LS1 and GS_Aktor1
aber auch.

Sicher würde die Schrittkette im nächsten IF wieder genullt, wenn Automatik oder Freigabe nicht da sind.
Ich denke aber nicht, dass die erste IF-Anweisung so von Dir gewollt war.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
zu 2) So wie es da steht, wird die Schrittkette auf 0 gesetzt, wenn einer der Merker nicht da ist. Erfolgt die Zuweisung der Ausgänge im Anschluß, gehen diese im gleichen Zyklus aus.

Wurde die Zuweisung der Ausgänge "oben drüber" geschrieben, dann gehen die Ausgänge 1 Zyklus später aus.

Wie lange das dauert, hängt von der Zykluszeit der SPS ab.

Das sollte das jetzt verdeutlichen. Ich hoffe es verwirrt nicht noch mehr...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt nur bezogen auf die erste IF-Anweisung: (zum besseren Verständnis)

Code:
Pulse_pos AND Automatik AND Freigabe AND GS_Aktoren
schaltet in Schritt 1

Code:
LS1 and GS_Aktor1
aber auch.

Ähm, das soll ja eigentlich auch so sein. Nämlich deshalb, dass die SK nach Schritt0 automatisch wieder in Schritt1 schaltet, wenn die Bedingungen erfüllt sind. Das habe ich doch bei Larry gelernt! :p

@Larry:

1)
Ok Larry, dieser Zusatz (SK_Kette = 0) würde bewirken, dass die SK nur gestartet werden kann, wenn die SK tatsächlich in Schritt0 steht, richtig?

2)
Die zweite IF-Anweisung könnte aber so bleiben; dadurch geht die Kette dann in Schritt0, wenn NotAus oder Handbetrieb gedrückt wurde?

3)
Was ist der Vorteil, die Flanke auf diese Art und Weise zu machen; anstatt "Start_Taster" AND NOT "FLM"?


Puh, hoffe langsam wird das jetzt mit mir noch was... :) Verspreche auch, wenn wir das hier soweit gelöst haben mindestens für eine Woche nicht mehr zu nerven!
 
... mach dir mal wegen "nerven" keine Sorgen ... das würde ich dann schon sagen.

Ansonsten ... zu 1.) und auch zu 2.) OK - right you are ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... mach dir mal wegen "nerven" keine Sorgen ... das würde ich dann schon sagen.

Nett von dir; sehe schon du bist sehr belastbar... aber ich glaube das bringt der Beruf mit sich. ;) Wüsste gar nicht was ich ohne das Forum hier machen würde...

Ansonsten ... zu 1.) und auch zu 2.) OK - right you are ...

Na prima, zumindest ein Teilerfolg. Jetzt wäre nur noch Pkt. 3 offen und dann würde ich auch schon loslegen meine Schrittkette (mit Verzweigung) einzutippen...

Bezüglich Flanken; bisher hatte ich es halt immer auf diese Art

IF "Start_Taster" AND NOT "FLM" THEN
...

gemacht. Ist das ein Nachteil?

Lieben Dank!
 
So schrecklich belastbar bin ich auch nicht (mehr) - ich habe auch Nerven ... ;)

Ich hätte auch zu Punkt 3.) geschrieben - ich bin mir aber nicht sicher was du gemeint hast ...
So wie ich es verstanden habe :
- Um aus Schritt 0 herauszukommen würde ich es in der CASE-Abfrage machen. Innerhalb der CASE brauchst du eigentlich keine Flanken.
- Um den Schritt 0 (unabhängig davon, wo die Kette gerade steht) zu erzwingen würde ich das auf alle Fälle außerhalb der CASE machen. Ob du von Ereignis zu Ereignis ggf. eine Flanke brauchst hängt von dem Ereignis ab. Z.B. aber bei Not-Aus möchtest du ja auf jeden Fall erreichen, dass die Kette die ganze Zeit über in Schritt 0 bleibt - hier also keine Flanke.

Habe ich dich richtig verstanden ?

Gruß
Larry
 
Moin Moin,

also ich wollte eigentlich nur wissen, ob beide Arten eine Flanke in SCL zu bilden gleich gut sind?

Möglichkeit 1:

Code:
IF Taster_Start AND NOT FLM THEN
   A0.0 := 1;
END_IF;
FLM := Taster_Start;

Möglichkeit 2:


Code:
Pulse_pos := Taster_Start AND NOT FLM;
FLM := Taster_Start;

IF Pulse_pos THEN
   A0.0 := 1;
END_IF;

Denn beide Varianten machen eine pos. Flanke!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dazu würde ich sagen : "it depends ..."

Möglichkeit 1 wäre/ist mein Favourit wenn es darum geht, viele Dinge innerhalb der Abfrage zu machen.

Möglichkeit 2 dann, wenn es nur darum geht/ginge den Impuls zu bilden.
Den allerdings würde ich dann entweder gleich mit seiner Ziel-Variablen machen :
Code:
A0.0 := Taster_Start AND NOT FLM ;
FLM := Taster_Start ;
... oder die Ziel-Variable direkt zuweisen :
Code:
A0.0 := Pulse_pos ;

Ich würde innerhalb eines SCL-Bausteins speziell und in einem "Universal"-Baustein im Besonderen nicht mit Absolut-Operanden wie E,A,M etc. direkt arbeiten sondern mit denen nur über die Baustein-Schnittstelle ...

Gruß
Larry
 
Ok, lieben Dank Larry!

... dann will ich schon mal ein Teil meines Versprechens einlösen und zumindest mal bis Montag keine weiteren Fragen mehr stellen. :p


Schönes Wochenede und erhole dich gut (bei heißen 37°), damit du am Montag wieder richtig fit bist...
 
Möglichkeit 1 braucht nur einen Flankenhilfsmerker und keine zusätzliche Variable für den Impulsmerker, die Flanke kann dafür aber nur einmal (sofort) verarbeitet werden.

Ich favorisiere Möglichkeit 2: erst die Flanke(n) bilden und auf zusätzliche Impulsmerker-Variable(n) legen. (*)
Dann können die Flanken (via Impulsmerker) beliebig oft im weiteren Programm konsistent verarbeitet werden und müssen nicht jedesmal neu erzeugt werden, wo bei multitasking-Prozessen die Gefahr besteht, daß unterschiedliche Ergebnisse entstehen.
Außerdem ist das Speichern des aktuellen Zustands im Flankenhilfsmerker (FLM := Taster_Start) im Programmcode nicht so weit weg von der Erzeugung des Flankensignals. Man sieht besser, daß nur die Flanke verarbeitet wird.
(*) sowas sieht man oft für bis zu 32 Flanken gleichzeitig (Wordverknüpfungen, meist in AWL)

PS: "A0.0 := Pulse_pos ;" bewirkt nicht das selbe wie der Beispielcode 2.

Harald
 
Zurück
Oben