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.0Zur 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
 
	 
  
  
 
		 
 
 
 
		 
 


 
 
		