Step 7 Step7 V5.5 - AWL Sprungmarke

michi*

Level-2
Beiträge
100
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,

ich lade bisher in einem FC eine Variable in den DB.

L 5
T DB10.DBW6

Jetzt würde ich gerne über einen Schalter Zwischen zwei Werten verstellen, dass hab ich folgender Maßen versucht:


U E 0.0
SPB then
SPBN else

then:
L 5
T DB10.DBW6
SPA ifen

else:
L 3
T DB10.DBW6

ifen: NOP 0


leider läd er jetzt weder die 3 noch die 5.

Kann mir jmd. einen Tipp geben?

Vielen Dank
Michi
 
Code:
      U     E      0.0
      SPB   MTru


//E0.0 war false
      L     3
      T     DB10.DBW    6
      SPA   MEnd


//E0.0 war true
MTru: L     5
      T     DB10.DBW    6


MEnd: NOP   0
Oder umgekehrt
Code:
      U     E      0.0
      SPBN  MFal


//E0.0 war true
      L     5
      T     DB10.DBW    6
      SPA   MEnd


//E0.0 war false
MFal: L     3
      T     DB10.DBW    6


MEnd: Nop 0
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
leider läd er jetzt weder die 3 noch die 5.
Das kann eigentlich nicht sein, es müßte immer 5 in DB10.DBW6 geladen werden.
Wird der Code denn ausgeführt?

SPBN kann man nicht nach SPB ausführen, weil SPB bei nicht-Sprung das VKE = 1 setzt, wodurch das nachfolgende SPBN nie erfüllt wird.
Man könnte SPBN und SPB vertauschen, dann wäre das nachfolgende SPB allerdings nur "optisch" ein bedingter Sprung, den man ebenso mit SPA ersetzen kann (weil das VKE da immer 1 ist). Da das Sprungziel "then:" direkt nach dem SPB/SPA liegt, kann man den Sprung auch gleich ganz weglassen und kommt auf die Lösung wie von RONIN dargestellt.

Harald
 
In dem Beispiel aus #1 setzt das erste SPB das VKE auf 1, so dass das nachfolgende SPBN nie ausgeführt wird und immer nur die Anweisung hinter then: bearbeitet wird.

ich arbeite in solchen Fällen so, dass ich erst einen Default-Wert lade und dann nur im Falle des Falls den zweiten Wert nachlade. Das erspart Sprünge, Sprungmarken und NOPs.

Code:
L 5
U    E      0.0
        SPB T
        L     3
         T:T     DB10.DBW6
 
Ähnlich wie in C eine Alternativ-Zuweisung mit Bedingungs-Operator
Code:
var2 = (var1 == 1) ? 5 : 3 ;
kann man in AWL auch kurz schreiben:
Code:
      L 5
      U E0.0
      SPB Tvar
      L 3
Tvar: T DB10.DBW6


PS: zu langsam. Beispiel wurde gerade schon von svenhuber gezeigt

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für eure Hilfe,

hab es jetzt wie RONIN vorgeschlagen gemacht.
Die zweite Variante ist natürlich nochmal kürzer aber so hats jetzt geklappt.

Mit dem VKE auf 1 war mir so nicht bewusst.




Vielen Dank
Michi
 
Zurück
Oben