Hallo – ich verstehs nicht,
nachdem dein Programm funktioniert, du es aber noch nicht richtig verstehst, hier mal meine Erklärung auf der Basis meines Posts #5:
- Mit einer Flanke des START-Befehls wird ein Bit des Schieberegisters auf 1 gebracht.
Befehlsfolge: U E 0.0 // E0.0 sei der Starttaster
FP M1.0 // M1.0 ist der Flankenmerker, nicht die Flanke selbst
S A 0.7 // A0.7 sei der erste Ausgang der leuchtet. Hier muss der Setzbefehl
// genommen werden, überlege selbst – warum!
- Der ständig laufende Taktgeber bildet ebenfalls ein Flankensignal
Befehlsfolge: U M 200.5 // MB 200 sei hier das Taktmerkerbyte, Bit 5 taktet mit 1 Hz.
FP M1.1 // M1.1 ist hier wieder der Flankenmerker
= M1.2 // M1.2 ist die Flanke, sie seht für genau einen Zyklus auf 1
- Mit diesem wird das Schieberegister um 1 Position z.B. nach rechts rotiert (nicht geschoben!)
- Das Schieberegister wird über L(aden) und T(ransferieren) in jedem SPS-Zyklus auf das Ausgangswort ausgegeben
Befehlsfolge: UN M1.2 // Wenn kein Flankensignal, dann springe
SPB ENDE // an das Programmende. Wenn aber M1.2=1 dann…
L AD0
RRD 1 // um 1 Position nach rechts rotieren
T AD0
ENDE: NOP 0
Noch ein paar Erklärungen:
- Es gibt keinen Befehl, der nur 16 Bit rotiert, deshalb hier RRD. Dieser Befehl rotiert 32 Bit.
- Falls es wirklich nur 16 Bit sein sollen, kann man über Merker und ein paar Tricks die Lösung erzwingen, z.B. so:
O M12.0// soll mal dem A0.0 entsprechen
O M 14.0// entspricht dem A2.0
= A 0.0// A0.0 wird also von 2 Bit des DW 12 angesteuert. Diese 3 Befehle müsste man 16 mal für A0.0 bis A1.7 entsprechend anpassen.
- Wenn der Wechsel schneller passieren soll, dann einfach ein anderes Taktmerkerbit nehmen.
- Mache dir vor allem klar, wie bei der SPS die einzelnen Byte angeordnet sind, wenn sie als Wort oder Doppelwort verwendet werden.
eNDe