Pointer

OB1

Level-1
Beiträge
76
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Ich möchte dem Pointer "P#DB??.DBX0.0 Byte 10" über die IN Varieable "DB_NR" die Datenbausteinnummer vorgeben, aber ich habe keine Ahnung wie ich das bewerkstelligen soll.

Hat vieleicht jemand einen kleinen Tip für mich wo ich ansetzen soll?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
die IN-variable in nem TEMP-integer zwischenspeichern, w#16#84000050 ins AR1 laden und indirekt zugreifen

Code:
TAR1 #DWORDMerker
 
L #DB_NR   //die IN-variable
T #DB_Nummer //die TEMP-variable
 
AUF DB [#DB_Nummer] //veraendert das DB-Register
LAR1 DW#16#84000050  // = P#10.0 innerhalb eines DBs
 
L D [AR1, P#0.0] //um 32 bit zu laden
L W [AR1, P#0.0] //um 16 bit zu laden
L B [AR1, P#0.0] //um 8 bit zu laden
 
set
U [AR1, P#0.0] //um Bool zu laden
 
LAR1 #DWORDMerker


anmerkung:

innerhalb von multiinstanzen musst du zu den DW#16#84000050 noch den wert des AR2 ohne bereichskennung addieren

also statt LAR1 DW#16#84000050 dann:

Code:
TAR2
L  DW#16#00FFFFFF
UD
L DW#16#84000050
+D
LAR1
 
Zuletzt bearbeitet:
Hier ist noch einmal ein Programmbeispiel für die Verwendung eines ANY-Zeigers (P#DB100.DBX0.0 BYTE 10) mit einer variablen
DB-Nummer:

Code:
FUNCTION FC 100 : VOID
TITLE =Werte kopieren
//16
AUTHOR : KAI
FAMILY : SPSFORUM
NAME : 'ANY'
VERSION : 1.0
 
VAR_INPUT
  DB_QUELLE : INT ; 
END_VAR
VAR_TEMP
  DB_REGISTER : WORD ; 
  AR1_REGISTER : DWORD ; 
  ANY_QUELLE : ANY ; 
  RETVAL : INT ; 
END_VAR
BEGIN
NETWORK
TITLE =Register sichern
 
      L     DBNO; // DB-Register
      T     #DB_REGISTER; 
 
      TAR1  #AR1_REGISTER; // AR1-Register
 
NETWORK
TITLE =ANY-QUELLE (ANY)
 
      L     P##ANY_QUELLE; // ANY-QUELLE (ANY)
      LAR1  ; 
 
      L     B#16#10; // Syntax-ID (STEP 7)
      T     B [AR1,P#0.0]; 
 
      L     B#16#2; // Datentyp (BYTE)
      T     B [AR1,P#1.0]; 
 
      L     10; // Anzahl (10)
      T     W [AR1,P#2.0]; 
 
      L     #DB_QUELLE; // DB-Nummer (#DB_QUELLE)
      T     W [AR1,P#4.0]; 
 
      L     P#DBX 0.0; // Bereichszeiger (DBX0.0)
      T     D [AR1,P#6.0]; 
 
NETWORK
TITLE =Werte kopieren
 
      CALL SFC   20 (
           SRCBLK                   := #ANY_QUELLE,
           RET_VAL                  := #RETVAL,
           DSTBLK                   := P#DB110.DBX0.0 BYTE 10);
      NOP   0; 
 
NETWORK
TITLE =Register wiederherstellen
 
      AUF   DB [#DB_REGISTER]; // DB-Register
      LAR1  #AR1_REGISTER; // AR1-Register
 
END_FUNCTION

Gruß Kai
 

Anhänge

  • OB1.pdf
    5,6 KB · Aufrufe: 27
  • FC100.pdf
    7 KB · Aufrufe: 28
  • DB100.pdf
    4,4 KB · Aufrufe: 20
  • DB110.pdf
    4,4 KB · Aufrufe: 16
  • Any.zip
    32,7 KB · Aufrufe: 21
Zurück
Oben