LabVIEWForum.de - Timing Problem

LabVIEWForum.de

Normale Version: Timing Problem
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,
ich bin noch recht neu bei LabVIEW und stehe seit heute mittag vor folgendem Problem.
Ich steuere eine Stromquelle (6680) und ein Multimeter (34401) über GPIB an.
An der Stromquelle hängt ein Schand und ich messe mit dem Multimeter den Spannungsabfall
über diesem. Nun funktioniert das alles auch sehr gut wenn ich einzelne Stromwerte eingebe.
Ich muss den Strom aber koninuierlich ändern (Rampenfunktion). Jeder Wert der Rampe muss
für kurze zeit gleich bleiben, damit er gemessen werden kann. Bisher habe ich dies durch eine
Verzögerung der schleife versucht zu lösen, allerdings funktioniert dies nicht, da das ganze vi
(und nicht nur die schleife) dann für kurze zeit stehen bleibt.
Hat jemand vielleicht eine Idee, wie man das richtig löst?
Vielen dank schonmal

Lv85_img
Es ist eine wahre Shunt..., daß das nicht funktioniert!

Zum Problem:
Du musst alles, was dauernd passieren soll, in eine gemeinsame While-Schleife legen! Am besten wäre es, wenn du dir eine State Machine aufbauen würdest:

State 1: Initialisierung Stromquelle + Messkarte
State 2: Ausgabe erster Stromwert
State 3: Wartezeit x Sekunden
State 4: Messung/Auswertung/Speicherung
State 5: Prüfe ob Abbruchbedingung (welche?) erfüllt
NEIN -> State 6: Inkrement/Ausgabe Stromwert, dann weiter mit State 3
JA -> State 7: Aufräumen (Close/Clear/Stop/etc.)

Beiträge zur State Machine gibts jede Menge im LVF!

Gruß
Achim
Ah okay das Hilft mir schon mal viel. Ich komm erst wieder nächsten Montag zum programmieren
aber ich berichte dann ob alles geklappt hat. Das mit der State Machine ist mir bisher noch nicht über den weg gelaufen :-)
vielen dank schonmal.
so, jetzt hab ich mal das ganze in eine State Machine gepackt.
Ich weiß, das es noch ein wenig unübersichtlich ist aber ich hatte nicht viel Zeit.
(kommt später noch)
Ist es wohl möglich, das ganze noch ein wenig zu beschleunigen?
Was kostet den bisher noch am meisten Zeit?
Danke schon mal im voraus.

[Bild: lv85_img.jpg]
[attachment=15248]
[attachment=15249]
Hi,
ich glaube nicht, dass du irgendwo noch einen wesentlichen Zeitgewinn kriegen wirst...am ehesten vielleicht bei den verschiedenen Lesemodi für das Messgerät. Du hast halt ein externes Gerät...Was genau geht dir denn zu langsam?

Ganz allgemein: Die innere While-Schleife bei "Spannung messen" solltest du rausschmeißen, dafür den eigentlichen Case "Spannung messen" mehrfach anspringen, bis eine Bedingung erfüllt ist. Beim ersten Aufruf des Case machst du "Initiate Measurement", das merkst du dir z.B. über eine boolesches Schieberegister, das für alle Cases die Init-Bedingung durchschleift...d.h. beim vorhergehenden State A setzt du das auf TRUE und wertest es im folgenden State B aus...direkt nach der Auswertung setzt du es auf FALSE für den zweiten Aufruf von State B...beim letzten Aufruf von State B setzt du es wieder auf TRUE als Init für State C...

Vorteil dabei: Du kannst die State Machine von außen jederzeit durch eine User-Eingabe abbrechen, auch wenn ein entsprechender Button nicht genau im State "Spannung messen" platziert ist. Dazu müsstest du allerdings evtl. noch eine Eventstruktur einbauen...guck dir auch mal die Beispiele zur "Producer-Consumer-Architektur" an!

Deine Variante funzt zwar, man kann's aber noch optimieren Tongue

Gruß
Achim
Referenz-URLs