Step 5 Ausgänge mit Schieberegister steuern

Beiträge
54
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Lauflicht mit Schieberegister

Hallo.
Ich versuche mein Lauflicht so umzuprogrammieren, das die Ausgänge mit dem Schieberegister gesteuert werden.
Leider bisher ohne nennenswerten erfolg.
Code:
U M 6.0
L AB 5
SLW 1
T AB 5
ZV Z 5
R M 6.0
M 6.0 = ist der Merker für das Lauflicht
ZV 5 = ist der Zähler dür das Lauflicht, geht bis 7
A5.0 wird beim Start gesetzt.

Der Code wird abgearbeitet, das kann ich Zähler sehen.
Nur wird AB5 nicht bitweise geschoben.

Kann mir jemand helfen?
 
Zuletzt bearbeitet:
ist das der einzige code? oder gehört da irgend etwas noch dazu ?

1. SLW 1 schiebt von linkt immer eine 0 rein. rechts fällt raus und ist nur in einem Register.
2. U M 6.0 löscht am ende M 6.0, sonst passiert da nichts.
3. Z 5 müsste einen stabilen wert haben, oder?

wenn du alle zeilen löscht und BE rein schreibst, hast du ein fehlerfreies programm.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ist das der einzige code? oder gehört da irgend etwas noch dazu ?

1. SLW 1 schiebt von linkt immer eine 0 rein. rechts fällt raus und ist nur in einem Register.
2. U M 6.0 löscht am ende M 6.0, sonst passiert da nichts.
3. Z 5 müsste einen stabilen wert haben, oder?

wenn du alle zeilen löscht und BE rein schreibst, hast du ein fehlerfreies programm.

Der Code war nur ein Teil des Programmes.
Der M6.0 wird im OB1 wieder gesetzt, und Z5 läuft bis 7 und wird dann im OB1 bei 7 wieder auf null gesetzt.
Mein Problem ist das der Ab 5 (00000001) nicht nach links geschoben wird.
Kann ich den AB so direkt adressieren oder muss ich mit hilfe eines MB arbeiten?
 
> Kann ich den AB so direkt adressieren
eigentlich schon. AB verhält sich wie MB .

Versuch mal folgenden Code. Und geh dann in Steuern VAR:

AB5 = KF 1 1 rein schreiben
oder
A 5.0 true
A 5.1 false ... A 5.7

M 1.0 einmal auf true (1) setzen.
Danach sollte A 5.0 gelöscht und A 5.1 gesetzt sein.

Den code in einen FB schreiben, den FB vom OB 1 aufrufen.
Keinen anderen Code aufrufen! Kann ja sein, dass irgend ein anderes Proggi (OB 13) das AB 5 überschreibt.

Wenns mit dem AB 5 nicht geht, MB 10 probieren.
Vielleicht muss eine Ausgangkarte mit AB 5 ja auch einfach nur existieren. Vielleicht auch die +24V + GND an das AB-Modul anschliessen.
Das weiss ich jetzt wirklich nicht mehr.

Code:
UN M 1.0
SPB   XX
R M 1.0

L AB 5
SLW 1
T AB 5

XX:  NOP 0
       BE
 
Die Operationen L, SLW und T werden unabhängig vom VKE immer ausgeführt, deshalb ist nach 8 OB1-Zyklen der Wert 0 im AB5, wobei jeder Ausgang nur für die Dauer von 1 OB1-Zyklus eingeschaltet ist - das ist sehr wahrscheinlich so schnell, daß Du es nicht beobachten kannst. Du müsstest die Operationen überspringen, wenn nicht geschoben werden soll.
Code:
      U M 6.0
      ZV Z 5
      SPB= M001

      L AB 5
      SLW 1
      T AB 5

M001  R M 6.0

PS: zu langsam getippt

Harald
 
Wie oft wird der FB dann aufgerufen? Genau 1 mal oder mehrmals? Wie sieht der Aufrufcode aus?

Damit der Zähler Z5 funktioniert muß "ZV Z 5" mindestens 2x ausgeführt werden, einmal mit M6.0 = 1 und einmal mit M6.0 = 0

Da ist ja sicher noch mehr nicht gezeigter Code relevant, z.B. wann wird AB1 initialisiert (mit 1 beschrieben), wird Z5 noch an anderer Stelle ausgewertet oder beeinflußt - wie sieht der gesamte relevante Code aus? Kannst Du das Programm auf nur den relevanten Code reduzieren und dann testen?

Harald
 
Habe dank der Tipps ein kleinen schritt vorwärts gemacht.
Code:
Name: FB5
U M6.0 ;Merker vorwärts
U M0.1 ;Merker Timer
ZV Z5 ;Z5 + 1
SPB FB 7
NAME: FB7
R M6.0

U M6.1 ;Merker rückwärts
U M0.1 ;Merker Timer
ZV Z5 ;Z5 + 1
SPB FB 8
NAME: FB8
R M6.1 ;Merker rückwärts
BE
Code:
NAME: FB7
L AB5
SLW 1
T AB5
BE
Code:
NAME: FB8
L AB5
SRW 1
T AB5
BE
Z5 wird im OB1 bei 7 wieder auf 0 gesetzt.
Die Merker M6.0 und M6.1 werden ebenfalls im OB1 neu gesetzt wenn die richtung stimmt.
So funktioniert das Programm.
Nun möchte ich nach AB5 den AB6 und danach den AB7 Schieben. Und dann wieder Rückwärts.
Wie kann ich das am besten machen?
 
Zurück
Oben