SCL Word in beliebeigen UDT kopieren

dinner4one

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

ich möchte mir eine kleine Funktion basteln, die ein beliebiges Eingangswort in einen beliebigen UDT-Eintrag (in Wortgrösse) eines DBs kopiert. Und die Spitze wäre - wenn ich den UDT-NAMEN als Parameter mit eingeben könnte um die Sicht des Ausgangs auf den bestimmten UDT-TYP zu begrenzen.
Geht so etwas???
Meine Vorstellung...
Code:
VAR_INPUT
    UDT_NAME : ????;
    IN_WORD : WORD;
END_VAR
VAR_OUTPUT
    OUT_UDT : UDT_NAME;    
END_VAR   
OUT_UDT := als ??? (IN_WORD);
Ich habe keine Ahnung als was ich den Ausgang deklarieren sollte.
 
Das geht so wie du es vorhast leider nicht.

Wenn du als IN-Parameter einen UDT hast, dann muß dieser UDT dem SCL-Compiler beim Erstellen des FB (oder FC) bekannt sein. Ein beliebiger UDT als IN geht also nicht. Da der UDT als Pointer auf die Struktur übergeben wird muss natürlich auch dein "OUT-UDT" in Wirklichkeit ein IN-Parameter sein, da du ja die Adresse übergibst, an die geschrieben werden soll.

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nachsatz :

Im Ümkehrschluss geht natürlich dann folgendes :
Der Aufbau deines UDT ist dem FB (oder FC) bekannt. Dann kannst du zunächst mal den Code erstellen. Wenn du den UDT-Inhalt dann in ein WORD kopieren willst (weil der UDT diese Größe hat), dann geht das ganz einfach mit einer AT-Sicht auf dienen UDT ... also
Code:
Eingangs_UDT : UDT100 ;
word_Eingangs_UDT AT Eingangs_UDT : WORD ;
Die "künstliche" Variable "word_Eingangs_UDT" (wobei der Name hier natürlich beliebig ist) beinhaltet jetzt das, was in der Übergabe seht ...

Die AT-Sicht ist allerdings nur eine Möglichkeit für Variablen gleicher Breite ...
 
...das ist ärgerlich. Schade.

Die Frage hatte folgenden Grund: Ich möchte meinem Kunden und dessen Service in allen Bausteinen die für ihn relevat sind, einen Code in FUB hinterlassen. Nun muss ich ein (z.B. Status-) Wort in ein OPC-DB kopieren das ein UDT vom Typ WORD enthält. Leider kann der Befehl MOVE das nicht.

Vielleicht doch noch ne Idee??:rolleyes:

Danke

d4o
 
... wenn es dir um das blosse Umkopieren geht ...

Es gibt manchmal so Dinge, die gehen halt nicht in FUP - in AWL könntest du das ohne Weiteres machen und ich glaube nicht, dass das Ganze dadurch unübersichtlich wird. Ich versuche es "meinen" Leuten auch immer mundgerecht zu bauen, aber manchmal geht es halt nicht ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Tja, das ist richtig. Aber in diesem Falle hat der Verfahrensmann des Kunden mit einem Pflichtenheft geglänzt das monatelange Arbeit enthält. Somit gehe ich davon aus das Er und auch gewisse andere "wichtige" Personen Wert darauf legen ein Produkt zu erhalten das ihren Vorstellungen entspricht. Daher habe ich mir mit der strikten Trennung des Programmablaufes in FUB für Kunde und x-was für meine eigenen Funktionen, nicht unbedingt einen Gefallen getan. :rolleyes:

Gruß

d4o
 
Wieviele verschieden belegte UDT's hast du denn ?
Prinzipiell kannst du das UDT_to_WORD (und umgekehrt) ja wie in meinem Nachsatz beschrieben machen. Der Compiler muß ja nur den Aufbau des UDT kennen ... Wenn es nicht so viele verschiedene sind, dann ist das doch lösbar ...
 
Zurück
Oben