Schrittkettenprogrammierung (zum x-ten Mal ;) )

DerPraktikant

Level-1
Beiträge
65
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ehe jetzt der entsprechende Vorschlag kommt: Ja, ich habe schon im Forum nach dem Thema gesucht und den halben Morgen damit verbracht daraus schlau zu werden und bin einfach daran gescheitert. Liegt vielleicht an mir, liegt aber auch vielleicht am Montag ;)

Deswegen möchte ich jetzt darum bitten eine Runde "Schrittkettenprogrammierung in AWL für Dummies" zu kriegen, leicht verdaulich :ROFLMAO: und komplett mit allen (auch die selbstverständlichen) Infos, in welchen Baustein man es reinschreiben soll und und und...

Ich benutze die Step7 V5.4 + SP1 und als Anhängsel liefere ich gleich den entsprechenden Ablaufplan mit. Im Idealfall kann ich dann anhand des Codes und des Planes dann schnell dir Zusammenhänge nachvollziehen, ich fürchte das ich das einzige was mir im Augenblick helfen kann.

Zur Zeit siehts hier nämlich grad so aus: :sb8:
 

Anhänge

  • Pruefstand.pdf
    14,2 KB · Aufrufe: 205
Hausaufgaben mochte ich noch nie ;) Inzwischen habe ich was Eigenes zusammengekocht, wie schauts mit dessen Chancen auf Erfolg aus?

OB1

UC FB1


FB1

P101: R M 6.0
R M 6.1
R M 7.0
UN E 6.0
SPB P201

P201: R M 6.0
R M 6.1
R M 6.2
R M 6.3
R M 6.4
R M 6.5
UN E 6.0
U E 2.3
UN E 6.1
SPB P203
UN E 6.0
U E 2.4
UN E 6.2
SPB P205
UN E 6.0
U E 2.6
SPB P206
UN E 6.0
U E 2.5
SPB P207
O E 6.0
O E 2.0
SPB P301
UN E 6.0
U E 2.2
SPB P701
UN E 6.0
U E 2.1
SPB P801

P203: // weitere Anweisungen
P205: // weitere Anweisungen
P206: // weitere Anweisungen
P207: // weitere Anweisungen
P301: // weitere Anweisungen
P701: // weitere Anweisungen
P801: // weitere Anweisungen

vermutlich auch nicht das einfachste und eleganteste, aber ich verstehs :rolleyes:
 
probiere es doch mal mit einer Sprungleiste, wenn du das schon kennst.sonst suce mal danach.
aber wie schon gesagt wurde von den anderen,es gibt viele verschiedene methoden eine schrittkette zu realisieren.

wer lesen kann ist klar im vorteil ;)

PS: ein wenig strukur und übersicht(komentare) wäre auch nicht schlecht
 
Ich denke die Grundidee mit der Sprungleiste ist mir langsam klar.

Wenn ich das alles dann richtig verstanden habe müsste ein ähnliches Gerüst wie das hier Erfolg haben:

Code:
L MD100 //lade Wert von MD100
SPL LIST
 
L +101 //lade Zahlenwert "101"
==D //vergleiche mit MD100
SPB P101 //wenn VKE = 1 dann springe zu P101, sonst weiter
 
L +201 //lade Zahlenwert "201"
==D //vergleiche mit MD100
SPB P201 //wenn VKE = 1 dann springe zu P201, sonst weiter
 
L +202 //lade Zahlenwert "202"
==D //vergleiche mit MD100
SPB P202 //wenn VKE = 1 dann springe zu P202, sonst weiter
 
P101: NOP 0 //Anweisungen, dann Transitionen
L +201
T MD100
BEA
 
P201: NOP 0 //Anweisungen, dann Transitionen
L +202
T MD100
BEA
 
P202: NOP 0 //Anweisungen, dann Transitionen
SPA Ende
BEA
 
Ende: U E 2.3 //Knopf "Neuer Test" gedrückt 
FP M 2.3 //Positive Flanke erwarten
SPBN Aus
L +101
T MD100
 
