ST - FB mit ARRAY als OUT

mike_roh_soft

Level-1
Beiträge
191
Reaktionspunkte
11
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
 
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....
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Noch ein Vorschlag

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
 
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.
 
Zurück
Oben