- Beiträge
- 16.494
- Reaktionspunkte
- 6.097
-> 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