LabVIEWForum.de - Zyklisch Zeit ermitteln

LabVIEWForum.de

Normale Version: Zyklisch Zeit ermitteln
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe hier ein Programm, welches die aktuelle Zeit ermittelt und die While-Schleife nach einer Zeitvorgabe abbricht. Danach warte ich einige Sekunden und gebe eine zweite Zeitvorgabe vor.
Nun brauche ich bei jedem For-Schleifendurchlauf die Zeit von 0 Sekunden bis zur Zeitvorgabe. Wird der nächste For-Schleifendurchlauf gestartet, so soll die Zeitmessung wiederum bei 0 Sekunden bis zur zweiten Zeitvorgabe laufen. Die Anzeige sollte also wie folgt zählen:

Zeitvorgabenarray: 1. 3 Sek.
2. 8 Sek.
3. 5 Sek.

Nun soll die Anzeige der verstrichenen Zeit von 0 Sek. bis 3 Sek. laufen, dann 4 Sekunden warten, dann wiederum von 0 Sek. bis 8 Sek. zählen und dann wieder 4 Sekunden warten und zuletzt von 0 Sek. bis 5 Sek. laufen.
Entweder habe ich momentan ein Brett vor dem Kopf oder es ist doch schwieriger als ich dachte.

[attachment=37693]

Bitte testet das Programm selbst, um mein Ziel zu verstehen. Warum ich die Funktion benötige kann ich so hier nicht einfach erklären. Es ist ziemlich komplex, daher bitte ich euch mir einige Vorschläge zu machen für diesen Wunsch den ich habe.

Vielen Dank

Gruß LV-Starter

sorry für die neue Version von LabVIEW, hier in Version 8.0

[attachment=37695]
Hallo LV-Starter,

manchmal ist das Leben so einfach, wenn man die Kontexthilfe liest:
[attachment=37699]
Hi GerdW,

vielen Dank "mal wieder" ;-). Ich hatte die Kontexthilfe bestimmt schon zu oft durchgelesen und habe das mit dem Zurücksetzen in vielen verschiedenen Varianten ausprobiert jedoch nicht mit der Abfrage =0, das war es.

Nocheinmal Danke schön und einen schönen Mittag.

Grüße

LV-Starter
Ihr Deppen ihr Idea, ist euch denn gar nicht aufgefallen, daß der Vergleich der verstrichenen Zeit mit der Zielzeit im VI "Verstrichene Zeit" enthalten ist und nicht extern gemacht werden muß?
[attachment=37704]
[attachment=37705]
Hallo Lucki,

huch, mal wieder was gelernt. Das kommt davon, wenn man sonst nicht mit ExpressVIs arbeitet und sich auf's eigentliche Problem "Reset" konzentriert. Für mein Snippet habe ich extra noch alle vorher gezeigten Anschlüsse ausgeblendet...
(14.12.2011 15:24 )GerdW schrieb: [ -> ]huch, mal wieder was gelernt.
Dafür könntest Du mich belohnen, indem Du dich mit meiner soeben geposteten Frage "Boolsches Element deaktivieren" beschäftigst..
Hallo zusammen,

die Lösung für das oben beschriebene Problem wurde gelöst, jedoch habe ich ein etwas abgeändertes Ziel verfolgt womit die Lösung leider so nicht zurecht kommt.

Das folgende Programm basiert auf einer CAN Aufnahme in der erst eine Zeit beginnen soll abzulaufen wenn hier in der Funktion (stark vereinfacht) ein Arrayinhalt ungleich 0 ist. Das heißt für die Funktion im Speziellen:

Die äußerste For-Schleife gibt die Sekunden vor (12 Sek. und 10 Sek.). Die beiden inneren While-Schleifen regeln die Aufnahme (im realen System nicht hier in der Funktion) und die Zeitdauer der Aufnahme. Nun soll die Zeit stets 0 bleiben wenn der Botschaften CAN - Array Nullwerte beinhaltet. Dieses Array wird später ein Array sein und kein einzelner Wert daher ist die innere While-Schleife notwendig.

Ändert sich der Botschaft-inhalt z.b. auf eins so beginnt der Zähler (die Zeit) abzulaufen bis zur Vorgabe z.b. von 12 sek. Ist dieser erreicht kann eine beliebige Zeit ablaufen hier simuliert durch die 2 Sekunden bis die nächste Zeitvorgabe gemacht wird (10 Sek.). Nun soll wiederum gewartet werden bis der Botschaftsinhalt ungleich 0 ist und bei Wertänderung z.b. wieder auf 1 beginnt die Zeit diesmal von 0 und soll bis 10 sek. laufen, das tut sie leider nicht sie startet bei dem Zeitwert bis die nächste Wertänderung vorgenommen wurde, am Besten mal ausprobieren, ist schwer zu erklären.

Zusammengefasst (Ziel)
- > 12 Sekunden Gesamtzeitdauer -> bei Wertänderung des Arrays ungleich 0 (innerhalb von 12 sek. muss dieser wieder auf 0 gesetzt werden!!! -> Zeit läuft bis 12 Sek.
-> beliebige Zeit kann vergehen ...
-> 10 Sek. Gesamtzeitdauer -> bei Wertänderung des Arrays ungleich 0 (innerhalb von 10sek. muss dieser wieder auf 0 gesetzt werden!!! -> Zeit läuft bis 10 Sek.
-> Fertig

Hoffe ihr könnt mir weiterhelfen, denke es ist nicht mehr weit bis zur Lösung.

Vielen Dank.

Grüße

[attachment=37735]

LV-Starter
Hallo LV-Starter,
im Anhang ein Vorschlag.

Gruß
Ralf
Hallo rasta,

ich bin wirklich sehr froh, dass sich jemand damit beschäftigt hat aber entweder komm ich mit der Bedienung nicht so zurecht obwohl ich den Code nachvollziehen kann.

Dein Programm fängt an die Zeit ablaufen zulassen wenn alle drei Werte ungleich 0 sind. Ich jedoch bräuchte wenn sich ein Wert ändern dass ein sogenannter Implus stattfindet und wenn dieser Arrayinhalt innerhalb z.b. der 12 Sek. auf 0 wieder geht sich die Zeit nicht zurücksetzt sondern zu Ende bis 12 Sekunden läuft. Mit meiner Funktion habe ich dies bereits hinbekommen.

Außerdem war der Wunsch vorhanden dass zwischen den 12 Sekunden und den 10 Sekunden eine beliebige Zeit gewartet werden kann (z.b. mittels einem boolschen Button den nächsten Zeitwert vorgeben und dann wieder warten bis ein Arrayinhalt ungleich 0 ist und dann rast die Zeit wieder los bis 10 Sek. unabhängig ob alle Werte während dieser Zeit auf 0 gehen. Bei deiner Funktion läuft es jedoch komplett durch, erst 12 Sek. dann 10 Sek ohne Pause. Hab ich dein Code nicht richtig verstanden oder einfach nur falsch bedient?

Trotzdem vielen Dank für deine Mühe, vll kannst du mir trotzdem weiterhelfen?

Schönen Abend wünsche ich allen.

Gruß
LV-Starter
Referenz-URLs