[ S7-200 ] Speicherbereiche mit Zeigern übertragen

caret

Level-1
Beiträge
82
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Auf der S7-200 habe ich folgenden AWL Code generiert:

Code:
LD     SM0.0

MOVW   42, VW0                     // setze vw0 auf den Wert 23

MOVD   &VB0, VD50                  // mache VD50 zu Zeiger auf vb0
MOVD   &VB100, VD54                // mache VD54 zu zeiger auf vb100

BMB    *VD50, *VD54, 2             // kopiere 2 Byte von der Adresse auf die  
                                   // VD50 zeigt an die Adresse auf die VD54 zeigt
mit dem Ergebnis, dass nach Ablauf des Programms in VW100 der Wert 42 steht.

Was ich aber gerne hätte, wäre, dass mit dem BMB Befehl nicht von der Adresse auf die VD50 zeigt an die Adresse auf die VD54 zeigt kopiert wird, sondern dass die Werte der Variable auf die die Zeiger zeigen als Quell- und Zieladressen verwendet werden. Sprich: VD50 zeigt auf VB0 und in VB0 steht der Wert 42. VD54 zeigt auf VB100 und in VB100 steht der Wert 0 (wegen Vorinitialisierung). Dementsprechend hät ich gerne, das BMB 2 Byte von VB42 nach VB0 kopiert. Aber wie lässt sich das realisieren?
 
hallo,
glaube du willst wahlfrei auf die vb's zugreifen, unten mal was in fup, dann kann mann es besser sehen.:p
 

Anhänge

  • schiebung.jpg
    schiebung.jpg
    40,6 KB · Aufrufe: 27
Zuviel Werbung?
-> Hier kostenlos registrieren
Auf der S7-200 habe ich folgenden AWL Code generiert:

Code:
LD     SM0.0

MOVW   42, VW0                     // setze vw0 auf den Wert 23

MOVD   &VB0, VD50                  // mache VD50 zu Zeiger auf vb0
MOVD   &VB100, VD54                // mache VD54 zu zeiger auf vb100

BMB    *VD50, *VD54, 2             // kopiere 2 Byte von der Adresse auf die  
                                   // VD50 zeigt an die Adresse auf die VD54 zeigt
mit dem Ergebnis, dass nach Ablauf des Programms in VW100 der Wert 42 steht.

Was ich aber gerne hätte, wäre, dass mit dem BMB Befehl nicht von der Adresse auf die VD50 zeigt an die Adresse auf die VD54 zeigt kopiert wird, sondern dass die Werte der Variable auf die die Zeiger zeigen als Quell- und Zieladressen verwendet werden. Sprich: VD50 zeigt auf VB0 und in VB0 steht der Wert 42. VD54 zeigt auf VB100 und in VB100 steht der Wert 0 (wegen Vorinitialisierung). Dementsprechend hät ich gerne, das BMB 2 Byte von VB42 nach VB0 kopiert. Aber wie lässt sich das realisieren?
Dazu brauchst du eine Hilfsvariable, in der du die Adresse berechnest. Die Brechnung selbst ist wahrscheinlich falsch, da ich das Format der Adresspointer nicht auswendig kenne. Bei der 300/400 muß zum Beispiel der Offset um 3 nach links geschoben werden...

MOVD &VB0,VD1000 // ein Zeiger auf den Beginn des V-Bereichs
ADDW *VD50,VD1002 // addiere dazu das Wort, auf das VD50 zeigt also den Inhalt von VW0. VD1000 sollte jetzt ein Zeiger auf Vb42 sein.
BMB *VD1000, *VD54, 2
 
Zurück
Oben