Löwensenft
Level-1
- Beiträge
- 43
- Reaktionspunkte
- 1
-> Hier kostenlos registrieren
Hallo Leute,
ich habe im Moment folgendes Problem: Ich habe einen Baustein gebaut, der anhand verschiedener Angaben einen ANY-Pointer baut:
Soweit so gut. Tut was es soll. Allerdings rufe ich diesen FC aus einem SCL-FC auf. Ich habe eine temporäre Variable tmpAny vom Typ ANY erstellt und rufe den Baustein bspw. folgendermaßen auf:
tmpAny soll nun eben auf die entsprechenden Daten im DB1 zeigen. Grund: Ich möchte im Anschluss den tmpAny an BLKMOV übergeben.
Wenn ich mir allerdings den AWL-Code anschaue, der generiert wird, sieht dieser wie folgt aus:
Zur Erklärung der Adressen:
V 86.0 = Wert von "InPMFIFONum"
V 38.0 = tmpByteOffset
V 34.0 = tmpLength
V 88.0 = Wert von tmpAny
Das heißt er kopiert erst den (leeren) tmpAny in ungenutzten Lokalspeicher und ruft damit dann FC_GetAny auf. Folglich liegen die Informationen, die GetAny schreibt, im Nirvana. Ein Rückübertragen in den echten tmpAny erfolgt nicht.
Ich hatte auch schon getestet was passiert, wenn im FC_GetAny OutAny in INOUT deklariert ist: Kein Unterschied. *grummel*
Gibt's hier irgendeinen Tipp wie ich die Ausgabe von FC_GetAny in tmpAny bekomme?
Vielen Dank und viele Grüße
Max
ich habe im Moment folgendes Problem: Ich habe einen Baustein gebaut, der anhand verschiedener Angaben einen ANY-Pointer baut:
Code:
FC240 :
Description
Parameter
000.0: ROOTNODE: STRUCT
000.0: IN: STRUCT
000.0: InDB: INT := 0 //DB-Nummer
002.0: InOffset: INT := 0 //Start-Byte
004.0: InLength: INT := 0 //Anzahl Bytes
006.0: OUT: STRUCT
006.0: OutAny: ANY
016.0: TEMP: STRUCT
AWL-Code
Netzwerk 1 :
L P##OutAny
LAR1
L W#16#10 //SyntaxID. bei S7 immer 10
T B[AR1,P#0.0]
L W#16#2 //Typ BYTE
T B[AR1,P#1.0]
L #InLength //Anzahl Bytes
T W[AR1,P#2.0]
L #InDB //Quell-DB
T W[AR1,P#4.0]
L #InOffset //Anfang der Quelle
SLD 3
T D[AR1,P#6.0]
L B#16#84 //Speicherbereich (hier DB)
T B[AR1,P#6.0]
Soweit so gut. Tut was es soll. Allerdings rufe ich diesen FC aus einem SCL-FC auf. Ich habe eine temporäre Variable tmpAny vom Typ ANY erstellt und rufe den Baustein bspw. folgendermaßen auf:
Code:
FC_GetAny(InDB := 1, InOffset := 4711, InLength := 12, OutAny := tmpAny);
tmpAny soll nun eben auf die entsprechenden Daten im DB1 zeigen. Grund: Ich möchte im Anschluss den tmpAny an BLKMOV übergeben.
Wenn ich mir allerdings den AWL-Code anschaue, der generiert wird, sieht dieser wie folgt aus:
Code:
L #InPMFIFONum
T LW86
L LD72
T LD88
L LD76
T LD92
L LW80
T LW96
UC "FC_GetAny"
P#V 86.0
P#V 38.0
P#V 34.0
P#V 88.0
Zur Erklärung der Adressen:
V 86.0 = Wert von "InPMFIFONum"
V 38.0 = tmpByteOffset
V 34.0 = tmpLength
V 88.0 = Wert von tmpAny
Das heißt er kopiert erst den (leeren) tmpAny in ungenutzten Lokalspeicher und ruft damit dann FC_GetAny auf. Folglich liegen die Informationen, die GetAny schreibt, im Nirvana. Ein Rückübertragen in den echten tmpAny erfolgt nicht.
Ich hatte auch schon getestet was passiert, wenn im FC_GetAny OutAny in INOUT deklariert ist: Kein Unterschied. *grummel*
Gibt's hier irgendeinen Tipp wie ich die Ausgabe von FC_GetAny in tmpAny bekomme?
Vielen Dank und viele Grüße
Max