Funktionsbausteine mit Arrays

J3NNVX

Level-2
Beiträge
37
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey ihr Lieben,
folgende Situation
Ich möchte für eine Teststation einen FB anlegen, bei dem ich vorab variabel angeben kann, wieviele Schritte er durchläuft (z.B. 4s/10bar, 3s/3bar, 1s/5bar, etc.). Mein Ansatz wäre hierbei ein variables Array, was eCockpit allerdings im FB nicht zulässt.
Vielleicht hat jemand von euch schonmal sowas ähnliches gemacht und kann mir weiterhelfen :)
Besten Dank
 
Das kannst du doch aber genauso auch mit einem festen Array machen, dass du den Erfordenissen entsprechend mit Werten beschickst (initialisierst). Ab der Position wo kein Wert mehr steht (also 0 drinsteht) ist der Ablauf dann beendet.
Das Array selbst dimensionierst du dann entsprechend der max. denkbaren Anzahl von Schritten (plus Angstzuschlag) ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie viele Schritte, das wäre ein INT.
Du möchtest aber Parameter übergeben: Zeit und Druck, sehe ich das richtig?
Du könntest ein festes Array of Struct nehmen mit MaxSchritte. Sobald Zeit/Druck Null sind, ist das Array zu Ende.
 
@JSEngineering : da hatten wir dann wohl beide den gleichen Einfall ...
Naja... viele andere Möglichkeiten gibt es da ja nicht, da man in der SPS ja nunmal bei Programmstart seine Speicherbereiche definieren muß und nicht mal eben während der Laufzeit mit MemAlloc was allokieren kann... ich kann also nur variabel in einem zuvor definierten Bereich von Max-Elementen sein...

Wenn die Prüfschritte für alle Produkte definiert, aber in verschiedenen Abfolgen bzw. Anzahl ausgeführt werden, könnte man auch in einem Array alle möglichen Prüfschritte definieren, quasi als Rezeptbuch und dann in einem anderen Array of INT als Rezept nur noch die (und in der Reihenfolge) rauspicken, die benötigt werden:

Code:
/* Pseudo-Code */
VAR GLOBAL
    STRUCT Moegliche_Pruefschritte
        [1] 3s; 10bar
        [2] 1s; 5bar
        [3] 2s; 7bar
        ...
    END_STRUCT
END_VAR

Meine_Pruefkette : Array[1..Max] OF INT = 2, 1, 3;

Pruef_FB( Pruef_Definition := Moegliche_Pruefschritte, Pruefkette := Meine_Pruefkette);
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja das ist schonmal nicht schlecht :). Die Inhalte der einzelnen Arrayvariablen kann ich aber auch über eine Variable und Eingabe machen oder ?
Also im Endeffekt gibt es 2 Standardprüfdurchläufe. Die habe ich soweit auch fertig. Aber es soll noch implementiert werden, dass man mit z.B. max 10verschiedenen Phasen selber über vorherige Eingabe sich eine Prüfstruktur selber aufbauen kann.
Ich hoffe das ist einigermaßen verständlich gewesen
Danke für die liebe Hilfe
 
Also quasi ist das Ziel hier, dass wir bei neuen und einmaligen Testanforderungen einstellen können dass er in Phase 1 zum beispiel 10s lang druck 1 über ventil 3 ausgibt oder ähnliches. Aber ja genau das wäre glaube schonmal n besserer Ansatz.
 
Wenn du schon feste Prüf-Routinen hast dann kannst du die ja hinterlegen - quasi als Steuerbit am IN des FB, was dann bewirkt, dass entsprechende Werte in das Ablauf-Array geschrieben werden.
Für eine "freie" Prüfroutine würde ich ein Array of Struct, wie schon vorgeschlagen, übergeben und dies dann auch mittels eines Trigger-Eingangs in das interne Array übertragen.
Den eigentlichen Ablauf hast du dann ja wahrscheinlich auch in dem FB ...
 
Zurück
Oben