Aus: NOP 0

Ich weiss dass das Ganze furchtbar schwerfällig wirken muss, aber so verstehe ich es nun mal am besten. Einfach Inkrementieren ist nicht so wünschenswert da ich die Positionsnummeren ("201" resp. "P201") unbedingt beihalten will.

Also, was ist falsch an meinem Code? ;)

Ich sollte noch erwähnen dass das alles jetzt in einem einzigen Netzwerk steht und ich mir deswegen nicht 100% sicher bin ob das BEA Sinn macht oder nicht.
 
Hallo Praktikant,

was Du da in Deinem Code wird so nicht funktionieren!
Du wirst schon nach Zeile 2 einen Fehler bekommen:
Code:
L MD100 //lade Wert von MD100
SPL LIST
Mit SPL LIST sagst Du hier, es folgt eine Sprungleiste. Es ist aber keine da!
Eine Sprungleiste wäre z. BSP.:
Code:
L MD100 //lade Wert von MD100
SPL LIST
SPA M000
SPA M001
...

LIST: NOP 0 // Hier erfolgt die Fehlerauswertung

M000: NOP 0 // Hier kommen die Anweisungen für MD100 = 0

etc.
Wenn Du die Schrittkette ohne SPL machen willst, dann solltest Du nach Deiner letzten
Sprunganweisung (SPB P202). Entweder ein BEA setzen, oder Mit einem SPA auf "ENDE"
oder auf eine Fehlerauswertung springen, sonst werden immer die Anweisungen
hinter P101 ausgeführt.

Das BEA ist soweit ok. Du kannst alternativ auch auf AUS springen, oder wenn der Knopf
"Neuer Test" die Schrittkette immer neu starten soll, dann auf ENDE.

Grüße
Gebs
 
Zuviel Werbung?
-> Hier kostenlos registrieren
geh mal auf den SPL-Befehl und drücke F1.

da kommt u.a. ein Beispiel:
Code:
Beispiel
AWL Erläuterung
L MB0  //Lade die Nummer des Sprungziels in AKKU1-L-L.
SPL LSTX //Sprungziel, wenn AKKU1-L-L > 3 ist.
SPA SEG0 //Sprungziel, wenn AKKU1-L-L = 0 ist.
SPA SEG1 //Sprungziel, wenn AKKU1-L-L = 1 ist.
SPA COMM //Sprungziel, wenn AKKU1-L-L = 2 ist.
SPA SEG3 //Sprungziel, wenn AKKU1-L-L = 3 ist.
LSTX: SPA COMM 
SEG0: *  //Zulässige Anweisung.
*  
SPA COMM 
SEG1: *  //Zulässige Anweisung.
*  
SPA COMM 
SEG3: *  //Zulässige Anweisung.
*  
SPA COMM 
COMM: *  
*
 
Hm, das heisst das Gerüst sollte dann eher so aussehen? Prinzipiell sollte das jetzt so funktionieren dass das Programm beginnend bei P0 eine Position nach der anderen aufruft bis zum Ende.

Code:
L MD100  
SPL P5   //Sprungziel wenn AKKU1 > 4
SPA P0  //Sprungziel wenn AKKU1 = 0
SPA P1  //Sprungziel wenn AKKU1 = 1
SPA P2  //Sprungziel wenn AKKU1 = 2
SPA P3  //Sprungziel wenn AKKU1 = 3
SPA P4  //Sprungziel wenn AKKU1 = 4
 
P5: SPA ENDE
 
P0: //Anweisungen
L +1 //neuen Wert laden
T MD100 //und in MD100 setzen
SPA ENDE
 
P1: //Anweisungen
L +2
T MD100
SPA ENDE
 
P2: //Anweisungen
L +3
T MD100
SPA ENDE
 
P3: //Anweisungen
L +4
T MD100
SPA ENDE
 
P4: //Anweisungen
L +5
T MD100
SPA ENDE
 
