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!
nach längerem grübeln komme ich einfach nicht weiter und wende mich mit meinem Problem an euch.
In dem Programm, welches ich zur Bearbeitung erhalten habe, geht es darum Prüfabläufe durchzuführen. Ungeachtet der Tatsache, dass es nicht soo gut programmiert wurde, habe ich meine Ergänzungen so vorgenommen das diese die Grundstruktur nicht verändern. Da ich das Programm nicht Abseits des Prüfstandes ausführen kann, habe ich mir eine vereinfachte Prüfumgebung rekonstruiert, welche alle relevanten Schritte durchführt und auch dieselben Fehler erzeugt, die ich auch während des Betriebs in der Prüfumgebung erhalten habe.
Zum eigentlichen Problem:
Ich habe einen Button und ein Cluster mit mehreren Bedienelementen im Hauptprogramm vorliegen, und diese nochmal in einem Tab als Kurzübersicht der wichtigsten Bedienelemente als SubVI in einem SubPanel eingebunden. Jetzt soll das SubVI alle 500ms die aktuellen Werte/Zustände des MainVI's abfragen und abholen. Bei Bedienung eines Bedienelements im SubPanel, soll diese Wertänderung auch im HauptVI übernommen werden. Dieses soll über einen Queue-Befehl erfolgen. Sollte ein Bedienelement im HauptVI betätigt werden (z.B. auch Stop), so soll ein Userereignis auf True gesetzt werden, welches im SubVI ausgelesen und ausgeführt wird. Hier erscheint mir immer ein Fehler für den falschen Input.
Ich habe so eine Kommunikation zwischen VIs eigentlich schon mal programmiert und denke auch 1:1 übernommen, jedoch sehe ich nicht warum ich diese Fehlermeldung erhalte.
Ich hoffe ich konnte mein Anliegen verständlich darstellen und hoffe auf eure Hilfe.
Zitat:Sollte ein Bedienelement im HauptVI betätigt werden (z.B. auch Stop), so soll ein Userereignis auf True gesetzt werden, welches im SubVI ausgelesen und ausgeführt wird. Hier erscheint mir immer ein Fehler für den falschen Input.
1. Ich halte es für nicht wirklich sinnvoll, bei einer FGV den relevanten Code in einer Case-Struktur zu verstecken, die nur bei "kein Fehler" ausgeführt wird. Wie willst du hier an einen gültigen Wert kommen, wenn vorher vielleicht ein Fehler aufgetreten ist???
2. Controls/Indicators sollten (aus Performancegründen) in einem subVI immer außerhalb aller Strukturen liegen, wenn sie im ConnectorPane verknüpft sind: auch das ist bei deiner FGV nicht gegeben…
Zitat:In irgendeinem SubVI hängt er sich wohl auf nehme ich an aber konnte dem leider auch noch nicht auf die Spur kommen :/
Wie siehts aus, wenn du mal debuggst? Sonden? Bedingte Sonden? Haltepunkte?
(04.03.2018 23:02 )THenry14 schrieb: In irgendeinem SubVI hängt er sich wohl auf nehme ich an aber konnte dem leider auch noch nicht auf die Spur kommen
Ich befürchte, dass hier die Sache etwas komplizierter ist.
Ich befürchte, das liegt an dem SubVI, das das SubPanel und den VI-Server handhabt. Ich halte diese Vorgehensweise nicht für gut: Parallel(!) das VI ins SubPanel laden und gleichzeitig das VI starten bzw. stoppen? Bedenke: parallel, also gleichzeitig (was es aber gar nicht gibt), bei abhängigen Methoden birgt hohes Risiko. Mindestens würde ich diese beiden Vorgänge sequenzieren.
Stutzig macht mich, dass du dieses Verfahren bereits benutzt hast und es offensichtlich funktioniert.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
vorab danke schon mal für eure Rückmeldungen. Ich kam heute leider noch nicht zum antworten.
Zitat:1. Ich halte es für nicht wirklich sinnvoll, bei einer FGV den relevanten Code in einer Case-Struktur zu verstecken, die nur bei "kein Fehler" ausgeführt wird. Wie willst du hier an einen gültigen Wert kommen, wenn vorher vielleicht ein Fehler aufgetreten ist???
2. Controls/Indicators sollten (aus Performancegründen) in einem subVI immer außerhalb aller Strukturen liegen, wenn sie im ConnectorPane verknüpft sind: auch das ist bei deiner FGV nicht gegeben…
zu 1. Werde den Ansatz mal so mitnehmen, klingt ja schlüssig. Bin bis jetzt so gut gefahren und kannte es nur nicht anders.
zu 2. Ok, alles klar. Inwiefern wird die Performance denn negativ beeinflusst?
Zitat:
Wie siehts aus, wenn du mal debuggst? Sonden? Bedingte Sonden? Haltepunkte?
Ich habe das Programm zum Beispiel mal mit der Highlightfunktion ausgeführt um wirklich jeden Schritt zu beobachten. Und wirklich, wenn ich den Stop-Button betätige, gibt es bis zum "Ereignis erzeugen" in meiner Verbraucherschleife keinen Fehler. Nachdem dort jedoch der Inputwert True gesetzt wird, erscheint danach ein Fehler. Einer der Fragen die sich mir auftun..
Zitat:Ich befürchte, das liegt an dem SubVI, das das SubPanel und den VI-Server handhabt. Ich halte diese Vorgehensweise nicht für gut: Parallel(!) das VI ins SubPanel laden und gleichzeitig das VI starten bzw. stoppen? Bedenke: parallel, also gleichzeitig (was es aber gar nicht gibt), bei abhängigen Methoden birgt hohes Risiko. Mindestens würde ich diese beiden Vorgänge sequenzieren.
Stutzig macht mich, dass du dieses Verfahren bereits benutzt hast und es offensichtlich funktioniert.
Ich habe nochmal nachgeschaut und tatsächlich hatte ich das doch bisher sequentiell gelöst..allerdings hat das mein Problem nicht behoben :/
(05.03.2018 20:36 )THenry14 schrieb: Nachdem dort jedoch der Inputwert True gesetzt wird, erscheint danach ein Fehler. Einer der Fragen die sich mir auftun..
Hast du mal kontrolliert, was ich in Beitrag 2 geschrieben habe?
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
zu Punkt 2: der Compiler"bevorzugt" Controls außerhalb von Strukturen. Außerdem kann es zu unerwarteten Rückgabewerten kommen, wenn du deine aktuelle FGV mit einem Fehler als Input aufrufst...
(05.03.2018 20:36 )THenry14 schrieb: Nachdem dort jedoch der Inputwert True gesetzt wird, erscheint danach ein Fehler. Einer der Fragen die sich mir auftun..
Hast du mal kontrolliert, was ich in Beitrag 2 geschrieben habe?
Entschuldige hatte den Punkt leider komplett vergessen..und vielen Dank das war es. Habe es gerade auf die schnelle getestet und erhalte jetzt keinen Fehler mehr beim "Ereignis erzeugen". Werde mich heute Abend dann ans umfängliche Testen mache und hoffe, dass sich damit die Kette an Problemen löst. Werde mich dann melden!
Habe mich jetzt nochmal am Testen versucht.
Die vorige Lösung hat mein Problem innerhalb des Hauptprogramms behoben. Habe noch gesehen, dass meine MSG Queue FGV noch falsche Zuweisungen, was Send und Receive angeht, hatte.
Also das MainVI läuft an sich stabil und auch das SubVI. Nur die Kommunikation zwischen den Beiden will leider immer noch nicht so recht funktionieren..