- Beiträge
- 18.027
- Reaktionspunkte
- 7.826
-> Hier kostenlos registrieren
Wenn die Daten nicht in der Instanz liegen kannst du mit einen DB-Zeiger
oder Any-Zeiger auf die Adresse zeigen. Ein DB-Zeiger ist 48 Bit lang, in
Byte 0-1 liegt die Datenbaustein Nr. als INT wert, aber nur wenn der
Bereichszeiger für Operandenbereich Global.-oder Instanzdaten enthält.
Im Byte 2-5 steht dann der Bereichszeiger.
	
	
	
		
	
		
			
		
		
	
				
			oder Any-Zeiger auf die Adresse zeigen. Ein DB-Zeiger ist 48 Bit lang, in
Byte 0-1 liegt die Datenbaustein Nr. als INT wert, aber nur wenn der
Bereichszeiger für Operandenbereich Global.-oder Instanzdaten enthält.
Im Byte 2-5 steht dann der Bereichszeiger.
		Code:
	
	FUNCTION_BLOCK "DB-Zeiger"
TITLE =Meldebaustein
VERSION : 0.1
 
VAR_INPUT
  pZeiger_Meldung : POINTER ; 
END_VAR
VAR_OUTPUT
  xtest : BOOL ; 
END_VAR
VAR_TEMP
  dTempAR1 : DWORD ; //Zwischenspeicher Adressregister 1
  dTempAR2 : DWORD ; //Zwischenspeicher Adressregister 2
  wTempDB_Nr : INT ; //DB Nr Meldung
  dTempAdresse : DWORD ; //Bereichszeiger Meldung
END_VAR
BEGIN
NETWORK
TITLE =Adressregister retten
      TAR1  #dTempAR1; 
      TAR2  #dTempAR2; 
NETWORK
TITLE =Meldung-Zeiger umladen
//Pointer-Zeiger umladen
      TAR2  ; //AR2 in Akku
      UD    DW#16#FFFFFF; //Bereichscodierung ausblenden
      L     P##pZeiger_Meldung; //Stardadresse "Meldung"
      +D    ; 
      LAR1  ; 
//DB-Nr Temp. zwischenspeichern
      L     W [AR1,P#0.0]; 
      T     #wTempDB_Nr; 
//Adresse Temp. zwischenspeichern
      L     D [AR1,P#2.0]; 
      T     #dTempAdresse; 
NETWORK
TITLE =Datenbaustein aufschlagen und Adressrgister stellen
//Meldung: Global, AR1 
      AUF   DB [#wTempDB_Nr]; 
      LAR1  #dTempAdresse; 
NETWORK
TITLE =hier kommst du jetzt
//hier jetzt deine Anweisungen
//ein bischen mußt du auch arbeiten
      U     DBX [AR1,P#0.0]; 
      =     #xtest; 
NETWORK
TITLE =Adressregister wieder herstellen
      LAR1  #dTempAR1; 
      LAR2  #dTempAR2; 
END_FUNCTION_BLOCK 
	 
  
 
		 
  
 
		
 
 
		