Pointerübergabe an FC

NeuSim

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Ich habe einen FC an den ich eine Struktur übergebe. Im FC wird diese Struktur wie folgt zerlegt:

Code:
// Pointer ins AR2 laden
      L     P##Struktur
      LAR2  
//DB-Nummer der Struktur ermitteln
      L     W [AR2,P#4.0]               // DB Nummer
      T     #DBNr
//Anfangsadresse der Struktur ermitteln
      L     W [AR2,P#8.0]               // Anfangsadresse im Pointerformat
      T     #AnfAdr
//Länge der Struktur ermitteln
      L     W [AR2,P#2.0]               // Anzahl Bytes im Datenbereich
      L     2
      /I    
      T     #NumberOfElements           // Number of elements WORD

Dies funktioniert wunderbar, wenn sich die Sruktur in einem globalen DB befindet.
Wenn ich aber nun eine Struktur in einem FB als statische Variable deklariere und diese an den FC übergebe, funktioniert es nicht.

Funktionierender Code im FB10:
Code:
      CALL  "Struct_Check"
       Struktur         :="DB1".MyStruct
       Check            :=M10.0

NICHT funktionierender Code im FB10 (Aufruf Call FB10, DB10):
Code:
      CALL  "Struct_Check"
       Struktur         :="MyStruct" // Struktur im FB10 deklariert als statische Variable
       Check            :=M10.0

Was kann ich machen, damit ich im FC auch die Struktur verarbeiten kann, welche als statische Variable im aufrufenden Baustein deklariert ist?
Der Pointer müsste doch zur Laufzeit in den DB10 an die richtige Adresse verweisen.

Gruss
NeuSim
 
Was bekommst Du denn für Werte für #DBNr und #AnfAdr?

Es kann sein, dass die DBNr nicht mit übertragen wird.
Außerdem bin ich mir nicht sicher, ob ein Zugriff auf DI im Sinne von L DIW xxx oder U DIX xx.x in FC möglich ist.
 
Der In-Parameter ist als Any definiert.

Die Länge der Struktur welche ich übergebe ist unterschiedlich. Darum ermittle ich im FC die Länge der Struktur für die Weiterverarbeitung.
Kann ich im temp Bereich des FC eine Deklaration vom Datentyp Any machen und meine IN-Struktur für die Weiterverarbeitung dorthin kopieren?

Für den DB10 wurde natürlich ein Symbol vergeben.

Im FC erhalte ich als DB-Nr: 0, und als Anfangsadresse 1004 (dezimal).

Gruss
NeuSim
 
Hallo Jochen

Ich machs auch im Simulator, bei mir gehts nicht!
Kannst Du mir Dein Projekt senden, dann kann ichs bei mir ausprobieren.

Gruss
NeuSim
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Ich glaube dass nur ein kleiner Schreibfehler zu dem ganzen Problem geführt hat.
Es sollte wirklich funktionieren.

Sorry an alle für die Aufregung und vielen Dank für die Hilfe.

Gruss
NeuSim
 
Zurück
Oben