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

Ergebnis 1 bis 7 von 7

Thema: ST - FB mit ARRAY als OUT

  1. #1
    Registriert seit
    06.06.2008
    Beiträge
    191
    Danke
    8
    Erhielt 11 Danke für 7 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    ich habe nen kleinen UmlaufSpeicher-FB in ST (Beckhoff TwinCAT) geschrieben der zu jeder vollen Stunde eine Eingangsvariable in ein ARRAY schreibt:

    Code:
    VAR_INPUT
        rData                    :REAL;
    END_VAR
    VAR_OUTPUT
        arData                    :ARRAY[0..23] OF REAL;
    END_VAR
    Code:
    CASE intVolleStunde OF
    
            0:    arData[0] := rData;
            1:    arData[1] := rData; 
            2:    arData[2] := rData; 
            3:    arData[3] := rData; 
            4:    arData[4] := rData; 
            5:    arData[5] := rData; 
            6:    arData[6] := rData; 
            7:    arData[7] := rData; 
            8:    arData[8] := rData; 
            9:    arData[9] := rData; 
            10:    arData[10] := rData; 
            11:    arData[11] := rData; 
            12:    arData[12] := rData; 
            13:    arData[13] := rData; 
            14:    arData[14] := rData; 
            15:    arData[15] := rData; 
            16:    arData[16] := rData; 
            17:    arData[17] := rData; 
            18:    arData[18] := rData; 
            19:    arData[19] := rData; 
            20:    arData[20] := rData;
            21:    arData[21] := rData;
            22:    arData[22] := rData; 
            23:    arData[23] := rData; 
    
    END_CASE
    Das Problem ist, dass der FB mir das ARRAY am Ausgang kontinuierlich überschreibt obwohl die CASE-Anweisung darin nur jede volle Stunde (Flanke) angesprungen wird!
    Schreibt ein FB immer die Ausgänge raus auch wenn die intern nicht bearbeitet werden?


    Hoffe es ist klar was ich meine?!?!
    Gruß Mike
    Zitieren Zitieren ST - FB mit ARRAY als OUT  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Zitat Zitat von mike_roh_soft Beitrag anzeigen
    Schreibt ein FB immer die Ausgänge raus auch wenn die intern nicht bearbeitet werden?
    Ich würde sagen : Ja - wie auch sonst ? Du hast es ja als Koppelbereich so angelegt.

    Deine Zuweisung könnte aber insgesamt viel einfacher sein :
    Code:
    arData[intVolleStunde] := rData;
    Gruß
    Larry

  3. #3
    mike_roh_soft ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.06.2008
    Beiträge
    191
    Danke
    8
    Erhielt 11 Danke für 7 Beiträge

    Standard

    Hehe, stimmt damit gehts einfacher

    OK aber irgendwie ist es für mich dann nicht richtig... muss ich mir was anderes Überlegen...

    Danke!

  4. #4
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Ich denke das Array als VAR_IN_OUT zu deklarieren sollte dir helfen.
    Da wird ja nur Referenz auf das Array übergeben. Wenn dein FB nichts am Array ändert, bleibt es einfach so wie es vor dem FB-Aufruf war....

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

    mike_roh_soft (11.01.2012)

  6. #5
    mike_roh_soft ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.06.2008
    Beiträge
    191
    Danke
    8
    Erhielt 11 Danke für 7 Beiträge

    Standard

    Haaa stimmt VAR_IN_OUT gibt es ja auch noch!

    Danke damit geht es jetzt! Sonst hätte ich es ohne FB machen müssen was mir aufgestoßen wäre!

    Schade, dass VAR_IN_OUT nicht gleich automatisch erzeugt wird wenn man einen FB anlegt - warum eigentlich nicht? Der Rest wird ja auch automatisch erzeugt!
    Kann man das einstellen?

    Danke und Gruß
    Mike

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

    Standard

    Noch ein Vorschlag

    Code:
    VAR_INPUT
        wStunde                : WORD;     (* vermeide globale variablen in FB (Instanzen!), wo immer es geht ! *)
        rData                  :  REAL;
    END_VAR
    VAR_IN_OUT                            (* erspart den Copy overhead *)
        arData                    :ARRAY[0..23] OF REAL;
    END_VAR
    
    VAR
       wOldStunde : WORD := 4711; (* "hausnummer" für den ersten Aufruf *)
    END_VAR
    Code:
     IF ((wStunde < 24) AND (wStunde <> wOldStunde)) THEN  (* etwas mehr Sicherheit und spart ggf. Zyklen *)
            arData[wStunde] := rData;
            wOldStunde := wStunde;
     END_IF
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Noch ein Vorschlag  

  8. Folgender Benutzer sagt Danke zu RobiHerb für den nützlichen Beitrag:

    mike_roh_soft (11.01.2012)

  9. #7
    mike_roh_soft ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.06.2008
    Beiträge
    191
    Danke
    8
    Erhielt 11 Danke für 7 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi RobiHerb,

    im Prinzip habe ich es so programmiert!
    Das oben war wie schon geschrieben nur ein Ausschnitt des FBs ohne die komplette Schnittstelle.
    Wollte hier nicht zu viel Code drumherum schreiben!
    Danke.

Ähnliche Themen

  1. Mehrdimensionales Array als Konstante
    Von forellengarten im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 02.03.2011, 00:06
  2. Array in FB mit Größe als Parameter
    Von Heimchen im Forum CODESYS und IEC61131
    Antworten: 15
    Letzter Beitrag: 26.11.2010, 10:33
  3. FB Array als OUT Variable
    Von Beckx-net im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 10.09.2009, 16:41
  4. ARRAY als IN bei FB?
    Von Pinmaster im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 04.09.2009, 11:18
  5. ARRAY als Aktualarameter
    Von manas im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 16.01.2008, 19:11

Lesezeichen

Berechtigungen

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