Mindrover
Level-2
- Beiträge
- 48
- Reaktionspunkte
- 6
-> Hier kostenlos registrieren
Hallo miteinander und ein gute neues Jahr,
ich habe gerade eine Denkblockade und vermutlich auch ein Verständnisproblem.
Folgendes möchte ich realisieren: Am Touch auf der "Handmode"-Seite meines "Öldosierers" möchte ich eine Anzahl Sprühstöße(HMI.EA.Amount) angeben und dann mit einem
Button aktivieren. Das Button Bit wird gesetzt. Das Ventil muss eine bestimmte Zeit geschaltet bleiben um die Mediummenge zu bestimmen.
Das wollte ich mit einer FOR-Schleife machen:
IF HMI.Button.Hand.Start then
tSpitAmount:=HMI.EA.Amount;
For tLoop:= 1 to "tSpitAmount" by 1 do
sTOFValveControlMan(IN:=8hz, PT:=10ms, Q=>QValve);
End_For;
HMI.Button.Hand.Start:=false;
END_IF;
Falls ich das mit der Schleife richtig verstehe würde das aber meine Zykluszeit extrem aufblähen, da es alle Durchläufe im gleichen Zyklus macht. Zum Beispiel bei Anzahl Sprühstöße=10, wären dass ja dann schon 100ms. (Vermutlich in Hand egal)
Zudem habe ich keine gute Idee wie ich den Eingang des Timers vernünftig toggeln kann.
Mir wäre alternativ noch eingefallen, das ganze so zu machen:
IF HMI.Button.Hand.Start then
tSpitAmount:= HMI.EA.Amount;
sTOFValveControlMan(IN:=8hz, PT:=10ms, Q=>QValve);
IF tSpitAmount > 0 then
tSpitAmount:=tSpitAmount-1;
END_IF;
IF tSpitAmount=0 then
HMI.Button.Hand.Start:=false;
END_IF;
Wo ich die 8Hz hernehmen soll oder generell einen Takt hernehmen soll, weiss ich aktuell auch nicht. Da gab es in meiner alten Firma einen Baustein der verschiedene Takte generiert hat.
An der Stelle komme ich gedanklich gerade nicht weiter.
Bitte um Ideen. Gerne auch Vorschläge wie man das schöner und einfacher programmieren kann.
Danke im Voraus
ich habe gerade eine Denkblockade und vermutlich auch ein Verständnisproblem.
Folgendes möchte ich realisieren: Am Touch auf der "Handmode"-Seite meines "Öldosierers" möchte ich eine Anzahl Sprühstöße(HMI.EA.Amount) angeben und dann mit einem
Button aktivieren. Das Button Bit wird gesetzt. Das Ventil muss eine bestimmte Zeit geschaltet bleiben um die Mediummenge zu bestimmen.
Das wollte ich mit einer FOR-Schleife machen:
IF HMI.Button.Hand.Start then
tSpitAmount:=HMI.EA.Amount;
For tLoop:= 1 to "tSpitAmount" by 1 do
sTOFValveControlMan(IN:=8hz, PT:=10ms, Q=>QValve);
End_For;
HMI.Button.Hand.Start:=false;
END_IF;
Falls ich das mit der Schleife richtig verstehe würde das aber meine Zykluszeit extrem aufblähen, da es alle Durchläufe im gleichen Zyklus macht. Zum Beispiel bei Anzahl Sprühstöße=10, wären dass ja dann schon 100ms. (Vermutlich in Hand egal)
Zudem habe ich keine gute Idee wie ich den Eingang des Timers vernünftig toggeln kann.
Mir wäre alternativ noch eingefallen, das ganze so zu machen:
IF HMI.Button.Hand.Start then
tSpitAmount:= HMI.EA.Amount;
sTOFValveControlMan(IN:=8hz, PT:=10ms, Q=>QValve);
IF tSpitAmount > 0 then
tSpitAmount:=tSpitAmount-1;
END_IF;
IF tSpitAmount=0 then
HMI.Button.Hand.Start:=false;
END_IF;
Wo ich die 8Hz hernehmen soll oder generell einen Takt hernehmen soll, weiss ich aktuell auch nicht. Da gab es in meiner alten Firma einen Baustein der verschiedene Takte generiert hat.
An der Stelle komme ich gedanklich gerade nicht weiter.
Bitte um Ideen. Gerne auch Vorschläge wie man das schöner und einfacher programmieren kann.
Danke im Voraus