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!
Hallo,
erstmal der Hintergrund:
Ich habe eine Hauptprogramm geschrieben, welches viele SubVIs beinhaltet. In diesem Programm geht es um Temperaturen bei bestimmten Verhältnissen auszulesen.
Nun meine Frage:
Gibt es eine Möglichkeit so eine Art übergeordnetes SubVI zu schreiben, um eine Temperaturgrenze als Absicherung zu setzen?
Bsp:
Die kritische Temperaturabfrage findet immer alle 5min statt (egal wo ich mich gerade im Hauptprogramm befinde!!!). Wenn Temperatur ok ist, soll das Programm fortfahren. Wenn nicht sofort abbrechen, oder Gegenmaßnahmen einleiten.
Ich hoffe man kann aus meinen Erklärungen entnehmen, um was es sich handelt.
Nicht alles ganz klar. Wie ist dein Hauptprogramm aufgebaut? Kannst du es überhaupt an jeder Stelle abbrechen? Hast du eine State Machine? Müssen diese 5 Minuten genau eingehalten sein? Hast du mehrere parallele Schleifen im Programm oder nur eine Hauptschleife?
Mein erster Vorschlag wäre ein VI zur kritischen Messung zu erstellen und dieses in eine Case-Struktur in einer parallele While-Schleife setzen. Diese While-Schleife wird z.B. jede Sekunde ausgeführt, aber nicht das VI in der Schleife. Erst, wenn 5 Min. vorbei sind, wird das VI ausgeführt und abhängig vom Resultat der Messung wird ein Event ausgelöst, der die Hauptschleife z.B. abbricht.
Um genaueres zu raten musst du mehr über deine Vorgehensweise sagen und evtl. noch Screenshot deines HauptVIs hier posten.
' schrieb:Nicht alles ganz klar. Wie ist dein Hauptprogramm aufgebaut? Kannst du es überhaupt an jeder Stelle abbrechen? Hast du eine State Machine? Müssen diese 5 Minuten genau eingehalten sein? Hast du mehrere parallele Schleifen im Programm oder nur eine Hauptschleife?
Mein erster Vorschlag wäre ein VI zur kritischen Messung zu erstellen und dieses in eine Case-Struktur in einer parallele While-Schleife setzen. Diese While-Schleife wird z.B. jede Sekunde ausgeführt, aber nicht das VI in der Schleife. Erst, wenn 5 Min. vorbei sind, wird das VI ausgeführt und abhängig vom Resultat der Messung wird ein Event ausgelöst, der die Hauptschleife z.B. abbricht.
Um genaueres zu raten musst du mehr über deine Vorgehensweise sagen und evtl. noch Screenshot deines HauptVIs hier posten.
So habe nun ein Screenshot eingefügt. Wie man sieht habe ich nur eine Schleife. Die kritische Funktion sollte auch erst eingreifen, wenn das SubVI "Datei.Speichern" (das ist die große Case-Struktur ausgeführt wird.). Das SubVI "Datei.Speichern" besteht eigentlich nur aus mehreren ineinanderverschachtelten for-Schleifen, die nach und nach abgearbeitet werden. Hier befindet sich keine While-Schleife im Innern.
Zu deinen Fragen:
1.Hauptprogramm ist unten als Scrennshot.
2.Das weiß ich nicht. Aber ich würde gerne an jeder beliebigen Stelle abbrechen wollen.
3.State-Maschine kenn ich nicht. Ich denke, ich habe auch bis jetzt keine eingebaut.
4.Die 5 Minuten sind nur ein Beispielwert. Müssen auch nicht genau eingehalten werden, denn die Temperaturentwicklung ist sehr langsam.
5.Insgesamt habe ich mehrer While-Schleifen im Programm. Doch wie gesagt, bei SubVI "Datei.Speichern" habe ich keine While-Schleife mehr. Parallele While-Schleifen habe ich gar keine.
Wie meinst das mit der Parallel-Schleife? Kannst du kurz ein Beispiel erstellen?
Wenn ich dich recht verstehe, müsste ich ja meine kritische While-Schleife in die große Case-Struktur (siehe Scrennshot) einbauen. Ist das richtig so?
1. mache nur eine While-Schleife, das sollte für dein Prog reichen
2. vermeide mehrere Event Strukturen in einem VI, sehr gefährlich
3. deine grosse Case-Struktur kannst du eigentlich direkt in das "Datei erstellen" case setzen, wenn es nur dort ausgeführt werden soll.
Du kannst leicht in eine Event Struktur mehrere Events einfügen, dazu Rechtsklicke und Add Event.. auswählen.
Unten ein Beispiel. Wenn du soweit bist, schauen wir weiter.
' schrieb:Hmm, wann brauchst du denn sowas? Ich habe es noch nie gebraucht.
hi,
vermutlich kann man das auch immer umgehen. aber was mich eigentlich interessiert, warum man nicht mehrere eventsstrukturen verwenden soll. wo ist da das problem, oder welche fehler können auftreten?
mfg jeffrey
edit: was passiert, z.b. wenn mehrere ereignisse mit wertänderung abgefragt werde. diese änderungen aber gleichzeitig auftreten können, weil sie gleichzeitig aus der messung eingelesen werden. werden dann trotzdem alle abgearbeitet'?
31.01.2008, 15:03 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2008 15:04 von Achim.)
' schrieb:edit: was passiert, z.b. wenn mehrere ereignisse mit wertänderung abgefragt werde. diese änderungen aber gleichzeitig auftreten können, weil sie gleichzeitig aus der messung eingelesen werden. werden dann trotzdem alle abgearbeitet'?
Irgendwann hängt sich in so einem Fall dein Programm auf, weil es einfach nicht weiß, wie es weitergehen soll...oder weil "gegensätzliche" Befehle abgearbeitet werden...oder weil eine Struktur auf das Ergebnis der anderen wartet...oder...
Prinzipiell kann man so viele Eventstrukturen in einem VI verwenden wie man will...man darf sich dann bloß nicht über unerwartetes Verhalten wundern!
Man kann IMMER ALLE Events in einem VI mit einer einzigen Eventstruktur abhandeln...eine zweite (dritte, vierte..) ist einfach unnötig, fehlerträchtig und zeugt von wenig Übersicht des Programmierers über seine SW...'nuff said!
A.
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
31.01.2008, 15:06 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2008 15:07 von jg.)
Steht irgendwo in der LV-Hilfe bei den Guidelines zur Event-Structure:
Sinngemäß: Don't use more than one Event-Structure in one loop.
Erfahrung zeigt: Man handelt sich in der Regel irgendwo ein Lockup des FP oder Ähnliches ein, da 2 Event-Strukturen gleichzeitig irgendwo auf ein Event warten. Und wie Eugen auch schon sagt, brauchen tut man es eigentlich nicht!
Es gibt auch immer mal wieder Ärger, wenn man 2 Event-Structures in einem VI (aber in 2 Loops) verwenden will.
Deshalb die generelle Empfehlung, um sich unnötigen Ärger zur ersparen: 1 Event-Structure pro VI (und man hat Ruhe).
MfG, Jens
EDIT: @Achim: Na, da sind wir ja mal wieder einer Meinung
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!