Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
ich habe ein Programm erstellt, welches unter Eingabe bestimmter Koordinaten (X und Y) einen Punkt anfährt, die Messdaten von diesem bekommt und diese in ein Array schreibt. Soweit klappt das auch gut. Um diesen Abschnitt habe ich eine Whileschleife mit „Wait for pront panel Activity“ gelegt, um das kontinuierlich auszuführen.
Allerdings möchte ich nun nicht manuell die Koordinaten eingeben, sondern sollen diese nacheinander automatisch abgefahren werden. Allerdings dauert die Messung ca. 1sek. Die also bei jedem Umstellen gewartet werden muss. Ich habe versucht die Koordinaten durch 2 verschachtelte For-Schleifen zu verstellen und mit dem Wait-Befehl die Schleifen zu verzögern.
Wenn ich das allerdings mache, scheint der Wait-Befehl das komplette Programm zu pausieren sodass auch keine Messungen mehr stattfinden. Ergo: Das Wait darf nur auf die Schleifen wirken – nicht auf den Rest des Programms.
Kann mir hier jemand helfen??
Schönen Dank im Vorraus!
Chillkroete
PS: Da das komplette Programm eher schwierig zu verstehen ist, habe ich das jetzt mal nicht hochgeladen, sondern nur den Screenshot meines Schleifenversuchs. Wenn gewünscht, kann ich das auch gerne noch hochladen.
Anzeige
14.02.2013, 19:00 (Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2013 19:03 von Trinitatis.)
die Wait-Funktion wartet genau an der Stelle, an der sie eingebaut ist. Alle datenflussrelevanten Schritte müssen dann natürlich auch warten. Was aber parallel läuft ist davon unberührt.
Für mich hört sich das so an, als ob du dir in deiner Erklärung wiedersprechen würdest. Du meinst, dass die parallelen Operationen vom Wait-Befehl unberührt sind. Aber der Rest meines Programms läuft ja parallel, also sollte demnach unberührt sein (oder tut er das nich?!). Auf der anderen Seite meinst du die Hauptschleife steht - und damit scheinst du ja leider Recht zu haben!
Hast du vielleicht auch eine Lösung, wie ich den anderen Teil des Programms parallel laufen lassen kann?
Und nun zu den Case Strukturen, Gerd:
Deine Fehlermeldung verstehe ich nicht, aber ich schätze du willst mir damit sagen, dass das alles andere als ressourcen schonend programmiert ist.
Abgesehen davon, dass das vielleicht ein unsauberer Programmierstil ist: Kann man damit das Problem lösen? Ich würde gerne erstmal das Programm zum laufen kriegen, bevor wir über "eleganz" reden =).
Zitat:Abgesehen davon, dass das vielleicht ein unsauberer Programmierstil ist: Kann man damit das Problem lösen? Ich würde gerne erstmal das Programm zum laufen kriegen, bevor wir über "eleganz" regen =).
Unsauber ist fast noch untertrieben...
Wenn du dein Programm gleich auf eine Statemachine umstellst, wirst du es schneller (!) zum Laufen kriegen und nebenbei gleich noch "Eleganz" (d.h. Struktur) hineinbekommen. Das Einfügen von Wartezeiten ist dann ein Kinderspiel, da nur Einfügen eines weiteren States.
Wenn man etwas programmiert, sollte man sich vorher Gedanken um den Funktionsumfang machen - und nicht erst zum Ende der Programmierung hin!
Alles klar, das leuchtet ein, allerdings sehe ich immer noch keinen Zusammenhang zwischen den Case-Structures und meinem Problem. Die Case-Structures sind nur zum Reseten der Messwerte oder zum springen zu positionen.
Ich hänge jetzt einfach mal das Programm dran, damit verständlich ist, was ich meine.
Wenn das Programm läuft, kann man mit "Relative Coordinates" den Messpunkt (current measurement spot) verstellen. Wenn man jetzt die Schleife unten aktiviert, werden die "Relative Coordinates" automatisch verstellt. Der Messpunkt ändert sich aber nicht.
Ich führe das darauf zurück, dass er zwar den Indicator ändert, von daaus aber nicht weiterrechnet. Wie wenn ich mit der Tastatur den Wert ändere, aber nicht auf Enter drücke. Gibt es eine Möglichkeit eine erneute Berechnung mit den aktuell eingegebenen Werten auszulösen?
Anzeige
15.02.2013, 12:50 (Dieser Beitrag wurde zuletzt bearbeitet: 15.02.2013 12:51 von GerdW.)
Zitat:Wenn das Programm läuft, kann man mit "Relative Coordinates" den Messpunkt (current measurement spot) verstellen. Wenn man jetzt die Schleife unten aktiviert, werden die "Relative Coordinates" automatisch verstellt. Der Messpunkt ändert sich aber nicht.
Ich führe das darauf zurück, dass er zwar den Indicator ändert, von daaus aber nicht weiterrechnet. Wie wenn ich mit der Tastatur den Wert ändere, aber nicht auf Enter drücke. Gibt es eine Möglichkeit eine erneute Berechnung mit den aktuell eingegebenen Werten auszulösen?
Was soll man dazu sagen?
THINK DATAFLOW! THINK DATAFLOW! THINK DATAFLOW!
LabVIEW arbeitet datenfluss-basiert. Eine Struktur ist abgearbeitet, wenn alle enthaltenen Elemente abgearbeitet sind. THINK DATAFLOW!
Wenn deine Schleife aktiviert wird, wird sie abgearbeitet und blockiert währenddessen die äußere While-Loop. Think DATAFLOW!
Wenn du Dinge parallel abarbeiten willst, musst du sie auch parallel programmieren. Eine Struktur innerhalb der anderen ist nicht "parallel". THINK DATAFLOW!
- Etwas mehr Struktur wäre trotzdem nicht schlecht.
- Warum zwei Intensitycharts, die beide das gleiche selbe anzeigen? Reicht dir einer nicht?
- Warum haben FP-Element identische Namen? Warum gibt es FP-Elemente ohne Namen? Würdest du so etwas bei textbasierter Programmierung auch machen?
(15.02.2013 10:59 )Chillkroete1206 schrieb: Zunächst mal zum Wait-Befehl, Trinitatis:
Für mich hört sich das so an, als ob du dir in deiner Erklärung wiedersprechen würdest. Du meinst, dass die parallelen Operationen vom Wait-Befehl unberührt sind. Aber der Rest meines Programms läuft ja parallel, also sollte demnach unberührt sein (oder tut er das nich?!). Auf der anderen Seite meinst du die Hauptschleife steht - und damit scheinst du ja leider Recht zu haben!
Hallo Chillkroete,
Deine parallele Abarbeitung besteht darin, dass die beiden inneren For-Schleifen parallel zum Rest in der Hauptschleife abgearbeitet werden. Das heißt aber, dass die inneren Schleifen erstmal n mal durchlaufen werden müssen, bevor die gesamte Hauptschleife abgearbeitet ist.
Insofern ist der Widerspruch nur scheinbar.