Step 7 Schieberegister

100Morpheus

Level-1
Beiträge
14
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich hätte mal eine frage ich würde gerne in FUP ( AWL kann ich leider nicht ) ein Schieberegister bauen das wenn auf EN eine 1 kommt die Zahl immer eins weitergeschoben wird und ich den Ausgang steuern kann und wenn ich nach rechts schiebe ich wieder rückwärts die Ausgänge schiebe. Mein Beispiel funktioniert nicht ganz. Habt ihr da Tipps ?

Schiebe.PNG


2eP6CvpgwAAAABJRU5ErkJggg==
 
Wenn du nicht jeden Aufrufzyklus schieben willst, dann musst du vor den EN noch einen positiven Flankenmerker (P) setzen.

Zudem schiebst du immer die 1 um 1 Stelle und das Ergebnis landen dann in MW600, d.h. dort steht dann immer eine 2.

Du musst also an IN ebenfalls das MW600 schreiben, dann werden die Bits im MW600 um eine Stelle weitergeschoben.
Du musst dann dafür sorgen, dass an der ersten Bitposition auch ein Bit auf 1 gesetzt ist, wenn bei der Flanke z.B. mit einer Lichtschranke ein Produkt erfasst wird, wenn kein Produkt dann schreibst du am ersten Bit eine 0 auf das Bit.

Dann musst du an die Bytereihenfolge bei Step 7 denken.
Wenn MW600 den Wert 1 dezimal hat, dann ist das Bit M601.0 gesetzt.
Wenn du dieses als Startbedingung setzt, dann werden nacheinander mit jedem Schieben M601.1 bis 7, dann M600.0 bis 7 gesetzt.
 
Ok hätte doch noch eine kleine frage.
Habe jetzt oben bei mir ein SHL_DW 32 bit links schieben angegeben.
Habe dort das MD600 benutzt Habe auf M600.0 eine 1 gegeben jetzt schiebt er die schön bis M600.7 hätte jetzt erwartet das er die aber weiterschiebt also M601.0 usw ( 32 bit ) aber er hört bei M600.7 auf. Weist du wieso das so ist ?
 
Habe dort das MD600 benutzt Habe auf M600.0 eine 1 gegeben jetzt schiebt er die schön bis M600.7 hätte jetzt erwartet das er die aber weiterschiebt also M601.0 usw ( 32 bit ) aber er hört bei M600.7 auf.
Weil das niedrigste Bit (Bit 0) des MD600 in M603.0 liegt, weil die S7-SPS Mehrbyte-Daten im big-endian speichert. Wie Thomas schon in #2 erklärte:
Wenn MW600 den Wert 1 dezimal hat, dann ist das Bit M601.0 gesetzt.
Wenn du dieses als Startbedingung setzt, dann werden nacheinander mit jedem Schieben M601.1 bis 7, dann M600.0 bis 7 gesetzt.

--> Setze M603.0 auf 1, dann musst Du 32 mal mit SHL_DW schieben, bevor MD600 = 0 ist.

Harald
 
Zurück
Oben