Fragen zu Schieberegister

steppenwolf

Level-1
Beiträge
47
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Erstmal Hallo zusammen!

Ich habe einige Fragen zum Thema Schieberegister.

Woher kriegt das Register das Signal zum "um eins" schieben.

Das Register schreibt in ein WORD bzw. DW. Soweit ich weiß. Wie kann ich aus dem Wort einzelne Stationen auslesen ob sie "1" oder "0" sind?

Und wie kann ich das Schieberegister länger als ein DW machen. z.B. 49 Stationen sind in meinem Fall aktuell.


Das ganze läuft auf einer 319-3. Ich will unbedingt verstehen wie das abläuft.

Danke im voraus für die hoffentlich zahlreichen Antworten.

Grüsse

Flo
 
ich werd hier noch zum UG ...!

nichts für ungut :ROFLMAO:

Schiebebefehle wirken bei der S7 auf den Akku.

Wenn man mit F1 bei dem Befehl SLW die Hilfe aufruft, so bekommt man schon einiges an Information, wie das geht.

Ich persönlich schreibe Schieberegister i.d.R. gerne von Hand:

Code:
on #Befehl_schieben
o #f_Befehl_schieben
spb M001
 
u #SRG_48
= #SRG_49
u #SRG_47
= #SRG_48
... usw
u #SRG_1
= #SRG_2
u #Eingangssignal
= #SRG_1
 
M001: u #Befehl_schieben
= #f_Befehl_schieben
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Erstmal Hallo zusammen!

Ich habe einige Fragen zum Thema Schieberegister.

Woher kriegt das Register das Signal zum "um eins" schieben.

Das Register schreibt in ein WORD bzw. DW. Soweit ich weiß. Wie kann ich aus dem Wort einzelne Stationen auslesen ob sie "1" oder "0" sind?

Und wie kann ich das Schieberegister länger als ein DW machen. z.B. 49 Stationen sind in meinem Fall aktuell.


Das ganze läuft auf einer 319-3. Ich will unbedingt verstehen wie das abläuft.

Danke im voraus für die hoffentlich zahlreichen Antworten.

Grüsse

Flo

1. Siehe Perfektionist ;)
2. nimm SLD, damit kannst du 32 Bit schieben
Man kann aber mehr schieben:
Ja nachdem, ob eine 0 oder eine 1 links "rausgeschoben" wurde, kannst du zum Bsp. mit SPP einen Sprung ausführen (Sihe auch Hilfe zu SLD).
Du kannst also 2 MD oder auch DBD (Datenbaustein) nehmen, zuerst das höherwertige 1 nach Links schieben, dann das niederwertige eins nach links schieben. Mit SPP an eine Marke springen und dort Bit Null vom Höherwertigen MD setzen (war ja das rausgeschobene Bit). Wenn SPP nicht ausgeführt wird, mit SPA das "Bit setzen" umspringen.

Code:
      U     M      0.0
      FP    M      0.1
      SPBN  NIXM

      L     MD    24
      SLD   1
      T     MD    24

      L     MD    20
      SLD   1
      T     MD    20

      SPP   EINA
      SPA   NIXM

EINA: NOP   0

      S     M     27.0

NIXM: NOP   0
Aber schau dir das mal in der Variablentabelle genauer an.

Geschoben wird hier so:

MB23 --> MB22 --> MB21 --> MB20 --> MB27 --> MB26 --> MB25 --> MB24

Die Bits werden jeweils von 0...7 usw. geschoben.

Also mal die MB und auch die MD ansehen, zum besseren Verständnis.
 
Zuletzt bearbeitet:
ich schiebe immer rechts

Ich glaube ich mach das immer so

Code:
FUNCTION "Schieberegister" : VOID
TITLE =Schieberegister Demo
VERSION : 0.1
BEGIN
NETWORK
TITLE =Schieberegister takten
      U     E      0.0; //Taktimpuls
      FP    M      0.0; 
      SPBN  ENDE; 
      AUF   DB     2; 
      L     DBD    0; //DBX0.7 = BIT 0
      SRD   1; 
      T     DBD    0; 
      L     DBD    4; 
      RRDA  ; 
      T     DBD    4; 
      L     DBD    8; 
      RRDA  ; 
      T     DBD    8; 
      L     DBD   12; 
      RRDA  ; 
      T     DBD   12; 
      L     DBD   16; 
      RRDA  ; 
      T     DBD   16; 
ENDE: NOP   0; 
NETWORK
TITLE =BIT aus Schieberegister lesen
      L     MD   100; //Position "Lesen aus Schieberigester"
      L     L#8; 
      /D    ; 
      T     MD   104; //Positin in Byte
      L     MD   100; //Position "Lesen aus Schieberigester"
      L     L#8; 
      MOD   ; 
      T     MD   108; //Rest aus Division /8 (Nummer BIT)
      L     L#7; //Berechnung Nummer BIT
      L     MD   108; //Rest aus Division /8 (Nummer BIT)
      -D    ; 
      T     MD   112; //Zwischenspeicher
      L     MD   104; //Positin in Byte
      SLD   3; 
      L     MD   112; //Zwischenspeicher
      OD    ; 
      T     MD   200; //Zeiger aus  BYTE + BIT
 
END_FUNCTION

Hab ich zwar jetzt nicht getestet, bin mir aber fast ziemlich sicher;)

Zum Schreiben in das Schieberegister benutze ich das Bit DBX0.7
Das Ganze hat den Vorteil, das ich die Position zum Lesen aus dem Register immer wieder neu berechnen kann.

Ich hoffe ich konnte dir helfen

Torsten

p.s.

anstelle von Netzwerk 2 hatte Perfektionist eine bessere Möglichkeit gefunden:
Code:
      AUF   DB     2
      L     MD   100                   //Position "Lesen aus Schieberigester"
      XOD   DW#16#7
      LAR1 
      U     DBX [AR1,P#0.0]
      ...

von den drei Bit-Adressen berechnet er einfach nur das Einer-Komplement
und man bekommt die fortlaufende Bitnummer des Schieberegisters
:TOOL:
 
Zuletzt bearbeitet:
Also vielen dank erst mal für all den Input.
Werde erst einige Versuche starten mit PLCSIM, bevor es ans Eingemachte geht.

Ich danke, und hoffe dass ich doch noch Fragen kann, wenn es Unklarheiten gibt. Bin halt leider kein Urgestein in der Programmierer Zunft :(


Grüsse

Flo
 
Zurück
Oben