ENDE: NOP 0

Meinem Verständnis nach müsste es ja dann so gehen dass man am Ende eines jeweiligen Abschnitts mit Label dann nach den Transitionen (Schaltbedingungen) die entsprechende Anweisung hat welches Label als nächstes dran ist, und dieser Wert wird dann in MD100 gesetzt.

Beim nächsten Zyklus dann schaut die Sprungleiste ja dann den Wert in MD100 in Ihrer entsprechenden nachfolgenden Liste nach, so dass der dann zum entsprechenden Label springt.

Hat zwar leider den Nachteil dass ich doch noch mal alle Positionsnamen umändern muss, aber wenns geht, dann ist das das kleinste Problem ;)
 
Hallo Praktikant,

ich hab' gerade noch mal drübergeschaut und ein paar Schönheitskorrekturen gemacht:
Code:
// Startbedingung für die Kette
U(  // Kette läuft nicht
L MD100
L 0
==D
)
U E 2.3 // Taster "Start"
FP M 2.3
SPBN WEIT
L +1
T MD 100
WEIT: NOP 0
 
L MD100  
SPL FEHL   //Sprungziel wenn AKKU1 > 5
SPA AUS  //Sprungziel wenn AKKU1 = 0 => Kette ist AUS
SPA P1   //Sprungziel wenn AKKU1 = 1 => Schritt 1 wird bearbeitet
SPA P2   //Sprungziel wenn AKKU1 = 2
SPA P3   //Sprungziel wenn AKKU1 = 3
SPA P4   //Sprungziel wenn AKKU1 = 4
SPA P5   //Sprungziel wenn AKKU1 = 5
 
FEHL: SPA ENDE
 
P1: //Anweisungen
L +2 //neuen Wert laden
T MD100 //und in MD100 setzen
SPA ENDE
 
P2: //Anweisungen
L +3
T MD100
SPA ENDE
 
P3: //Anweisungen
L +4
T MD100
SPA ENDE
 
P4: //Anweisungen
L +5
T MD100
SPA ENDE
 
P5: //Anweisungen
L +0 // => im letzten Schritt Kette ausschalten
T MD100
SPA ENDE
 
ENDE: NOP 0
AUS: NOP 0
Wenn Du es so machst, siehst Du im MD100 sofort, in welchem Schritt die Kette ist und
sie ist nach dem letzten Schritt aus.
Mit L +5 (so wie Du es gemacht hast) würde auch kein Schritt mehr bearbeitet werden,
sieht aber unschön aus, wenn bei "ausgeschalteter" Kette immer an die Fehlerposition
gesprungen wird.

Grüße
Gebs

[EDIT]
War noch ein Fehler drin! Bei P1 muss natürlich L +2 stehen.
[/EDIT]
 
Zuletzt bearbeitet:
Nur noch eine Kleinigkeit, um sicher zu gehen:

Wenn jetzt in den Positionen der Schrittkette eine entscheidung eingebaut wäre, z.B. würde
U E 0.0
U E 0.1
zu P2 führen und
U E 0.0
U E 0.2
zu P3, das müsste dann folgendermassen aussehen, wenn man jetzt die P1 bis P3 aus vorigem Beispiel ersetzt durch:

Code:
P1: S A 0.0 //irgendein Ausgang
U E 0.0
U E 0.1
L 2 
T MD100 
U E 0.0
U E 0.2
L 3
T MD100
SPA ENDE
 
P2: //Anweisungen
L +3
T MD100
SPA ENDE
 
P3: //Anweisungen
L +4
T MD100
SPA ENDE

Klappt das im P1 so, oder sollte ich besser doch noch ein SPBN in P1 hineinwursteln, so a la:

Code:
P1: S A 0.0 //irgendein Ausgang
U E 0.0
U E 0.1
SPBN X1
L 2 
T MD100 
X1: U E 0.0
U E 0.2
SPBN ENDE
L 3
T MD100
SPA ENDE
 
Zurück
Oben