Step 7 UDT an FB "übergeben"

m.beeken

Level-2
Beiträge
38
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich würde gerne einen DB (der aus einem UDT erstellt worden ist) an einem FB übergeben.
Der DB ist folgendermaßen erstellt worden: Neues Objekt einfügen / Datenbaustein / DB vom Typ UDT1.
Der FB hat einen In/Out Formaloperanden vom Typ UDT1.

Ist es möglichen, diesen DB an den Formaloperanden zu übergeben?
Bei mir funktioniert es leider nicht. Wie muß der Aufruf in AWL aussehen?

Vielen Dank für eure Hilfe.

Michael
 
Willst Du die DB-Nummer, oder einen Zeiger auf den gesamten UDT als Variable übergeben, oder wie meinst Du das?

Zum Erstellen:
Also ich erstelle eigentlich immer einen Global-DB, und füge dann da die UDTs ein.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich möchte einen Zeiger auf den gesamten UDT übergeben.
Wenn ich einen Global-DB erstellen und darin dann UDT1 Aufrufe funktioniert es bei mir auch.
Geht es denn nicht " direkt"?

Folgender Hintergrund:
DB-Name = System
Variablenname im DB für den Aufruf vom UDT1 = System
==> Aufruf der Variablen aus dem DB =" System".System.Variablenname

Ich möchte wenn geht nicht diesen Doppelaufruf vom System, also "System".Variablenname.
Deshalb habe ich den DB über: Objekt einfügen / Datenbaustein / DB vom Typ UDT1 erstellt.

Gibt es auch so eine Möglichkeit den Zeiger zu übergeben?
 
Ich staune grade auch, denn ich hab das die Tage noch benutzt, aber in SCL. Und dort funktioniert das.
Aber in AWL oder FUP scheint das wirklich nicht zu funktionieren.
 
Ich glaube, ich verstehe Dein Problem nicht ganz, ein UDT kann doch nur Teil eines DBs sein, oder weiß ich da wieder was nicht?
Ist doch im Prinzip das gleiche wie Struct, oder?


trotzdem mal, wie ich DB-Bereiche übergebe, auch wenn es wahrscheinlich nicht Dein Problem ist:
Also ich (alter AWLer) mache das (UDT hin oder her) eigentlich immer so:
(Beispiel für'n FC)
eine in_Var (oder ebenio_Var) vom Typ ANY anlegen:

in_ANY_copy_from heißt die hier. Dann übergebe ich die Bestandteile an temporäre Variablen

Code:
  L     P##in_ANY_copy_from //im FB: LAR1 P##in_ANY_copy_from 
      LAR1  
      L     W [AR1,P#4.0]
      T     #t_DB_Nr_copy_from

      L     D [AR1,P#6.0]
      T     #t_Start_Adress_copy_from

      L     W [AR1,P#2.0]
      T     #t_Anzahl_Kopiervorgaenge
Man kann aus dem Byte 6 auch noch den Typ (Lokaldaten/Merker/DB) auslesen und im Byte 1 ob sich's um Wörter/Bits/DWörter oder was auch immer handelt.

und dann kann ich auf den DB-Bereich zugreifen, natürlich nicht symbolisch, sondern:

Code:
  AUF   DB [#t_DB_Nr_copy_from]
   L     DBB [AR1,P#0.0]

der Aufruf sieht dann so aus:

Code:
      CALL  "Copy_byte_All_optimiert"
       in_ANY_copy_from:="DB_Einstellungen_Default".Zufuehrband //bei Dir dann wohl: "Sytem".System
       in_ANY_copy_to  :="DB_Einstellungen".Zufuehrband

Wie schon befürchtet, das ist wahrscheinlich nicht was Du willst?

Dann sorry ;-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

@mausi17 Danke! Wie du schon vermutet hast, löst das nicht mein Problem.

@Thomas_v2.1 In SCL funktioniert es bei mir auch.

Hat denn jemand einen Workaround wie der Aufruf in AWL bzw. FUP funktionieren könnte?

Michael
 
Hi!

Also das muss definitiv gehen.

Du legst in der Schnittstelle des fb eine variable an mit datentyp "udt1" (also dein udt).

beim Aufruf des fb beginnst du dann an dieser variable zu tippen "db". Dann muss er ja deinen db schon auflisten. Hier "klickst du dich durch" bis zur udt-struktur und wählst diese aus.

Dann muss er die Struktur an den fb übernehmen.

Der operandenvorrang sollte allerdings auf "symbolisch" sein, sodass bei Änderungen die Adresse dem Symbol nachgezogen wird.

Hab ich doch auch schon x-mal So gemacht.


Gruß,

Ottmar
 
Hallo Ottmar,

bei mir funktioniert das definitiv bei AWL bzw. FUP nicht!
Beachte: Der DB ist folgendermaßen erstellt worden: Neues Objekt einfügen / Datenbaustein / DB vom Typ UDT1

Danke für deine Hilfe!

Gruß,

Michael
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi!

Achso, jetzt kligelt es auch bei mir. :-D

Bei meinen Einsätzen habe ich den udt wie beschrieben als variable mit datentyp udt deklariert. Wenn man einen db vom udt ableitet geht es nicht. Stimmt.

Gruß,

Ottmar
 
Zurück
Oben