UDT in FB durchreichen

Zuviel Werbung?
-> Hier kostenlos registrieren
@blockmove
Ganz steige ich bei deinem Beispiel noch nicht durch...
Du kopierts die Daten von der unter PSrc hinterlegten Adresse auf den InstanzDB?
Die Destinationadresse im IDB beginnt bei 0.0 und das UDT ist 280 Byte lang - bin ich soweit richtig?
Was aber wenn sich die Länge des UDT ändert? Oder jemand einen zusätzlichen IN am FB Parametriert?

OK ist ein nicht ganz passendes Beispiel ... Sorry.
Wenn du einen Any-Pointer als IN-Parameter anlegst, dann bekommst du alle notwendigen Daten in diesem Pointer.
Die Destination ist NICHT DIX0.0, sondern die Daten werden vom Bahn-DB DBX0.0 in die UDT #Bahn im Stat-Bereich (Instanz) kopiert.
Deren Adresse muss ich überhaupt nich wissen, denn dies erledigt aufgrund der symbolischen Adressierung der Compiler für mich.
Zusätzliche Parameter spielen überhaupt keine Rolle. Beim Übersetzten passt der Compiler dies automatisch an.

Vorteil ist, dass ich dann im FB vollsymbolisch auf die Daten in der UDT zugreifen kann. Am Ende des FBs kopiere ich dann die Daten von #Bahn wieder in den passenden DB.


Gruß
Dieter
 
@larry
Es geht nach wie vor um das Durchreichen von IN/OUT-UDT's
Naja ... dazu hättest du schon noch etwas mehr schreiben dürfen , wegen :

Was aber wenn sich die Länge des UDT ändert? Oder jemand einen zusätzlichen IN am FB Parametriert?
Die Länge des UDT's ändert sich nicht von selber.
Du kannst auch nicht für einen IN-Parameter vom Typ UDT11 einen UDT12 darufschreiben - selbst dann nicht wenn er gleich groß sein sollte.

Wenn du aber an der Schnittstelle deines Bausteins etwas änders so ist immer ein neu Übersetzen und ein neu generieren der Instanz notwendig. In diesem Fall würde sich ein symbolisch Zugriff (wie in Blockmove-Dieter in seinem Beispiel-Code hat) automatisch anpassen und wenn nötig alles wieder glatt ziehen.

Gruß
Larry
 
Zurück
Oben