Step 7 ANY Zeiger mit Datenbaustein

Robin

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

zusammen habe ein Projekt von einem kolegen wo ich einen Speicherbereich im ANY DB erwitern soll komme aber nicht ganz klar unter ist der Code angehangen.
kann mir jemand sagen in welcher zeile die länge des DB`s festgelegt wird. bzw. was da genau passiert tue mich momentan noch schwer mit den any zeiger.
Ich habe zwei Temp. Variablen ANY_QUELLE 0.0 und ANYZIEL 10.0 wo in diesen Code werden diese erzeugt?
Code:
      L     W#16#1002                   // Typ Byte    "Quellbaustein"
      T     LW     0
      L     "DB Copy Zwischenspeicher".Copy[8]    // Anzahl Byte´s      
      T     LW     2
      L     "DB Copy Zwischenspeicher".Copy[14]    // Quelle Datenbaustein     
      T     LW     4
      L     0                           // Anfang der Quelle
      SLD   3
      OD    DW#16#84000000
      T     LD     6


      L     W#16#1002                   // Typ Byte    "Zielbaustein"
      T     LW    10
      L     "DB Copy Zwischenspeicher".Copy[8]    // Anzahl Byte´s      
      T     LW    12
      L     2                           // Ziel Datenbaustein DB2    
      T     LW    14
      L     0                           // Anfang des Ziel´s
      SLD   3
      OD    DW#16#84000000
      T     LD    16
Gruss Robin
 
Zuletzt bearbeitet:
In der jeweils dritten Zeile deR Codeschnipsel wird die Länge in Byte geladen und dann in den Any Zeiger transferiert. Lies dir mal das hier durch Any-Zeiger für Datentypen

Lg

Edit. Erzeugt werden die Anys nicht, das geschieht ja zur Entwicklungszeit. Sie bekommen nur durch dein Programm erst ihren Inhalt. Der gesamte Programmausschnitt dient nur zum beschreiben der Pointer.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Da wird auf ziemlich faule Art direkt in den Speicher geschrieben wo die ANY-Variablen ANY_QUELLE (TEMP: LB0..LB9) und ANYZIEL (TEMP: LB10..LB19) liegen, zum Zweck ANY-Pointer zusammen zu basteln, z.B. für BLKMOV (siehe Step7-Hilfe zum Aufbau des Datentyps ANY).
Durch das direkte Adressieren der LW... ohne symbolischen Bezug dürfen die Any-Variablen auf keinen Fall in TEMP verschoben werden. Besser/mit Symbolbezug macht man das so (das passt sich automatisch an die Adressen an wo die ANY-Variablen liegen):
Code:
      LAR1  P##ANY_QUELLE
      L     W#16#1002                             // Typ Byte    "Quellbaustein"
      T     LW [AR1, P#0.0]
      L     "DB Copy Zwischenspeicher".Copy[8]    // Anzahl Byte´s      
      T     LW [AR1, P#2.0]
      L     "DB Copy Zwischenspeicher".Copy[14]   // Quelle Datenbaustein     
      T     LW [AR1, P#4.0]
      L     P#DBX0.0                              // Anfang der Quelle: ab DBX0.0
      T     LD [AR1, P#6.0]

      LAR1  P##ANY_ZIEL
      L     W#16#1002                             // Typ Byte    "Zielbaustein"
      T     LW [AR1, P#0.0]
      L     "DB Copy Zwischenspeicher".Copy[8]    // Anzahl Byte´s      
      T     LW [AR1, P#2.0]
      L     2                                     // Ziel Datenbaustein: DB2    
      T     LW [AR1, P#4.0]
      L     P#DBX0.0                              // Anfang des Ziels: ab DBX0.0
      T     LD [AR1, P#6.0]

Eine "Länge von DB's" wird da nirgends festgelegt, es wird lediglich aus "DB Copy Zwischenspeicher".Copy[8] übernommen wieviele Bytes nach DB2.DBB0... kopiert werden sollen.

Harald
 
Vielen Dank für die Hilfe ,

habe es jetzt gefunden im OB1 kann man einen wert für "DB Copy Zwischenspeicher".Copy[8] einfügen welches dann die länge ist vielen Dank für die schnelle hilfe!

Gruss Robin
 
Zurück
Oben