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

Ergebnis 1 bis 10 von 10

Thema: Codesy Speicherbelegung bei INOUT

  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 benutze einen Baustein, welcher eine INOUT Schnittstelle hat.
    Nun habe ich mir um dessen Funktion zu erweitern einen FB drum herum programmiert.
    Dieser besitzt natürlich auch diese INOUT Schnittstelle, welche er an den Ursprünglichen Baustein weiterleitet.

    Jetzt habe ich die Variable, welche an die INOUT Schnittstelle gelegt werden muss global angelegt.
    Wird nun der benötigte Speicherplatz der Variable 3fach auf der Steuerung
    Benötigt? Also einmal da wo ich sie deklariert habe, einmal im "großen" FB und einmal um Ursprungs FB?

    Oder wie teilt sich der Speicher bei INOUTs auf?
    Zitieren Zitieren Codesy Speicherbelegung bei INOUT  

  2. #2
    Registriert seit
    29.03.2004
    Beiträge
    5.742
    Danke
    143
    Erhielt 1.687 Danke für 1.226 Beiträge

    Standard

    Variablen im Bereich IN_OUT werden als Zeiger übergeben. Je nach Architektur des Zielsystems ist dieser z.B. bei 32 Bit Systemen 4 Byte groß.
    Beispiel:
    Wenn du einen FB mit ausschließlich 3 Variablen als IN_OUT Parameter hast, nimmt der FB dann 12 Bytes in Anspruch. Egal ob dieses 3 Variablen vom Typ Integer sind, oder 3 Real-Arrays mit 1000 Variablen.

    Du kannst dir den Speicherbedarf des FB mit SIZEOF(FbInstanz) ausgeben lassen. Online sieht es immer so aus als ob alle Variablen im FB nochmal gespeichert werden, das ist aber nicht der Fall.

    Wenn du sonst keine Parameter hast und dein FB sich keine Daten für den nächsten Aufruf merken muss, warum erstellst du dann keine Funktion?

  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

    Ich habe ja noch mehrere Daten. Benutze den FB quasi als "Klasse" habe darin Methoden, Variablen und Properties um auf die Internen Variablen schreiben zu können. Kann man eigentlich in nem FB nicht einen Bereich deklarieren, der dann auch von Außen Global sichtbar ist? Sonst brauche ich ja für jede Varia ne die ich beschreiben möchte ne Propertie.

  4. #4
    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 es handelt sich um einen Baustein, welcher Achsen ansteuert. Ich habe dort in Strukturen Handsollwerte, autosollwerte und visualisierungsbuttons uns. Greife dann in der Visu auf die Buttons zu (boolsche Variablen) und im automatiksblauf weise ich über properties sollwerte zu und starte bspw. Die Achse über Achse.start()
    Wenn ich jetzt die sollwerte außerhalb des FBs deklariere, dann habe ich wieder 2 verschiedene Instanzen (Sollwerte.xy und fbinstanz.start() ) das will ich ja nicht. Hat jemand ne Idee?

  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

    Also schreibt einfach mal eure Meinung.
    Lieber INOUT verwenden für Variablen, welche ich von Außen verändern mag, oder lieber properties?
    Was meint ihr?

  6. #6
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    752
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    Zitat Zitat von SY50 Beitrag anzeigen
    Kann man eigentlich in nem FB nicht einen Bereich deklarieren, der dann auch von Außen Global sichtbar ist?
    Ja, VAR_INPUT.
    Zitat Zitat von SY50 Beitrag anzeigen
    Lieber INOUT verwenden für Variablen, welche ich von Außen verändern mag, oder lieber properties?
    Was meint ihr?
    Weder noch, sondern s. o.

  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

    Wollte eben nicht einen Baustein, der 50 Eingänge oder so hat.

  8. #8
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    752
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    Warum nicht? Wenn Dein FB 50 Eingangsvariablen hat und Du diese in der aufrufenden POU in eine Strukturvariable packst, musst Du die einzelnen Variablen dort mit Werten beschreiben, bevor Du die Struktur per VAR_IN_OUT an den FB übergibst. Wo ist der Vorteil gegenüber dem direkten Beschreiben von VAR_INPUT des FB's?

  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
    Warum nicht? Wenn Dein FB 50 Eingangsvariablen hat und Du diese in der aufrufenden POU in eine Strukturvariable packst, musst Du die einzelnen Variablen dort mit Werten beschreiben, bevor Du die Struktur per VAR_IN_OUT an den FB übergibst. Wo ist der Vorteil gegenüber dem direkten Beschreiben von VAR_INPUT des FB's?
    Wenn ich eine STRUCT habe (z.B. auch Global definiert), die ich dem FB per IN_OUT übergebe, so ist die Wahrscheinlichkeit recht hoch, dass von den vielen Membern der STRUCT zwischen den verschiedenen Aufrufen des FB sich nur wenige Member ändern, also die STRUCT einmal initialisiert wird und dann immer wieder nur leicht verändert (z.B. Laufvariable) in den FB reingegangen wird. Ausserdem kann diese STRUCT in einem FB dazu dienen, dass Memberwerte berechnet werden, in einem nächsten FB eine Sicherheits/Plausibilitäts Kontrolle vorgenommen wird und in einem weiteren FB die Ausgabe an die Hardware stattfindet, immer mit IN_OUT, sehr viel effektiver als Einzelparameter Übergabe.
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Effizienz ...  

  10. #10
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    752
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von RobiHerb Beitrag anzeigen
    Wenn ich eine STRUCT habe (z.B. auch Global definiert), die ich dem FB per IN_OUT übergebe, so ist die Wahrscheinlichkeit recht hoch, dass von den vielen Membern der STRUCT zwischen den verschiedenen Aufrufen des FB sich nur wenige Member ändern, also die STRUCT einmal initialisiert wird und dann immer wieder nur leicht verändert (z.B. Laufvariable) in den FB reingegangen wird.
    Das geht mit VAR_INPUT genauso. Man braucht ja nicht bei jedem Aufruf jede Variable beschreiben.
    Zitat Zitat von RobiHerb Beitrag anzeigen
    Ausserdem kann diese STRUCT in einem FB dazu dienen, dass Memberwerte berechnet werden, in einem nächsten FB eine Sicherheits/Plausibilitäts Kontrolle vorgenommen wird und in einem weiteren FB die Ausgabe an die Hardware stattfindet, immer mit IN_OUT, sehr viel effektiver als Einzelparameter Übergabe.
    Wenn eine Struktur nacheinander von mehreren FB's gelesen/beschrieben werden soll, ist die Übergabe als VAR_IN_OUT natürlich effektiver. Wobei ich persönlich allerdings bevorzuge, die zu einer Baugruppe gehörende Funktionalität in nur einem FB unterzubringen.

Ähnliche Themen

  1. Timer mit Instanz als InOut Varíable
    Von blubbi im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 31.01.2013, 20:37
  2. Antworten: 0
    Letzter Beitrag: 11.12.2012, 11:18
  3. Baustein mit IN & OUT Paramtern, oder INOUT`erstellen?
    Von Bensen83 im Forum CODESYS und IEC61131
    Antworten: 13
    Letzter Beitrag: 23.11.2012, 13:08
  4. Speicherbelegung im DB
    Von marvo im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 14.08.2009, 15:56
  5. FB inout parameter wird nicht beschrieben!
    Von Jochen Kühner im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 06.04.2005, 09:42

Lesezeichen

Berechtigungen

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