-> Hier kostenlos registrieren
Hallo,
nachdem mir dieses Forum schon oft geholfen hat, ohne dass ich registriert war, habe ich mich jetzt angemeldet. Herzlichen Dank für die vielen guten Beiträge hier.
Mein aktuelles Problem:
Ich möchte in einer Funktion mithilfe des SFC21 einen Datenbaustein füllen.
Dabei wird das Doppelwort, mit dem gefüllt wird, als Parameter FillDWord übergeben.
Ich möchte dafür den ANY-Pointer P#L 10.0 DWORD 1 selbst zusammenbauen und war überzeugt, das dank vieler hilfreicher Beiträge in diesem Forum richtig gemacht zu haben.
Wenn ich SFC21 mit BVAL:=P#L 10.0 DWORD 1 aufrufe, wird der Baustein wie erwartet gefüllt.
Wenn ich SFC21 mit BVAL:=#pFillWord aufrufe (unten im Code auskommentiert), gibt SFC21 als RET_VAL W#16#8124 aus.
Ich hätte erwartet, dass beide SFC21-Aufrufe äquivalent sind (vorausgesetzt natürlich, dass sich die Adresse L10.0 von tmpFillWord nicht ändert).
Wo liegt mein Fehler?
Gruß jomatic
nachdem mir dieses Forum schon oft geholfen hat, ohne dass ich registriert war, habe ich mich jetzt angemeldet. Herzlichen Dank für die vielen guten Beiträge hier.
Mein aktuelles Problem:
Ich möchte in einer Funktion mithilfe des SFC21 einen Datenbaustein füllen.
Dabei wird das Doppelwort, mit dem gefüllt wird, als Parameter FillDWord übergeben.
Ich möchte dafür den ANY-Pointer P#L 10.0 DWORD 1 selbst zusammenbauen und war überzeugt, das dank vieler hilfreicher Beiträge in diesem Forum richtig gemacht zu haben.
Wenn ich SFC21 mit BVAL:=P#L 10.0 DWORD 1 aufrufe, wird der Baustein wie erwartet gefüllt.
Wenn ich SFC21 mit BVAL:=#pFillWord aufrufe (unten im Code auskommentiert), gibt SFC21 als RET_VAL W#16#8124 aus.
Ich hätte erwartet, dass beide SFC21-Aufrufe äquivalent sind (vorausgesetzt natürlich, dass sich die Adresse L10.0 von tmpFillWord nicht ändert).
Wo liegt mein Fehler?
Gruß jomatic
Code:
FUNCTION FC4 : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
FillDWord : DWORD ; //Wort, mit denen der DBs gefüllt wird
END_VAR
VAR_TEMP
pFillDWord : ANY ;
tmpFillDWord : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =
L #FillDWord;
T #tmpFillDWord;
NETWORK
TITLE =
LAR1 P##pFillDWord;
L B#16#10; //10h für S7
T LB [AR1,P#0.0];
L B#16#6; //Datentyp DWORD
T LB [AR1,P#1.0];
L 1;
T LW [AR1,P#2.0]; // Wiederholfaktor 1
L 0;
T LW [AR1,P#4.0]; // kein DB ==> 0, DB-Nr. oder 0
L P##tmpFillDWord;
T LD [AR1,P#6.0];
NETWORK
TITLE =
// CALL "FILL" (
// BVAL :=#pFillDWord,
// RET_VAL:=mw214,
// BLK :=P#DB2.DBX 0.0 DWORD 100);
CALL "FILL" (
BVAL := P#L 10.0 DWORD 1,
RET_VAL := mw214,
BLK := P#DB2.DBX 0.0 DWORD 100);
END_FUNCTION
Zuletzt bearbeitet: