TIA SCL MIN MAX Begrenzung Wiederholen

michi*

Level-2
Beiträge
100
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich versuche mich gerade in kleinen SCL Bausteinen um manche einfache Funktionen schneller und übersichtlicher darzustellen als in FUP.

Ich würde gerne meine Vorgabe Drehzahl begrenzen. Das ganze in 3 Arrays ( Stufe 1,2,3) mit jeweils 24 Soll Drehzahlen .

Für die Min Begrenzung habe ich jetzt diesen Teil
Code:
IF #"Stufe 1 Pumpensollwert"[1] <#"Min Wert Pumpendrehzahl" THEN
    #"Min Wert Pumpendrehzahl":= #"Stufe 1 Pumpensollwert"[1]
    ;
END_IF;

Kann mir jemand helfen, wie ich das ganze jetzt am besten direkt für den ganzen Array ausführe ohne jede Variable wieder einzeln einzufügen?
Oder nach welcher Funktion ich hiefür suchen soll?

Vielen Dank
 
Ohne mich jz mental mit Dinem Problem auseinandergesetzt zu haben, schreien Arrays förmlich nach Schleifen.
Also setz Dich mit While und for auseinander.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Stichwörter:
- Arrays / eventuell auch mehrdiemensionales array
- for schleife (brauchst 2)

In deiner If Abfrage vergleichst du deine Vorgabedrehzal mit dem Min.-Wert. Wenn deine Bedingung zutrifft, setzt du die Min-Drehzahl auf den Wert der Vorgabedrehzahl. Ist das so gewollt?

tipp: keine Leerzeichen im Variablennamen. Wenn nötig, dann "_" benutzen
 
Zuletzt bearbeitet:
Das Zauberwort heißt FOR-Schleife. Einfach mal in der TIA Hilfe suchen. Und wenns ein Standard-Baustein sein soll auch mal nach IN/OUT, ARRAY[*] und LIMIT suchen.
 
Vielen Dank!!
FOR Schleife ist es.
Dazu kommt jetzt noch SCL... ich teste dieses kleine Anfänger Beispiel morgen einmal.

@Mrtain
das mit den Leerzeichen werd ich mir für die Zukunft dann wohl mal aneignen müssen. Bisher hatte ich keine Probleme damit aber vielen Dank.

Du hast recht,
Eigentlich möchte ich meine Vorgabe vergleichen mit der Min Drehzahl. Wenn die geringer ist, soll die Min Drehzahl übernommen werden.
Das gleiche würde ich dann auch für die Max Drehzahl nehmen.

Auf dem Display steht z.B. 1000U/min Bediener kann über + oder - um jeweils 1 verändern. Min Begrenzung z.B. 700
Würde er versuchen auf 699 zu stellen, würde die Drehzahl immer wieder auf 700 springen.



Code:
FOR #"Laufvariable 1" := 1 TO 24 BY +1 DO
    IF #"Stufe 1 Pumpensollwert"[#"Laufvariable 1"] < #"Min Wert Pumpendrehzahl" THEN
        #"Stufe 1 Pumpensollwert"[#"Laufvariable 1"]:= #"Min Wert Pumpendrehzahl";
END_IF;
END_FOR;

Danke euch
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde gerne meine Vorgabe Drehzahl begrenzen. Das ganze in 3 Arrays ( Stufe 1,2,3) mit jeweils 24 Soll Drehzahlen .
:unsure: Ich verstehe nicht, wie Du auf "jeweils 24 SollDrehzahlen" kommst und ich bin mir auch nicht sicher, ob "jeweils 24" bedeutet 3 mal 24, also je Stufe 24.
Ich verstehe auch nicht, warum Du 3 Arrays benutzen willst, also pro Stufe 1 Array.
Könntest Du bitte etwas ausführlicher erklären oder kurz skizzieren, was Du vor hast?
 
Vielen Dank!!
FOR Schleife ist es.
Dazu kommt jetzt noch SCL... ich teste dieses kleine Anfänger Beispiel morgen einmal.

@Mrtain
das mit den Leerzeichen werd ich mir für die Zukunft dann wohl mal aneignen müssen. Bisher hatte ich keine Probleme damit aber vielen Dank.

Du hast recht,
Eigentlich möchte ich meine Vorgabe vergleichen mit der Min Drehzahl. Wenn die geringer ist, soll die Min Drehzahl übernommen werden.
Das gleiche würde ich dann auch für die Max Drehzahl nehmen.

