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!
in meinem Hauptprogramm (AutosaveFunktion.vi) benötige ich für einen Datenlogger eine Art zeitgesteuerten Latch-Schalter, der mir einen true/false-Impuls sendet. Mit diesem Impuls wird der Log-Vorgang initiiert. Das Zeitinverall soll frei wählbar, sowie auch manuell beliebig überbrückbar sein.
Zur Vereinfachung habe ich die Zeiterfassung und Tastersteuerung als SubVI ausgelagert. Allerdings kam ich nicht drumrum, im SubVI eine Schleife mit Schieberegistern laufen zu lassen. Dachte über die Weitergabe des Stop-Impulses des main-Programms ließe sich die ebenfalls ausschalten.
Mein Problem ist aber, dass das Hauptprogramm einfriert und nicht mehr reagiert. Woran liegt das? Wird bestimmt wieder was triviales sein..
Solange dein Sub-VI nicht gestoppt wird, was bei deinem Sub-VI nur geschehen kann, wenn dort der STOP Button gedrückt wird, wartet dein Hauptprogramm bis dein Sub-VI beendet wird. Du musst also dafür sorgen, dass nach Ablauf der gewünschten Zeit die Schleife beendet wird. Wenn du das Sub-VI von externer Stelle abbrechen willst, musst du das per Notifer, Global Variable o.ä. durchführen, was aber vom Hauptprogramm aus, in einer weiteren unabhängigen Schleife geschehen muss.
(16.05.2011 13:00 )onsight8c schrieb: Allerdings läuft das Programm schon nach dem Einschalten nicht. Der Counter läuft nicht hoch und der gelatchte Schalter "save now" hängt..
Das Programm läuft schon. Allerdings ist es im Sub-VI "gefangen". Dort befindet sich die Whileschleife, welche nur durch den Stoptaster auf dem SubVis-FP abgebrochen werden kann. Dies ist zwar mit der Stop-Taste des Haupt-Vis verbunden, die wird aber nur einmal beim Aufruf des Sub-Vis ausgelesen und dann erst wieder beim nächsten Durchlauf. Also so lange das Programm im Sub-Vi steckt, kannst du auf dem FP des Main-VIs soviel klickern, wie du willst, da ändert sich gar nichts.
Was du brauchst ist eine Routine, um Daten zwischen Elmenten aus dem Main-VI und dem SubVI auszutauschen, das geht mit:
Queues/Meldern
Referenzen
GV/FGVs
usw.
Wie auch schon F.Bi erläutert hat.
Am Besten mal das Programm ordentlich debuggen mit der Lampe, Breakpoints und Sonden. Dann siehts du ganz genau, was wie 'verkehrt' läuft.
z.B. läuft der Counter im Haupt-Vi deswegen nicht hoch, da das Sub-Vi erst den Wert zurückliefert, wenn es beendet ist. Und da das Sub-Vi sich in seiner Schleife befindet, gibt es auch keinen Wert zurück.
Beste Grüße,
NWO
9 von 10 Stimmen in meinem Kopf sagen: Ich bin nicht verrückt,
die andere summt die Melodie von Tetris.
NI schrieb:To use the abort button is like using a tree to stop a car!
also du musst immer auf den Datenfluss achten... solange in einem Subvi welces du mit Eingängen direkt im HauptVI startest muss dein Haupt Vi solange warten bis das Subvi fertig ist. in deinem Fall bis die While Schleife gestoppt wird ... also garnicht ...
Ausserdem hast du in der Whileschleife des Haupt und des Sub Vis keine Verzögerung eingebaut ... d.h. die ´Schleife läuft auf Voller Pulle und kann auch mal eine 100% CPU Last bedeuten...
ich habe deine Vis mal umgebaut ...ohne die Funktion des subvis mit näher anzusehen (evtl habe ich den AutoSave Eingang falsch verdrahtet ...)
jetzt wird dein Log Vi vor der Schleife deines Haupt Vis dynamisch gestartet.. d.h. quasi im Hintergrund .. Die Datenübertragung erfolgt per Notifier bei dem alle Buttons und Controlls die vorher direkt am Vi angeschlossen waren in einem Cluster zusammengefasst sind. Wenn sich jetzt der Zustand eines Controls änder wird eine neue message geschickt und im Subvi empfangen.
ich hoffe das vom Runterspeichern von 2010 auf 8.2 es keine Probleme gibt ...
Danke dir toaran_ für das Umschreiben, glaub das Runterspeichern hat doch einiges zerbröselt, das Programm läuft war sehr schnieke, aber es kommt von den Eingaben im main-VI nichts im Subvi an.. Wenn du mir den 2010er Code anhängen könntest, wär das super!
Ich denke ich weiß, wo ich an meinem eigentlichen Programm noch nacharbeiten muss ^^
so ich hab das ganze nochmal umgestickt ... meine erste Version war ncith wirklich brauchbar ...
so nun hier eine funktionierene Version als 2010er ... ich hab jetzt auch mal mein Hirn eingeschaltet ... naja .. vor dem Mittag .. was da halt noch so geht ...
Liegt wohl am Tag heute das fehlende logger_stats.ctl hab ich schnell noch geschrieben, als TypeDef.
Soweit so gut, die Eingaben, die ich im main mache, werden an das Subvi einwandfrei übergeben und verarbeitet - sieht man ja auf den Anzeigen im SubVI sehr gut.
Da ich mit den Notifyiern noch net so wirklich durchblicke, meine Frage: sendet das SubVI die Daten auch wieder ans main zurück? Ich bräuchte im Wesentlichen im main-vi den Schreib-Impuls (als Latch-Schalter). Mit diesem spreche ich eine case-Struktur an, die mir eine Datenloggerfunktion ausführt.
Entweder bin ich zu doof, dass es nicht funktioniert bei mir oder mein LV mag mich nicht...
Für heut ist erstmal Feierabend, Gute Nacht allerseits!