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

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

Thema: Zusätzlich zu einer Instanz noch Struktur anlegen?

  1. #1
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo. Habe mal ne Grundsatzfrage.
    Ich habe einen Funktionsbaustein zur Ansteuerung von einem Ventil.
    Nun habe ich in dem Programm "Ventil_A" eine Instanz dieses Bausteins deklariert.
    Sollte ich nun noch eine Struktur anlegen, welche ich auf die verschiedenen Eingänge, bzw. Ausgänge des Bausteins lege??? Oder würdet ihr eher den Baustein ohne Zuweisungen aufrufen und dann in den weiteren Programmen so: Ventil_A.Indtanz.Eingang drauf zugreifen?

    Der Nachteil ohne Struktur wäre, dass ich auf die Ausgänge des Basteins außerhalb des selbigen nicht schreibend zugreifen kann.

    Nachteil mit Struktur: ich verbrauche fast den doppelten Speicher. Nämlich einmal
    Für die Struktur und einmal für die Instanz.

    Was meint ihr?
    Zitieren Zitieren Zusätzlich zu einer Instanz noch Struktur anlegen?  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo Bensen,

    aus meinem Verständnis ist eine Struktur nicht unbedingt etwas, dass man auf eine Schnittstelle legt wenn es einem doch eigentlich um die Einzel-Elemente in der Struktur geht.

    Da es dabei aber keine wirklichen Beschränkungen gibt würde ich es (persönlich) immer so machen, wie ich es für meine Anwendung am besten gebrauchen kann.

    Im Falle deines Ventil-Bausteins würde ich sagen, dass du ganz gut damit bedient bist, alle Einzelemente auf die Schnittstelle zu legen ...

    Gruß
    Larry

  3. #3
    Bensen83 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Sorry war ein Missverständnis.
    Meinte auch die einzelnen Elemente des Basteins in eine Struktur zu legen
    Nicht eine Struktur auf den Baustein.

    Meine frage war jetzt eigentlich ob man besser die ein und Ausgänge des
    Basteins direkt anspricht, oder dort die Elemente einer bspw. Globalen Variable vom Typ Ventil drauf legt.

    Also vereinfacht Eingänge: Freigabe, vor, zurück
    Ausgänge: out_vor, out_zurück

    Jetzt eine Struktur vom Typ Ventil anlegen, welche diese Variablen enthält und diese auf die bausteinelemente legen. --> dann im Programm bspw. So die Freigabe. Setzen: global.variable_ventil. Freigabe := True;

    Oder direkt drauf zugreifen? Also so:

    Programm.bausteininstanz.freigabe := True;

    Was ist besser???
    Zitieren Zitieren Missverständnis  

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Welchen Sinn hat denn in diesem Fall noch die Struktur ? Oder was hilft sie dir hier ?

    Der Sinn einer Struktur (mal so ins unreine geschrieben) ist es, Elemente (ggf. unterschiedlichen Typs), die zusammen gehören aber nicht unbedingt als zusammengehörig erkannt werden, zusammen zu fassen - also eine Art Gliederung um eine bessere Übersichtlichkeit zu erzeugen. Diese Aufgabe erfüllt in deinem Fall die Instanz schon.

    Gruß
    Larry

  5. #5
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    745
    Danke
    27
    Erhielt 164 Danke für 142 Beiträge

    Standard

    Ich bin auch für den direkten Zugriff auf die FB-VAR_INPUT/OUTPUT, dazu sind sie doch da. Eine externe Sruktur macht die Sache nicht übersichtlicher, sondern nur langsamer. Und dass man auf FB-Outputs ausserhalb des FB's nicht schreiben kann, macht doch gerade den Sinn der Output-Variablen aus. Wenn Du das Bedürfnis verspürst, auch im aufrufenden Programm darauf zu schreiben, ist das ein Zeichen dafür, dass Du einen Teil der Funktionalität, die eigentlich in den FB gehört, nicht dort untergebracht hast.

  6. #6
    Bensen83 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Stimmt, genau der Meinung bin ich auch. Ich hatte nur ein Programm, wo ein Baustein aufgerufen wurde und beim Aufruf die Eingänge und Ausgänge nicht zugewiesen wurden. Das fanden andere irritierend.
    Deswegen hatte ich diese frage gestellt.
    Zitieren Zitieren Stimmt  

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Wenn du die Eingänge des Bausteins nicht zuweisst ... wozu hast du sie dann und was soll der Baustein dann (ohne sie) tun ?

  8. #8
    Bensen83 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Sie werden ja zugewiesen, allerdings vorher im Strukturierten Text.
    Und dann eben beim Bausteinsufrug nicht mehr.

    Deswegen ja die frage ob erst den Daten einer Struktur zuweisen und dann diese den Eingängen des Bausteins?

    Oder eben direkt den Eingängen und dann eben ohne eingangszuweisung aufrufen.

    Also zugewiesen werden sie ja schon.
    Zitieren Zitieren Werden sie ja  

  9. #9
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    Zitat Zitat von StructuredTrash Beitrag anzeigen
    ... Eine externe Sruktur macht die Sache nicht übersichtlicher, sondern nur langsamer. ...
    Stimmt absolut nicht, Die Übergabe einer Struktur mit VAR_INOUT ist so ziemlich das effektiveste, was es beim Aufruf gibt. Es wird lediglich die Adresse der Structur übergeben. Beim Ende des FUB ist sogar gar nix zu tun, da der aufrufende Part weiss, wo die Structur liegt.

    Die Rückgabe von mehr als 1 Variablen dagegen ist extrem (intern) Programm aufwändig, der Compiler muss sie auf den Stack packen und die aufrufenden Programmteile wieder runternehmen.

    Meine Strategie, wo immer es geht: Struktur anlegen, sie dem FUB Aufruf übergeben, und nachher auswerten.
    Geändert von RobiHerb (27.12.2012 um 15:20 Uhr)
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Etwas genauer  

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von RobiHerb Beitrag anzeigen
    Stimmt absolut nicht, Die Übergabe einer Struktur mit VAR_INOUT ist so ziemlich das effektiveste, was es beim Aufruf gibt. Es wird lediglich die Adresse der Structur übergeben. Beim Ende des FUB ist sogar gar nix zu tun, da der aufrufende Part weiss, wo die Structur liegt.

    Die Rückgabe von mehr als 1 Variablen dagegen ist extrem (intern) Programm aufwändig, der Compiler muss sie auf den Stack packen und die aufrufenden Programmteile wieder runternehmen.
    Bei einem FB (Function-Block)? Glaube ich niemals dass es so läuft.
    Wenn Codesys das Rad nicht neu erfinden wollten haben sie auf eine gängige Vorgehensweise für sowas zurückgegriffen. Bei C++ wird bei Methodenaufrufen immer der this-Zeiger übergeben, je nach Aufrufkonvention entweder auf dem Stack oder in einem Register. Dieser Zeiger zeigt auf den Speicherbereich der aktuellen Instanz. Auf die Instanzvariablen wird dann nur noch mit Zeiger+Offset zugegriffen.
    Warum sollte da sonst noch groß was auf den Stack gepackt werden? Bei Funktionen ja, denn da bleibt ja keine andere Möglichkeit, aber sicher nicht bei Funktionsbausteinen.

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 05.02.2012, 20:14
  2. Elemente einer Struktur initialisieren
    Von Tigerente1974 im Forum Programmierstrategien
    Antworten: 5
    Letzter Beitrag: 20.01.2012, 07:18
  3. Länge einer Struktur im DB ermitteln
    Von Knut333 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 22.01.2009, 18:04
  4. WinCC anlegen einer globalen Variable in C?
    Von BorisDieKlinge80 im Forum Hochsprachen - OPC
    Antworten: 0
    Letzter Beitrag: 11.06.2008, 12:29
  5. Aus einer FB Struktur ein Wort auslesen
    Von ottopaul im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 11.07.2007, 00:39

Lesezeichen

Berechtigungen

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