PDA

View Full Version : Step 5 Ausgänge mit Schieberegister steuern



FranktheTank1978
23.07.2017, 17:08
Hallo.
Ich versuche mein Lauflicht so umzuprogrammieren, das die Ausgänge mit dem Schieberegister gesteuert werden.
Leider bisher ohne nennenswerten erfolg.


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?

Senator42
23.07.2017, 17:45
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.

FranktheTank1978
23.07.2017, 18:41
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?

Senator42
23.07.2017, 20:26
> 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.



UN M 1.0
SPB XX
R M 1.0

L AB 5
SLW 1
T AB 5

XX: NOP 0
BE

PN/DP
23.07.2017, 20:38
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.


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

FranktheTank1978
24.07.2017, 09:08
Danke erst mal.
Der FB wird erst aufgerufen, wenn ein Timer im OB1 abgelaufen ist.
Im FB6 ist noch der alte ablauf für Rückwärts drin.
Im FB5 versuche ich den neuen ablauf.
Mal geht ein durchlauf mal nicht.

Hier das Step5 file.37900

PN/DP
24.07.2017, 09:39
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

FranktheTank1978
25.07.2017, 09:54
Habe dank der Tipps ein kleinen schritt vorwärts gemacht.


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



NAME: FB7
L AB5
SLW 1
T AB5
BE



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?