Wie dehe ich mit dem UDT der FM-305-1 um?

Tigerkroete

Level-1
Beiträge
245
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie gehe ich mit dem UDT der FM-305-1 um?

Ich hatte bisher mit UDTs nichts zu tun, weiß aber so ungefähr, was das ist.
Ich habe eine entsprechende Passage aus dem Handbuch der FM-350 angehängt.
Wenn hier von dem DB gesprochen wird, meinen sie damit in Wirklichkeit den tatsächlichen UDT? Oder muss ich den UDT erst zu diesem DB machen? Falls ja, wie mache ich das?
Bisher dachte ich, dass ich einfach die Funktion und den UDT bei mir einfügen muss. Jedoch ist das anscheinend falsch, da ich wie im letzten Abschnitt beschrieben, versuchte, die Baugruppenadresse automatisch einfügen zu lassen, jedoch scheint er einen DB zu verlangen, keinen UDT.

Bin für Aufklärung sehr dankbar.

Viele Grüße,
Tigerkroete
 

Anhänge

  • Auszug.JPG
    Auszug.JPG
    45,9 KB · Aufrufe: 14
Zuletzt bearbeitet:
Hallo,

du gehst in deinem Projekt auf S7-Baustein einfügen, wählst Datenbaustein.

Im sich öffnenden Dialog siehst du folgendes:

attachment.php


ganz rechts gibst du an welchem UDT er zugehören soll...
 

Anhänge

  • DB vom Typ UDT.jpg
    DB vom Typ UDT.jpg
    102,8 KB · Aufrufe: 19
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank.
Ich hatte genau an der Stelle auch einmal geguckt umzu sehen, was ich dort auswählen kann. Doch leider konnte ich nichts auswählen. Das lag aber daran, dass ich zu dem Zeitpunkt den UDT noch garnicht eingefügt hatte, ich Depp.
Ich bin Dir echt dankbar!
 
Udt

Mit den UTD haben folgende Funktion: Man legt in einem DB einen bestimmten Speicherbereich fest, der von einer Funktion genutzt wird.

Z.B. Du hast eine Funktion in einem FC hinterlegt der ein Analogwert von einem
PT 100 auswertetet, nennen wir diese PT100. Diese Funktion benötigt ein bestimmten Speicherbereich in einem DB auf den Sie zugreift. Jetzt kannst du folgendes machen.

Du legst im UTD deine Adressen fest zB.

Temp .Istwert REAL 0.000000e+000 0.000000e+000
Temp.Messbereich_Anfang REAL 0.000000e+000 0.000000e+000
Temp.Messbereich_Ende REAL 0.000000e+000 0.000000e+000

Den UTD nennen wir mal Temp.

Nun öffnest du einen DB z.B. 40 und trägst den UTD Temp ein.

Adresse Name Struktur
0.0 Temp_A "UDT Temp"
12.0 Temp_B "UDT Temp
24.0 Temp_C "UDT Temp
=36.0

Wenn du jetzt deine Funktion in einem FB aufrufst sieht das so aus

FB XY

Netzwerk 1

Call PT100 // Behälter A
In = PEW 200 / Analogwert vom Sensor
Out = MD 200 / skalierte Temperatur eines PT100

Netzwerk 2

Call PT100 // Behälter B
In = PEW 200 / Analogwert vom Sensor
Out = MD 200 / skalierte Temperatur eines PT100

Netzwerk 3

Call PT100 // Behälter C
In = PEW 200 / Analogwert vom Sensor
Out = MD 200 / skalierte Temperatur eines PT100

Jetzt liegen die Daten der Temperatur vom Behälter A in den Adressen 0.0 bis 11.0, für B in 12.0 bis 23.0 usw. So kannst du dir ein Funktion schreiben und x mal Aufrufen (je nach Adressen in DB) und diese auswerten.

VS
 
Hallo Treser-Olt,
erstmal vielen Dank für die Erklärung. Leider verstehe ich eine Sache nicht. Also das Anlegen des UDTs und des entsprechenden DBs habe ich verstanden. Doch ich verstehe nicht, dass bei den drei Funktionsaufrufen die Adressen alle gleich sind. Würde nicht immer an die gleiche Stelle im DB geschrieben? Habe da anscheinend noch einen grundsätzlichen Denkfehler.

Gruß,
Tigerkroete
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Natürlich muß man die Adresse vor jedem Aufruf des FC ändern.

Eine Möglichkeit ist, in dem DB in den ich die UTD`s eintrage lasse ich die ersten 4 Bytes frei, um dort die Anfangsadresse zu hinterlegen. Bevor ich jetzt einen FC aufrufe muss ich in den Zeiger meine Anfangsadresse stellen.

L P#DBX 4.0 // Speicherbereich für Zeiger
T DB40.DBD0 // DB in dem die UDT hinterlegt sind

Dann Aufruf der Funktion im FC wird der Zeiger geladen

L AR1 DB40.DBD0 // Zeiger für Adressanfang
Dann das Programm
L [AR1,P#0.0] // Dann irgend eine Funktion (in dem Fall wäre die die Adresse 0.0 + 4.0)
Usw.

Am Ende wird der Zeiger für nächste Funktion adressiert

L AR1 DB40.DBD0 // Zeiger für Adressanfang
+AR1 P# 6.0 // Anzahl der definierten Bytes im UDT
T AR1 DB40.DBD0 // Zeiger für Adressanfang

Und so steht beim nachsten Aufruf der Funktion die richtige Adresse im Zeiger
 
Zurück
Oben