# UDT Bausteine



## redscorpion (13 Juni 2011)

Hallo alle,

Habe eine Frage, habe in Bücher nachgelesen, aber irgendwie ist zu wenig über UDT Bausteine zu finden.

Kann mir einer erklären für was man diese UDT Anwenderdefinierten Bausteine genau benötigt ?

Ist das der gleiche Baustein wie ein DB, wie greift man´auf einen UDT zu.... ?

Vieleicht hat jemand lust mir das zu erklären, würde mich sehr freuen darüber.

Gruß
und Danke im voraus


----------



## rostiger Nagel (13 Juni 2011)

Ein anwenderdefinierte Datentyp (UDT) entspricht einer Struktur (Zusammenfassung
von Komponenten mit beliebigen Datentyp), die Global gültig ist. Es können anwender-
definierten Datentypen Eingesetzt werden, wenn sich eine Datenstruktur häufig im
Programm befindet oder einer Datenstruktur ein Namen gegeben werden soll.

Als Beispiel könntest du für einen Regler eine Struktur für die Parameter erstellen,
diese kannst du dann im einen Datenbaustein einfach einfügen und dann endsprechend
benennen "Regler_1"; "Regler_2".


----------



## Ralle (13 Juni 2011)

In einer UDT kann man eine Datenstruktur anlegen aus beliebigen Elementen, die auch in einem DB benutzt werden können.

z.Bsp.:

Name: String
Vorname: String
Geburtsdatum: Date

Diese UDT kann man dann in einen DB legen und zwar entweder einfach im DB einfügen oder aber auch als Array of UDTx
Die UDT allein nützt dir also noch nicht, du mußt sie in einem DB auch als Variable deklarieren.

Dann hat man z.Bsp. ein Array

Teilnehmer Array[1..100] of UDTx

und kann mit Teilnehmer[1].Name usw. arbeiten.

Wobei der Index von Teilnehmer leider nur in SCL sinnvoll variabel verwendet werden kann, in AWL muß man indirekt adressieren und da nutzt dann die UDT auch nicht viel.

Ich sehe 2 Vorteile:

1. Mit UDT kann man einen DB schnell anlegen und gut strukturieren. Willst du obiges Beispiel per Hand anlegen, braucht das etwas mehr Zeit.
2. Du kannst UDT in einem FC/FB Variable deklarieren und anlegen. Dann kannst du z.Bsp. einen Input (inTeilnehmer) als UDT deklarieren, in einem DB, wie oben beschrieben Teilnehmer anlegen und direkt die UDT aus dem DB an den FC/FB als Input anlegen (Teilnehmer[10]). IM FB kannst du dann wie gewohnt mit den Variablen der UDT weiterarbeiten also mit 

#inTeilnehmer.Name

In SCL kann man das alles m.E. am besten nutzen und einsetzen, aber auch in AWL ist das durchaus praktisch.


----------



## redscorpion (13 Juni 2011)

*Udt*

Ist dann ein UDT so was wie ein Inhaltsverzeichnis, wo ich mir bestimmte Daten Sammeln kann und sie zu einem späteren zeitpunkt nur in einen DB kopiere ?


----------



## rostiger Nagel (13 Juni 2011)

ähm...änlich. UTD kannst du dir in etwa wie eine Art Sammlung on
Variabeln vorstellen, eine Art Makro. Dieses Makro kannst du dann wieder
in Bauteine einfügen.


----------



## redscorpion (13 Juni 2011)

diese UDT Bausteine werden aber nicht in der CPU SPS abgespeichert oder. Also gehört wenn ich es richtig verstehe ein UDT meinetwegen UDT 1 mit Global DB 1 zusammen.kannst du mir vieleicht wenn du lust hast so ein kleines Beispiel Schritt für Schritt erklären oder mit Bilderr vereinfachen.

Danke dir


----------



## rostiger Nagel (13 Juni 2011)

Ich habe jetzt kein Step 7 zu Hand, aber es ist nicht schwer:
Du fügst ein UDT1 in deine Bausteinliste ein und nennst diesen "Test"
Jetzt öffnest du ihn mit einen Doppelklick und fügst ein paar Variabeln ein. 
Ein    Bool
Aus   Bool
HM    Bool
Das ganze abspeichern, jetzt fügst du in dein Bausteinverzeichnis eine DB1 ein
und gibst diesen auch einen Namen "Test_UDT", öffne diesen Baustein und 
schreibe in der ersten Zeile "Antrieb_1"  als Datentyp nimmst du jetzt den
UDT1, das gleiche kannst du jetzt beliebig oft wiederholen. 

Auf diese Variabeln kannst du jetzt in Bausteine beliebig zugreifen.


----------



## redscorpion (13 Juni 2011)

Danke Helmut du hast mir sehr weitergeholfen


----------



## Larry Laffer (13 Juni 2011)

Hallo,
das ist nicht so einfach, sich das vorzustellen, wenn man gerade keine Anwendung dafür hat.
Ein UDT ist eine Struktur, die festlegt, wie ein Speicherbereich benutzt werden soll.
Bleib mal bei dem Beispiel von Helmut und leg dir so eine UDT, wie beschrieben, an.
Nun erzeuge in einem DB eine Variable mit dem Namen "mein_Motor" und leg als Datentyp dafür den Namen der UDT fest. Nun kannst du in deinen Programmen die Variablen der Struktur symbolisch so verwenden : U "mein_DB".mein_Motor.EIN  (z.B.).

Gruß
Larry


----------



## Der Pfälzer (13 Juni 2011)

Larry Laffer schrieb:


> ... die Variablen der Struktur symbolisch so verwenden : U "mein_DB"*.*mein_Motor*.*EIN  (z.B.).



Hallo,

und achte auf die Punkte.

Gruß Roland


----------



## redscorpion (13 Juni 2011)

Danke für eure bemühungen ihr habt mir sehr weitergeholfen


----------



## Paule (13 Juni 2011)

Larry Laffer schrieb:


> Hallo,
> das ist nicht so einfach, sich das vorzustellen, wenn man gerade keine Anwendung dafür hat.
> Ein UDT ist eine Struktur, die festlegt, wie ein Speicherbereich benutzt werden soll.


Also ich bezeichne den UDT gerne als Muster.
Der UDT wird (im Regelfall) strukturiert angelegt und dient dann als Muster für den DB der diesen UDT aufruft.
Dabei kann der DB ganz aus einem UDT (Muster) bestehen oder aus mehreren (Arrays) oder aus verschiedenen.
Die UDT's gibt es nur Offline.
Wenn ein UDT geändert wird, muss der entsprechende DB, in dem dieser UDT verwendet wird, frisch übersetzt und anschließend in die SPS übertragen werden.
Wird ein aufgerufener UDT gelöscht oder geändert und nicht übersetzt, kann der entsprechende DB nicht mehr symbolisch angezeigt werden.


----------

