LabVIEWForum.de - Bedingung mit Timer verknüpfen

LabVIEWForum.de

Normale Version: Bedingung mit Timer verknüpfen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

da ich hier im Forum neu bin, möchte ich mich kurz vorstellen.
Ich bin gelernter Elektriker (ist schon eine Ewigkeit her) und habe auf der Technikerschule meine ersten Erfahrungen mit LabView gemacht.
Da aber LabView an der Schule gerade so im "Aufbau" war, gab es noch keine richtige Ausbildung. Einlesen/Erfassen von versch. Werten
über einen DAQ-Assistenten, dazu ein paar Formeln, das war es dann auch.
Mittlerweile habe ich diverse Bücher gelesen, aber da ich bisher in der Arbeit keine Möglichkeit hatte LabView anzuwenden ist mein Wissenstand begrenzt.
Strukturen sind geläufig und mit Arrays komme ich nach einigen Probieren klar. Wenn ich ein Problem habe, probiere ich halt viel herum.
Sehr viel Selbststudium. Ich hoffe ihr akzeptiert meine "nervigen" Fragen. Einige davon sind sicherlich totale Anfängerfragen, aber schließlich fängt
jeder mal klein an.Big Grin

Nun zu meinem Problem:
Ich möchte einen Gleichstrommotor über digitale Ausgänge schalten. Der Betrieb soll über einstellbare Zeiten geregelt werden und wiederholt sich.
Eine Sequenz ist für mich bis jetzt die einfachste Lösung.
Der Motor hat im Nennbetrieb ca. 5A Stromaufnahme. Steigt der Strom über einen einstellbaren Wert, soll der Motor anhalten.
Allerdings erst, wenn der Strom eine festgelegte Zeit den Nennstrom überschreitet. Der Motor soll also weiterlaufen, wenn der Nennstrom max. 2 sec überschritten wird. Erst dann soll der Motor abschalten.
Die Strombegrenzung habe ich über eine einfache "Größer als" Funktion realisiert, aber wie bekomme ich es hin, dass der "Überstrom" 2 sec anliegen darf
und dann erst abgeschaltet wird. Mittlerweile verstricke ich mich in Schleifen und Case-Strukturen. Dazu kommt noch, wenn der Motor innerhalb der
2 sec seinen Nennstrom wieder erreicht hat, der Motor normal weiterlaufen soll.
Ich denke bestimmt viel zu kompliziert und es ist ganz einfach!

Grüße
Hallo ETechnik,

Zitat:Ich möchte einen Gleichstrommotor über digitale Ausgänge schalten. Der Betrieb soll über einstellbare Zeiten geregelt werden und wiederholt sich.
Wenn du fest definierte Zustände und klare Bedingungen hast, solltest du immer eine Statemachine verwenden!

Zitat:Allerdings erst, wenn der Strom eine festgelegte Zeit den Nennstrom überschreitet. Der Motor soll also weiterlaufen, wenn der Nennstrom max. 2 sec überschritten wird. Erst dann soll der Motor abschalten.
Es gibt eine Funktion names PtByPt-BooleanCrossing, die dir sagt, wenn sich eine boolsche Bedingung ändert. Wenn also sich die Bedingung ändert, merkst du dir die aktuelle Zeit (Stichwort: Schieberegister!). Dann nur noch prüfen, ob (aktuelle Zeit) - (gemerkte Zeit) > Limit AND Strom > Limit…
Danke für die Hilfe,

ich habe eine Lösung gefunden.
Wahrscheinlich eine Lösung für Anfänger, aber es funktioniert.
Nach dem Start läuft der Motor. Über den Schieberegler kann ich einen Überstrom einstellen.
Wird dieser erreicht, startet die Zeitmessung. Nach 2 sec Überstrom stoppt der Motor. Wird der Überstrom
innerhalb der 2 sec wieder unterschritten läuft der Motor weiter.
Ich wäre aber trotzdem dankbar, wenn Du mir Deine Lösung zeigen könntest. Die ist sicherlich etwas professioneller.

Grüße
Hallo ETechnik,

sieht doch schon sehr gut aus!

Ich würde noch:
- eine kleine Wartezeit in die Schleife tun, man muss nicht im Microsekundentakt die Uhrzeit abfragen
- die "2s"-Wartezeit variabel machen, d.h. ein Control nutzen
- die boolschen Verknüpfungen aufräumen, die NOT-Funktionen lassen sich sehr schön durch die CoumpoundArithmetik entfernen…
Hier mal Quick'n-Dirty Dein VI in einer etwas optimierten Fassung und das ganze nochmal als Statemachine. Letztere lässt sich natürlich nicht nur mit Motor-Start/Stop erweitern, sondern auch mit weiteren States.

(Dann sollte man aber vom Enum eine Typedef machen, damit man bei Änderungen nicht alle Stellen einzeln ändern muss.)

Hth


(Edit: vergessene Verzögerung in oberer VI-Schleife ergänzt.)
Hallo Nordvestlys,

danke für Deine Beispiele.
Als Einsteiger kommt man da aber nicht drauf. Ich habe es halt etwas "umständlich" gelöst.
Dein oberes Beispiel ist verständlich. Warum hast Du eigentlich Eigenschaftsknoten und nicht lokale Variablen verwendet?
Ich habe für I-dummy und I-max je eine lokale Variable angelegt und konnte beim Ausführen keine Änderung feststellen.

Beim unteren Beispiel hast Du zusätzlich noch eine Ereignisstruktur eingefügt. Das leuchtet mir noch nicht so recht ein.
Aber da komme ich schon noch dahinter.

Grüße!!!
(27.05.2015 18:21 )ETechnik schrieb: [ -> ]Als Einsteiger kommt man da aber nicht drauf. Ich habe es halt etwas "umständlich" gelöst.
Gutes Buch und ein klein wenig Erfahrung helfen.
Meistens findet man ordentliche Strukturen am Anfang zu kompliziert und zu aufwändig. Dann verzweifelt man immer wieder an fehlenden Möglichkeiten und Fehlersuche bei mal-eben-schnell-Sachen und gewöhnt sich dadurch ein paar Entwurfsprinzipien an....
Zitat:Dein oberes Beispiel ist verständlich. Warum hast Du eigentlich Eigenschaftsknoten und nicht lokale Variablen verwendet?
Hmmm, vermutlich erstens Geschmackssache und zweitens Universalität. (leichte Erweiterung auf zusätzliche Eigenschaften, mögliche Nutzung von Referenzen oder die Möglichkeit z.B. eine zeitliche Abhängigkeit durch Zweckentfremdung des Fehlereingangs zu schaffen.)
Zitat:Beim unteren Beispiel hast Du zusätzlich noch eine Ereignisstruktur eingefügt. Das leuchtet mir noch nicht so recht ein.
Aber da komme ich schon noch dahinter.
Bestimmt :-)
Gute Bücher sind bei mir "Einführung in LabView" aus dem Hanser-Verlag, "LabView-Kurs" von Kurt Reim (enthält viele Beispiele auf Einsteigerniveau) und
"Praxiseinstieg LabView" von Franzis (da habe ich mir mehr erhofft).

Grüße
Referenz-URLs