LabVIEWForum.de - Zeitsteuerung

LabVIEWForum.de

Normale Version: Zeitsteuerung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo an Alle,

ich würde gerne eine Pumpe (DO) steuern. Die Steuerung funktioniert so:

Alle 5 Minuten (Bsp. Wert) sollte die Pumpe einmal für 10 Sec. eingeschaltet werden. Einfach gesagt, ich brauche einen digitalen Wert, der alle 5 Minuten für 10 Sec. auf True gesetzt wird dann wieder auf False.

Da ich mit Zeitsteuerung in LabVIEW wenig erfahrung habe, hänge ich an das Problem. Ich habe mit dem Block "Verstrichene Zeit" & "Case" probiert, aba bekomme ich kein vernüftiges Ergebnis.

Wäre dankbar wenn jemand mir einen Tipp gibt.

Viele Grüße,
Prince.
Hab' Dir schnell ein Bsp. gemacht:
[attachment=31382]
Lv09_img2

Du musst halt statt 5 s (wie im Bsp.) bei Dir 300 s eingeben und statt 1000 ms 10000 ms (im True-Case). Ich habe die Zeiten so eingestellt, damit man es besser sieht. In meinem Bsp. geht alle 5 s die LED für 1 s an.

Gruß Markus
Besten Dank Markus,

dein VI ist recht gut zu verstehen. das ist genau was ich gesucht hatte. Die SR's habe ich total vergessenWink.

viele grüße,
prince.
Servus,

so jetzt habe ich ein bis. rumprogrammiert, aber das Endergebnis sieht nicht besonders gut aus.Sad

Ich würde gerne eine Boolische Konstante aus dem Case herausziehen und weiter an DAQ leiten. Generell arbeite ich mit State machine da ich viele Zustände habe. Diese Pumpensteuerung was ich jetzt einfügen will sollte eigentlich parallel zu meiner Steuerung laufen.

Markus, die Funktion Zeit zu zählen funktioniert ganz gut mit SR. nur das Anhalten der Zeit (bsp. pumpe sollte 10 Sec. laufen) ist das problematisch. da ich erstmal die Konstante aus dem Case rausziehen muss damit an DAQ weitergeleitet wird... Gibts da andere möglichkeiten ausser die "Warte" funktoin?

Mit warten Fkt. bleibt die ganze Schleife dann für diese Zeit inaktive.Sad


Beste Grüße,

siehe VI:
(im VI ist der DAQ Input zur Info.)
LV 2010
' schrieb:Hab' Dir schnell ein Bsp. gemacht:
[attachment=60495:Zeitsteuerung.vi]
Lv09_img2

Gruß Markus

so. jetzt habe ich das problem mit Z.Automat gelöst.
Nur das einzige was mir fehlt ist die Zeiterfassung ! Irgendwie geht die Pumpe nur für eine m.sec. an dann wieder geht er aus !
irgendwo habe ich im Automat ein Denkfehler.

Grüße,
LV Version 2010
Hallo Amir,

sobald du die Pumpe anschaltest, startet die nächste Iteration. In dieser wird die aktuelle Zeit mit der gespeicherten verglichen: das Resultat ist FALSE! Mit diesem FALSE schaltest du aber sofort wieder in den Idle-Case...
' schrieb:Hallo Amir,

sobald du die Pumpe anschaltest, startet die nächste Iteration. In dieser wird die aktuelle Zeit mit der gespeicherten verglichen: das Resultat ist FALSE! Mit diesem FALSE schaltest du aber sofort wieder in den Idle-Case...

danke genau das ist das problematik da. Aba wie sollte ich sonst die Zeiterfassung realisieren (außer boolian), damit ich nicht jedes mal in Idle modus schaltet?

Grüße,
Hallo,

nach 10 Sekunden wird die Pumpe einmalig auf true gesetzt. Das liegt daran, dass du im "True"-Case der Zeitauswertung (>10) die aktuelle Zeit an das Schieberegister übergibts. Im nächsten Schleifen durchlauf wird ja wieder abgefragt, ob die aktuelle Zeit größer ist, als die Zeit im Schieberegister. Da aber im Schieberegister nun nicht mehr die Anfangszeit vom Programmstart drinsteht, sondern die Zeit aus dem Schleifendurchlauf davor, ist die Bedingung wieder false und dein Program wechselt wieder in den "idle"-State. Und dort ist ja auch deine Pumpe aus.

Ich hoffe, ich habe es verständlich erklärt.

Ich würde das ganze zu einer State-Maschine zusammenfassen, in der es nur einen Idle-State gibt. Aktuell müsstest du es in die Richtung umbauen, dass die Abfrage währendessen die Pumpe ein ist, nicht ausgeführt wird.

Oder ein Abrage im False-State, ob die Pumpe läuft.

Oder, oder. Es gibt viele programmatische Lösungen dafür, denke ichWink

Beste Grüße,
NWO
' schrieb:Hallo,


Ich würde das ganze zu einer State-Maschine zusammenfassen, in der es nur einen Idle-State gibt. Aktuell müsstest du es in die Richtung umbauen, dass die Abfrage wärendessen die Pumpe ein ist, nicht ausgeführt wird.

Beste Grüße,
NWO

Besten Dank für die Erklärung. Eine Abfrage des PumpenStatuss habe ich jetzt drin. Jetzt funktioniert. Ich hätte ne kurze frage dann:
Während Z.Machine in Waiting modus ist, ist die ganze While schleife dann auch im Wartemodus. Das ist aba nicht so fein finde ich. Gibts ne andere lösung dass die andere Aktionnen in der Schleife weiterausgeführt werden (ausser 2 Paral. Schle.) ?

Besten Dank nochmal,

[attachment=31396]
Lv10
Hallo Amir,

anbei mal eine Version (inLv10), wo die Logik zum Ausschalten der Pumpe nach einer einstellbaren Zeit integriert ist.

Da du schon eine Wartefunktion in der Whileschleife hast, brauchst du die nicht mehr im Wait-State. Da wird nur kontrolliert, ob die Pumpe wieder ausgeschaltet werden soll...

Tipps:
- benenne den "Wait"-State nach "Wait for SwitchOff" um (ist eindeutiger, finde ich)
- benutze eine TypeDef für das Enum, dann kann man leichter neue States hinzufügen
- mache einen ähnlichen Case für ein Anschalten der Pumpe nach einer gewissen Zeit statt einer vorgeschalteten Logik mit zweiter Case-Struktur - so hast du immer genau definierte States, in denen sich dein Programm gerade befindet!
Seiten: 1 2
Referenz-URLs