Auf dem Display steht z.B. 1000U/min Bediener kann über + oder - um jeweils 1 verändern. Min Begrenzung z.B. 700
Würde er versuchen auf 699 zu stellen, würde die Drehzahl immer wieder auf 700 springen.



Code:
FOR #"Laufvariable 1" := 1 TO 24 BY +1 DO
    IF #"Stufe 1 Pumpensollwert"[#"Laufvariable 1"] < #"Min Wert Pumpendrehzahl" THEN
        #"Stufe 1 Pumpensollwert"[#"Laufvariable 1"]:= #"Min Wert Pumpendrehzahl";
END_IF;
END_FOR;

Danke euch
Ich meine mich schwach daran zu erinnern, dass man bei Eingabefeldern den Eingabebereich beschränken kann.. aber ich bin mir sehr unsicher
 
Ich meine mich schwach daran zu erinnern, dass man bei Eingabefeldern den Eingabebereich beschränken kann.. aber ich bin mir sehr unsicher
Und bevor ich dafür Schleifenüberwachung mache.. wieso nicht die HMI Variable über eine kleine Funktion abfangen und dann erst umladen..

Code:
IF HmiValue < VALUE_MIN THEN
    OutputValue := VALUE_MIN;
ELSIF
    HmiValue > VALUE_MAX THEN
    OutputValue:= VALUE_MAX;
ELSE
    OutputValue:= HmiValue;
END_IF;

Das ganze könntest du jetzt noch getriggert machen.. in dem erst die Eingabe über einen Button bestätigt werden muss und somit hättest du es begrenzt ohne Drei Arrays mit FOR Schleifen durchzuballern
 
Michi, sieh dir bei der Gelegenheit auch gleich die Funktionen/Anweisungen(?) "MIN", "MAX" und"LIMIT" an!
LIMIT wurde schon in Beitrag #4 vorgeschlagen.
Aber, da wir immer noch nicht erfahren haben, warum sooo viele (anscheinend 3 x 24) Begrenzungen gefragt sind, wissen wir nicht einmal, ob LIMIT das Problem erschlagen könnte oder auch MIN und MAX von Interesse sein könnten.

Ist unser OP @michi* eigentlich noch dabei? Seit Beitrag #5 hat er sich nicht mehr gemeldet ...
 
Im HMI würde ich das nicht machen. irgendwann kommt einer auf die Idee da von wo anders reinzuschreiben, dann ist die Begrenzung weg.
Das sollte schon in der SPS laufen.

Ich hab dafür einen FB (sieht so ähnlich aus wie der SCAL von der Beschaltung her.)
Den versorge ich aber für jedes Signal separat weil dann will wider wer für den einen Antrieb die Grenzen, für den nächsten ganz was anders, das ist meiner Meinung nach im FUP übersichtlicher.
Der FB gibt auch je ein Bit bei Unterschreitung und Überschreitung aus, damit kann man den Benutzer drauf hinweisen was er falsch gemacht hat.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die Rückmeldung,
ich bin noch aktiv, jedoch mit Zeit Verschiebung + arbeiten hat es etwas gedauert.

Die Begrenzung über die HMI Variable zu machen würde denke ich genauso funktionieren.
Ich dachte nur, falls im nächsten Schritt evtl. einzelne Werte über eine Fernwartung angepasst werden sollen. Dann hätte ich das direkt mit erschlagen.

Aufbau:
Ich habe 24 Pumpen an 24 FUs.
Diese werden ein und ausgeschaltet. Über einen Schlüsselschalter kann man 3 Stufen umstellen.
Start stop dann einfach über ein Bedienpult.

Auf dem HMI sieht der Bediener 24 Pumpen.

Er wählt die Stufe aus 1/2/3
und kann dann für jede Pumpe ein Wert eingeben bzw. über + und - verstellen.

Ich wollte einfach die Möglichkeit haben diesen Bereich zu begrenzen.

Die Bewegen sich alle irgendwo zwischen 70 und 90% Nenndrehzahl in der Regel. Evtl brauchen wir das auch garnicht. Könnten es auch über den FU machen. Wollte es einfach im Programm schonmal berücksichtigen.

Ich werde mir die Min/MAX/Limit Funktion nochmal anschauen,

Nochmal vielen Dank für eure Rückmeldungen.
Ich lese evtl. erst 24h Später wieder aber freue mich über eure Hilfestellung!
 
Zurück
Oben