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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: UDT als FC-Parameter

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    als Neuling in der STEP7-Welt (V5.5) suche ich momentan nach Mitteln und Wegen, wie man ein SPS-Programm möglichst sauber strukturiert aufbauen kann.
    Dazu folgendes Detailproblem:

    Teil 1:

    Folgende Bausteine sind vorhanden:

    UDT1 Usertyp
    DB1 vom Usertyp
    DB2 mit Element UTE vom Usertyp
    FC1 mit In-Out-Parameter IOPar vom Usertyp

    Funktionsaufruf:
    Code:
    CALL "FC1"
        IOPar := DB1 // funktioniert nicht
    
    CALL "FC1"
        IOPar := "DB2".UTE // funktioniert
    Warum ist das so und wo in der Dokumentation kann man so etwas nachlesen?

    Teil 2:

    Folgende Bausteine sind vorhanden:

    UDT1 Usertyp_Oberelement
    UDT10 Usertyp_Unterelement

    DB1
    mit Element UOE vom Usertyp_Oberelement
    mit Element UUE vom Usertyp_Unterelement

    FC1 mit In-Out-Parameter IOParUOE vom Usertyp_Oberelement
    FC10 mit In-Out-Parameter IOParUUE vom Usertyp_Unterelement

    Aufruf von FC10 in FC1:
    Code:
    CALL "FC10"
        IOParUUE := #IOParO.UUE // keine Chance
    
    CALL "FC10"
        IOParUUE := "DB1".UOE.UUE // funktioniert ist aber ein verdeckter Zugriff auf GlobalDB
    Wieder die Frage: Warum ist das so und wo in der Dokumentation kann man so etwas nachlesen?
    Eigentlich wollte ich durch die Strukturierung verdeckte Zugriffe auf Globaldaten vermeiden.

    Ich hoffe ich habe mein Anliegen verständlich formuliert und jemand von Euch Profis kann helfen.

    Grüße
    Reinhard
    Zitieren Zitieren UDT als FC-Parameter  

  2. #2
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Hallo,

    Struktur (UDT) anlegen. Im DB einfügen.
    Die UDT öffnen. Alles markieren.

    Im FC oben bei IN (oder IN/OUT usw..) einfügen.

    Beim Aufruf des FC die UDT anlegen (Rechtsklick, Symbol einfügen, Structur im DB suchen und auswählen.

    Code:
    CALL "FC1"     IOPar := DB1 // funktioniert nicht  
    CALL "FC1"     IOPar := "DB2".UTE // funktioniert
    Erster Aufruf: übergabe IOPar kann ja kein kompletter DB sein. Die Struktur, die von "aussen angelegt wird, muss die gleiche sein, wie die im Deklarationsteil des FC. Deswegen stimmt Aufruf 2 ja auch überein.


    Code:
    CALL "FC10"     IOParUUE := #IOParO.UUE // keine Chance  
    CALL "FC10"     IOParUUE := "DB1".UOE.UUE // funktioniert ist aber ein verdeckter Zugriff auf GlobalDB
    Aufruf 1. Hast du #IOPar0.UUE im Deklarationsteil (In,Inout,Stat,Temp) des aufrufenden FC/FB? (Also in diesem Baustein?)

    Aufruf 2. Dort übergibts du wieder die richtige Struktur an den FC10.

  3. #3
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Ein Datenbaustein ist selber immer eine Struktur.
    Also das oberste Strukturelement ist immer DB<nummer> oder eben der symbolische Name des Datenbausteins.
    Dass dieses so ist, sieht daran dass man im DB-Editor immer der erste Eintrag in der grauen nicht änderbaren Zeile Typ Struct und am Ende End_Struct eingetragen wird. Der Name ist leer, da dieser eben die DB-Nummer bzw. der Name ist.

    Dein Aufruf
    Code:
    CALL "FC10"
        IOParUUE := #IOParO.UUE // keine Chance
    kann nicht funktionieren weil #IOParO.UUE hier noch keinen Speicher hat.
    Du musst aus der UDT-Schablone erst eine Instanz in einem Datenbaustein anlegen.

    Andere Möglichkeit:
    Wenn du den Aufruf in einen FB packst und in den temporären oder statischen Daten eine Variable vom Typ "IOParO" mit Namen "IOParO" anlegst.

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    Wenn du Strukturen übergibst hat das leider grundsätzlich den Nachteil, das Zugriffe im FB/FC auf diese Struktur nicht in der Referenzliste erscheinen. Man findet sich daher u.U. in derartigen Programmen nur schwer zurecht. Das ist der Hauptgrund, warum ich das nur in Ausnahmefällen mache und lieber direkt mit den Daten aus einem oder mehreren Global-DB arbeite. Aber das ist ja nicht nur bei Strukturen so, auch bei indirekter Adressierung geht die Übersicht schnell verloren.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  5. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Reinhard.Steinbrueck (14.07.2011)

  6. #5
    Registriert seit
    30.06.2011
    Beiträge
    4
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Wow, das ging aber schnell! Vielen Dank für die zahlreichen Antworten.

    @Verpolt
    Struktur (UDT) anlegen. Im DB einfügen.
    Die UDT öffnen. Alles markieren.

    Im FC oben bei IN (oder IN/OUT usw..) einfügen.

    Beim Aufruf des FC die UDT anlegen (Rechtsklick, Symbol einfügen, Structur im DB suchen und auswählen.
    und
    Hast du #IOPar0.UUE im Deklarationsteil (In,Inout,Stat,Temp) des aufrufenden FC/FB? (Also in diesem Baustein?)
    Ich denke das Anlegen der UDTs, DBs und Funktionsparameter sollte soweit funktioniert haben. Jedenfalls konnte ich in den Editoren die Strukturelemente gemäß meinen Wünschen sehen (auch im Schnittstellenbaum im Deklarationsteil der FCs)

    Ich möchte kein langes Gerede über offensichtliche Irrwege machen aber:
    Ich war intuitiv davon ausgegangen, dass ein von einem UDT abgeleiteter DB mit einem vom gleichen UDT abgeleiteten Parameter kompatibel ist.

    @Thomas_v2.1
    kann nicht funktionieren weil #IOParO.UUE hier noch keinen Speicher hat.
    Du musst aus der UDT-Schablone erst eine Instanz in einem Datenbaustein anlegen.
    Ich dachte die Struktur wird als Zeiger übergeben, d.h. zur Laufzeit tritt der Speicherbereich im (bereits angelegten) DB1 (also DB1.UOE) an die Stelle des Parameters. Aber da habe ich wohl zuviel vom Compiler erwartet.

    @Ralle
    Der Hinweis mit der Referenzliste ist wirklich ein Punkt den man bei der Konzeptfindung bedenken sollte!

    Danke nochmal für Euer Interesse. Ich muss einfach noch mehr Erfahrungen sammeln, um kreativ mit STEP7 umgehen zu können.

  7. #6
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard

    Zitat Zitat von Reinhard.Steinbrueck Beitrag anzeigen
    um kreativ mit STEP7 umgehen zu können.
    Sind dies nicht zwei Gegensätze die du zusammenbringen willst?
    Step7 und kreativ?


    bike

  8. #7
    Registriert seit
    30.06.2011
    Beiträge
    4
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Sind dies nicht zwei Gegensätze die du zusammenbringen willst?
    Step7 und kreativ?
    Oh, oh und das von einem erfahrenen Benutzer ... das raubt mir die letzten Illusionen. Aber mal im Ernst und zu Deiner Beruhigung: bunte Bilder malen wollte ich nicht. (Ich sollte wohl besser auf meine Wortwahl achten. )

  9. #8
    Registriert seit
    19.11.2008
    Ort
    Schweigen am Weintor
    Beiträge
    707
    Danke
    191
    Erhielt 161 Danke für 92 Beiträge

    Standard

    Zitat Zitat von bike Beitrag anzeigen
    Sind dies nicht zwei Gegensätze die du zusammenbringen willst?
    Step7 und kreativ?


    bike
    ich suche gerade den daumen nach unten bottum

    kreativität hängt ja wohl vom programmierer ab oder nich? und ich finde mit step7 hat man ein gutes werkzeug dafür bei großen projekten wünschte ich mir noch eine ordner struktur im programm (in tia "würg" vorhanden) aber immernoch handlicher wie z.b. twincat o.ä. aber eigentlich ist ja alles irgendwie gewohnheit und erfahrung

  10. #9
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard

    Zitat Zitat von erzteufele Beitrag anzeigen

    kreativität hängt ja wohl vom programmierer ab oder nich? und ich finde mit step7 hat man ein gutes werkzeug
    Programmieren ist meiner Meinung nach zuerst und hauptsächlich Handwerk.
    Wie du auch schreibst: ein gutes Werkzeug


    bike

  11. #10
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.241 Danke für 973 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von bike Beitrag anzeigen
    Programmieren ist meiner Meinung nach zuerst und hauptsächlich Handwerk.

    bike


    Die Einschätzung ob Kunst oder Handwerk liegt im Auge des Betrachters.
    Viele hier im Forum betreiben Programmierung mit der Leidenschaft und dem Herzblut eines Künstlers! Und in vielen hier vorgestellten oder diskutierten Lösungen steckt mehr Kreativität als in so manchem Gemälde.
    Also ich persönlich teile deine Meinung nicht!

    Gruß
    Dieter

  12. Folgende 3 Benutzer sagen Danke zu Blockmove für den nützlichen Beitrag:

    erzteufele (15.07.2011),rostiger Nagel (15.07.2011),vierlagig (15.07.2011)

Ähnliche Themen

  1. S5 - FB - IN/OUT-Parameter
    Von Hawkster im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 26.10.2012, 18:53
  2. TON Parameter ?
    Von xinix im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 16.04.2011, 19:05
  3. UDT als IN-Parameter am FB
    Von OB21 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 15.08.2010, 17:14
  4. UDT als IN-Parameter vom FC
    Von astranik im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 18.05.2009, 15:01
  5. 611 A Parameter
    Von Tellme im Forum Antriebstechnik
    Antworten: 1
    Letzter Beitrag: 05.12.2006, 22:18

Stichworte

Lesezeichen

Berechtigungen

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