-> Hier kostenlos registrieren
Hallo alle zusammen, ich habe folgendes Problem:
Ich möchte per BLKMOV einen String aus DB4 in DB3 kopieren, die geforderten Pointer habe ich mir mit mit einer Struct selbst gebastelt.
Sieht jemand meinen Fehler? Wenn ich das testweise umbaue und INT kopiere, geht es ohne Probleme.
Das Funktion liefert meist den Rückgabewert dez. 1834 bzw. hex 72A (daraus werde ich aber nicht besonders schlau).
Ich danke schonmal für eure Hilfe!
Ich möchte per BLKMOV einen String aus DB4 in DB3 kopieren, die geforderten Pointer habe ich mir mit mit einer Struct selbst gebastelt.
Code:
FUNCTION SFC20Tester:int
VAR_TEMP
ret: INT;
temp:INT;
pSRC : ANY; // analog zu pDST
pAnySRC AT pSRC :
STRUCT
S7Code : BYTE;
DataType : BYTE;
Length : INT;
DBNumber : INT;
MemoryArea : BYTE;
ByteAddressMSB : BYTE;
ByteAddressLSB : WORD;
END_STRUCT;
pDST : ANY; // analog zu pDST
pAnyDST AT pDST :
STRUCT
S7Code : BYTE;
DataType : BYTE;
Length : INT;
DBNumber : INT;
MemoryArea : BYTE;
ByteAddressMSB : BYTE;
ByteAddressLSB : WORD;
END_STRUCT;
END_VAR
BEGIN
//Füttern der Pointer mit schon bekannten Werten
pAnySRC.S7Code := 16#10; //Fixer Wert
pAnySRC.DataType := 16#13; //String
pAnySRC.Length := 256; //Gesamte Stringlänge
pAnySRC.DBNumber := 4;
pAnySRC.MemoryArea := 16#84; //Speicherbereich DB
pAnySRC.ByteAddressMSB:=0;
pAnySRC.ByteAddressLSB:=INT_TO_WORD(1316*8);
pAnyDST.S7Code := 16#10; //Fixer Wert
pAnyDST.DataType := 16#13; //String
pAnyDST.Length := 256; //Gesamte Stringlänge
pAnyDST.DBNumber := 3;
pAnyDST.MemoryArea := 16#84; //Speicherbereich DB
pAnyDST.ByteAddressMSB:=0;
pAnyDST.ByteAddressLSB:=INT_TO_WORD(790*8);
temp:=BLKMOV(SRCBLK := pSRC,
RET_VAL:=ret,
DSTBLK := pDST);
SFC20Tester:=ret;
END_FUNCTION
Sieht jemand meinen Fehler? Wenn ich das testweise umbaue und INT kopiere, geht es ohne Probleme.
Das Funktion liefert meist den Rückgabewert dez. 1834 bzw. hex 72A (daraus werde ich aber nicht besonders schlau).
Ich danke schonmal für eure Hilfe!