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

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 32

Thema: Baustein mit INOUT oder Baustein mit Interface?????

  1. #1
    Registriert seit
    04.02.2013
    Beiträge
    271
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe mir einen Baustein erzeugt, welcher diverse Aufgaben einer Verfahrachse erledigt.
    Hierzu habe ich für die Ansteuerung eine Struktur als INOUT deklariert, welche Bspw. Reglerfreigabe, Betriebsart Geschwindigkeit, Sollposition usw. enthält.

    Ist dies eurer Meinung nach eine Gute Lösung, oder sollte man an so etwas mit einem Interface ran gehen?
    Wenn ich ein Interface mit den Eigenschaften Reglerfreigabe usw. hätte, müsste ich diese aber ja auch immer von den wirklichen Variablen zuweisen, oder?

    Kann mir jemand mal Tipps geben, ob ich da schon auf dem richtigen Weg bin?
    Zitieren Zitieren Baustein mit INOUT oder Baustein mit Interface?????  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Wie bekommst Du Deine boolschen Eingangs-/Ausgangszustände in/aus den STRUCT?
    Es ist viel übersichtlicher und schön beobachtbar, wenn man in FUP oder KOP die Signale an den Baustein schaltet, als sie in extra Programmteilen in/aus den Struct zu kopieren.

    Nur eine STRUCT mit allen Werten an INOUT legen würde ich nicht machen. Es kommt auf eine gesunde Mischung Bausteinschnittstelle IN + OUT und extra Werte per STRUCT an.

    Außerdem solltest Du mal einen Blick in die Referenzdaten bzw. GeheZu werfen, ob und wie die verwendeten Operanden da auftauchen (sprich: findbar sind) und ob das Deinem Verständnis von wartungsfreundlichem bzw. diagnostizierbarem und verstehbarem Code entspricht.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    SY50 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.02.2013
    Beiträge
    271
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo, habe mich vielleicht etwas schlecht ausgedrückt. Ich habe eine Mischung aus in, inout ... Ich habe aber eine Struktur, welche alle Variablen der Ansteuerung enthält (Sollwert, Sollposition usw.) und eine Struktur für die stati. Diese habe ich als inout gewählt, um die Performance zu schonen und nicht immer alle Werte an den Baustein übergeben zu müssen. Ich will auch keine tausend Eingänge an dem fb. Im Prinzip ist das ja schon ne Schnittstelle, verstehe nur nicht so ganz den Sinn eines Interface, wenn ich von außen auf den du zugreifen will.
    Also ob ich jetzt Interface.xy im Quellcode schreibe, oder bausteininstanz.xy, das bleibt sich doch gleich oder?
    Andersrum finde ich es schon interessanter, wenn der fb einen Eingang vom Typ Interface hat und dann während der Laufzeit quasi eine Methode eines externen fbs aufruft. ..... Aber egal... Auf die Variablen kommt man doch sehr gut drauf innerhalb des fbs und zwar mit. Inoutname.variable.... Indien der Struktur gebe ich außen vor. Strukturinstanz.sollwert := 100.
    Ist doch übersichtlich.????

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

    Standard

    Der Sinn eines Interfaces (aus meiner Sicht) wäre, wenn mehrere Bausteine die gleiche Variablen-Struktur mit gleichen Namen und Typen verwenden sollen. Wäre das bei dir so
    dann macht ein Interface Sinn - ansonsten ist es eigentlich sinnlos ...

    Gruß
    Larry

  5. #5
    SY50 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.02.2013
    Beiträge
    271
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja ich habe 2 verschiedene Regler, welche ich durch die Gleiche Struktur gleich ansprechen will. Die Konvertierung übernehmen dann 2 FBs.
    Aber ein Interface kann ja nur Eigenschaften und Methoden beinhalten.
    Da meine Struktur allerdings von einer übergeordneten Steuerung übertragen wird, müsste ich ja meine Variablen in der Struktur dem Interface zuweisen. Finde ich irgendwie umständlich.
    Auch wenn das nicht der Fall wäre. Was hätte ich durch ein Interface für ein Vorteil im Gegensatz zu der InOut Struktur?
    Keinen oder?

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

    Standard

    Bei IN_OUT machst Du einen Call By Reference, d.h. Du übergibst im Prinzip einen Zeiger auf die Datenstruktur.

    Das ist bei vielen Parametern auf jeden Fall das effektivste, was die Performance angeht. Die meisten Implementationen der Softmotion machen das so.

    Es gibt aber 2 Probleme:

    Bei IN_OUT kann (bei nicht sorgfältiger Programmierung) die FB Implementation alle Member der Structur nachhaltig verändern, d.h. es kommt potentiell auch etwas zurück, was wo anders dann böse Nebeneffekte haben kann. (deshalb auch bei Safety nicht gern gesehen)

    In Safety ist so etwas ab SIL2 meines Wissens nach nicht erwünscht/erlaubt, wenn Ihr also in Zukunft das mal braucht, dann ist ein Refactoring angesagt.

    Ich hatte es in der Vergangenheit aber so gehalten, dass ich bei FBs, die ich allein aufrufe und somit übersehen kann, IN_OUT aus Performance Gründen verwende.

    Eine Aufteilung in mehrere Strukturen kann sich auch anbieten.
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren INOUT gegen Einzelparameter  

  7. #7
    SY50 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.02.2013
    Beiträge
    271
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja ich habe es auch in Ansteuerung und in Status aufgeteilt.
    Aber eben aus Performance gründen beides auf Inout belassen.
    Interface ist meines Erachtens dann ne sinnvoll, wenn ich Methoden aufrufen will, welche in irgend einem Baustein vorhanden sein sollen. Rein für variablen Übergabe sehe ich das nicht als sinnvoll an, oder seht ihr das anders?

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von RobiHerb Beitrag anzeigen
    Bei IN_OUT machst Du einen Call By Reference, d.h. Du übergibst im Prinzip einen Zeiger auf die Datenstruktur.

    Das ist bei vielen Parametern auf jeden Fall das effektivste, was die Performance angeht.
    Ich glaube, das mit der Performance stimmt so nicht.
    Das könnte stimmen, wenn Zeiger auf große Datenstrukturen übergeben werden, aber nur auf wenige Strukturmember tatsächlich zugegriffen wird.

    Bei Struktur an IN_OUT muß bei jedem Zugriff auf eine Variable zur Laufzeit erst aufwendig die Adresse berechnet werden. Das bläht den Code auf und kostet auch mehr Ausführungszeit.

    Wenn sowieso auf jede Variable zugegriffen wird, dann ist es ziemlich sicher performanter, das kopieren der Aktual-Struktur auf die Bausteinschnittstelle (IN und OUT) dem Aufrufer zu überlassen. Das kann der Compiler sehr effektiv machen.

    Vorsicht: bei Übergabe von Strukturen per IN_OUT erhält man keine konsistente Kopie der Daten sondern greift jedesmal erneut auf die original-Daten zu. Wenn der Code durch einen höher priorisierten Prozess unterbrochen wird, der auf die original Daten schreibt, dann können mehrfache Zugriffe im Baustein unterschiedliche Ergebnisse liefern.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #9
    SY50 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.02.2013
    Beiträge
    271
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also ich würde mal sagen, dass in meinen Bausteinen Ca. 50% der übergebenen Inout Daten zyklisch gelesen/geschrieben werden. Zu bestimmten Zuständen, dann eben auch der Rest.
    Trotzdem nochmal die Frage... 😊 Interface macht bei variablenübergabe keinen Sinn oder?

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... wie ich schon geschrieben habe : das mußt du selbst entscheiden. Ich (für mich) habe darin noch keinen wirklichen Sinn gefunden - nicht mal bei meinen .Net-Konstrukten.

    Gruß
    Larry

Ähnliche Themen

  1. Schützüberwachung mit Baustein SF_EDM
    Von bernd81 im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 27.09.2013, 13:36
  2. Baustein mit IN & OUT Paramtern, oder INOUT`erstellen?
    Von Bensen83 im Forum CODESYS und IEC61131
    Antworten: 13
    Letzter Beitrag: 23.11.2012, 13:08
  3. Codeübergabe am FB Baustein mit SCL
    Von Blackforest im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 02.01.2009, 17:57
  4. Baustein mit SCL programmieren
    Von mr_spooner im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 20.11.2008, 09:19
  5. Zählerfunktion mit einem DB Baustein
    Von Irocke im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 31.01.2008, 15:03

Lesezeichen

Berechtigungen

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