Problem mit BLKMOV bei Zugriff auf V-Lokaldaten

armadillo

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Gemeinde,
ich hab folgendes Problem. Ich möchte einen ANY an einen FC übergeben und in diesem FC eine BLKMOV ausführen. Das klappt wunderbar mit DB, M usw. aber leider nicht mit Lokaldaten. Ich nehme an der BLKMOV kann mit den vorherigen-Lokaldaten (=Lokadaten des aufrufenden Bausteins) nicht umgehen. Er gibt aber keine Fehlermeldung aus.
Ich hab die Quelle von meinem Test angehängt, wäre schön, wenn einem dazu was einfällt.

FUNCTION FC 20 : VOID
TITLE =
VERSION : 0.1


VAR_INPUT
inp1 : ANY ;
outp1 : ANY ;
END_VAR
VAR_OUTPUT
retv : INT ;
END_VAR
VAR_TEMP
retval : INT ;
inp : ANY ;
outp : ANY ;
dt1 : DWORD ;
dt2 : DWORD ;
inp_syntax : BYTE ;
inp_datentyp : BYTE ;
inp_laenge : WORD ;
inp_db : WORD ;
inp_adresse : DWORD ;
out_syntax : BYTE ;
out_datentyp : BYTE ;
out_laenge : WORD ;
out_db : WORD ;
out_adresse : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =

L P##inp1;
LAR1 ;
L B [AR1,P#0.0]; //sytanx-ID (10 für S7)
T #inp_syntax;
L B [AR1,P#1.0]; //Datentyp
T #inp_datentyp;
L W [AR1,P#2.0]; //Laenge
T #inp_laenge;
L W [AR1,P#4.0]; //DB
T #inp_db;
L D [AR1,P#6.0]; //Startadresse
T #inp_adresse;

LAR1 P##inp; //Anfangsaddresse des Pointers laden
L #inp_syntax;
T B [AR1,P#0.0]; //sytanx-ID (10 für S7)
L #inp_datentyp;
T B [AR1,P#1.0]; //Datentyp
L #inp_laenge;
T W [AR1,P#2.0]; //Laenge
L #inp_db;
T W [AR1,P#4.0]; //DB
L #inp_adresse;
T D [AR1,P#6.0]; //Startadresse

//////////////////
L P##outp1;
LAR1 ; //Anfangsaddresse des Pointers laden
L B [AR1,P#0.0]; //sytanx-ID (10 für S7)
T #out_syntax;
L B [AR1,P#1.0]; //Datentyp
T #out_datentyp;
L W [AR1,P#2.0]; //Laenge
T #out_laenge;
L W [AR1,P#4.0]; //DB
T #out_db;
L D [AR1,P#6.0]; //Startadresse
T #out_adresse;

LAR1 P##outp; //Anfangsaddresse des Pointers laden
L #out_syntax;
T B [AR1,P#0.0]; //sytanx-ID (10 für S7)
L #out_datentyp;
T B [AR1,P#1.0]; //Datentyp
L #out_laenge;
T W [AR1,P#2.0]; //Laenge
L #out_db;
T W [AR1,P#4.0]; //DB
L #out_adresse;
T D [AR1,P#6.0]; //Startadresse


CALL "BLKMOV" (
SRCBLK := #inp,
RET_VAL := #retval,
DSTBLK := #outp);

L #retval;
T #retv;


END_FUNCTION

FUNCTION FC 19 : VOID
TITLE =
VERSION : 0.1


VAR_TEMP
tin : DWORD ;
tout : DWORD ;
retv : INT ;
END_VAR
BEGIN
NETWORK
TITLE =

// Das funkt das kopieren nicht:

L DW#16#AFFEAFFE;
T #tin;
L DW#16#0;
T #tout;

CALL FC 20 (
inp1 := #tin,
outp1 := #tout,
retv := #retv);

L #tout;

//Das funkts aber:

L DW#16#AFFEAFFE;
T MD 20;

CALL FC 20 (
inp1 := MD 20,
outp1 := MD 30,
retv := #retv);

L MD 30;

//Das auch

L DW#16#AFFEAFFE;
T #tin;
L DW#16#0;
T #tout;

CALL "BLKMOV" (
SRCBLK := #tin,
RET_VAL := #retv,
DSTBLK := #tout);

L #tout;

END_FUNCTION
 
hi,
ja ich denkeauch, daß du recht hast mit den Temp Varablen, so rein interesse halber versuchs doch mal mit nem FB únd den statischen?
 
Zurück
Oben