Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 5 von 5

Thema: UDT in einem FB verwenden

  1. #1
    Registriert seit
    25.02.2014
    Beiträge
    23
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich habe mich mit dem UDT beschäftigt, und verstanden welche 2 Kernaufgaben er hat. Zum einen als Stempel bzw. Vorlage oder Makro für DBs (habe ich auch ohne weitere Probleme in Step7 umgesetzt, da es jetzt auch nicht so schwer ist..)

    Jedoch habe ich mit der anderen Aufgabe von UDTs noch Probleme bei der Anwendung. Im Siemens Handbuch wird geschrieben „UDTs können wie elementare Datentypen oder zusammengesetzte Datentypen in der Variablendeklaration von Codebausteinen (FC, FB, OB) werden“. Leider finde ich hierzu keine Beispiele anhand man diese Aussage nachvollziehen kann. Ich habe mal einen UDT erstellt der wie im angehängten Bild 1 aussieht. Nun dachte ich mir, dass ich jetzt diesen UDT für Variablen in einem FB verwenden kann. Hierzu habe ich diesen UDT1 als „IN“ Parameter (für die Eingänge) und als „IN_OUT“ Parameter (für die Schütze) definiert und die Formalparameter des UDT1 bei der einfachen Wendeschützschaltung verwendet. Wenn ich diesen FB jetzt jedoch in einem OB1 aufrufe, so kann ich nicht wie ich es mir dachte jedem dieser UDT1 Parameter die eigendlichen Formalparameter zuweisen (zB –S0 = e0.0), sondern es steht da nur „IN0“ und „IN_OUT0“.


    Wie wird denn jetzt zB. ein UDT sinnvoll bei einem FB eingesetzt? Habe auch schon im Forum danach gesucht jedoch hat es nicht wirklich weitergeholfen, da dies doch eine ziemliche Anfängerfrage ist und die anderen Fragen doch meist tiefgründiger sind..
    Ich hoffe ihr könnt mir so kompetent helfen wie bei meinen anderen Fragen!

    Mfg Harry
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren UDT in einem FB verwenden  

  2. #2
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.345
    Danke
    451
    Erhielt 691 Danke für 516 Beiträge

    Standard

    Im FB hast du deinen IN-Parameter "IN0" getauft, insofern ist die Anzeige des FB richtig.

    Wenn du in deinen Instanz-DB (DB1) schaust, wird du auch sehen dass die Struktur mit IN0.Motor_Ein_Rechtslauf etc. aufgelöst ist.

    Wenn du dem FB jetzt allerdings was übergeben willst musst du auch eine Variable vom Typ UDT1, die dem FB dann übergeben kannst, erstellen.
    Du kannst z.B. in einem GlobalDB ein Variable "Motor1" vom Typ anlegen und diese an den IN0 des FB als DB2.Motor1 dranschreiben.

    Insofern funktioniert das gleich als würdest du einen Integer übergeben.
    Geändert von RONIN (23.02.2015 um 19:09 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  3. #3
    Registriert seit
    20.02.2014
    Beiträge
    75
    Danke
    13
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hallo

    Zum Beispiel kannst du in einem DB mit der UDT Speicherbereiche erzeugen (hast du ja anscheinen auch schon wie oben geschrieben gemacht) und diesen Speicherbereich dann am INOUT eines FB aufrufen. Damit kann dieser dann arbeiten. Benutz ich unter anderem, wenn ich für einen FB Parameter habe, die ich auch über die Visu einstellen muss...


    Gruß Andres
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: jpg UDT.JPG (177,3 KB, 34x aufgerufen)

  4. #4
    Harry_99 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    25.02.2014
    Beiträge
    23
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Erstmal danke für eure Antworten, hat auch funktioniert mit der Lösung von RONIN. Jedoch ergeben sich mir hierzu zwei Fragen:

    1.:
    Ist das eine sehr umständliche Methode. Ich verstehe zwar den Sinn dahinter, dass man dadurch viele weitere Steuerungen aufgrund dieser Vorlage aufbauen kann, jedoch würde das komplett gleiche Beispiel anhand von einer Multiinstanz weniger Bausteine benötigen und auch übersichtlicher sein, da ich da dann ja nur 3 Bausteine verwende.. Verwendet man UDTs in FBs überhaupt so wie ich es hier verwendet habe, und wenn nein wie werden die denn dann sinnvoll eingesetzt? Habe schon in diversen Unterlagen von Siemens und der Hilfe nachgeblättert, jedoch wird fast ausschließlich auf die Verwendung von UDTs als Vorlage für DBs angegeben.

    2.:
    Ich habe in diesem Thread ( UDT praktischer Umgang ) gesehen, dass in den UDTs Ein- und Ausgänge definiert worden sind, und in den FBs jedoch diese ganzen UDTs nur im "STAT" Bereich verwendet bzw. aufgerufen worden sind. Was ist hier denn jetzt der Unterschied bzw. welche Methode ist denn da jetzt besser?

    Danke im Voraus, mfg
    Eines der traurigsten Dinge im Leben ist, dass ein Mensch viele gute Taten tun muss, um zu beweisen, dass er tüchtig ist, aber nur einen Fehler zu begehen braucht, um zu beweisen, dass er nichts taugt.

    George Bernard Shaw (1856-1950), ir. Schriftsteller

  5. #5
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    776
    Erhielt 646 Danke für 492 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das kommt halt drauf an was du machen willst.
    Ich verwende UDTs z.B. vorwiegend dazu um Objekte mit einer schmalen Schnittstelle auszurüsten.

    z.b. ich habe ein Objekt klappe. Dem will ich Datenpunkte über geben z.B.
    befehl öffnen, Befehl schliessen, Störung von der Klappe zurückmelden, Sollposition anfahren, LWL Ring zustand zurückmelden, Betriebsart melden etc.

    Das kann 20 Variablen an der Schnittstelle pro Klappe bedeuten. Wenn ich jetzt 100 Klappen habe, ist das n haufen Arbeit die Schnittstelle für jede Klappe neu abzufüllen. Mit UDT hängt man dann nur eine Variable vom typ des UDTs an, anstatt 20 Variablen anzuschliessen.
    Wenn der UDT dann an IN_OUT hängt kann ich sowohl variablen entgegen nehmen und verarbeiten als auch ausgeben für das aufrufende Programm.

    Man muss im Objekt auch nicht zwingend den ganzen UDT verwenden. Man hat zwar alle Strukturbestandteile drin, das sind aber nur verweise die nicht beschrieben oder gelesen werden müssen.

    Es spart also arbeit ganze Strukturen zu übergeben.
    Wenn man jetzt eine weitere Variable braucht, dann ändert man halt den UDT. Generiert die Konsistenz übers Programm und hat automatisch die Variable überall drin.

    Wichtig zu wissen ist noch. Ein UDT wird an der Schnittstelle nicht im Instanzdb landet. Will heissen im gegensatz zu einfachen Typen muss an einem UDT zwingend was angehängt werden, schnittstelle unbelegt lassen ist böse.

    mfG René
    Geändert von vollmi (24.02.2015 um 11:30 Uhr)

Ähnliche Themen

  1. Antworten: 12
    Letzter Beitrag: 15.05.2014, 23:22
  2. UDT in einem DB
    Von Bensen83 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 10.08.2010, 13:39
  3. UDT Array Input an einem FC
    Von TagebauCoder im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 04.10.2009, 02:29
  4. Variablen aus einem UDT Baustein
    Von THEM im Forum HMI
    Antworten: 3
    Letzter Beitrag: 24.03.2009, 21:34
  5. Blockmove in einem FC (UDT als IN Parameter)
    Von Jochen Kühner im Forum Simatic
    Antworten: 20
    Letzter Beitrag: 30.09.2008, 09:37

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •