25.04.2024, 10:15
Hallo liebe Mitforisten,
eine ganz bescheuerte Frage auf die ich zwar keine Antwort per SuFu gefunden habe, aber eigentlich erwarten würde dass die schon irgendwo beantwortet ist:
Ich habe mir ein Projekt gebastelt, dass mir meine DAQ Hardware als LV-Objekt anlegt und anschließend in Kanäle zerlegt die ich aus einem Ini file initialisiere. Das ganze ist so ausgelegt, dass ich die Labels der Controls nutze um Control und zugehörigen Kanal zu verknüpfen und damit automatisch mein Mapping von meinen ini-Routinen erledigt werden kann. Der "Nachteil" ist, dass dadurch das FP von der Funktionalität weitgehend entkoppelt ist. Das nur als Vorbemerkung warum die Frage relevant ist.
Ich habe jetzt neu ein Counter Objekt gebaut, dass einen Start und einen Stop Button haben kann, mindestens aber einen Start Button braucht (der dann für Start und Stop da ist). Was von beidem vorhanden ist, kann mein Objekt prüfen, im FP wäre Aufwand und zusätzlicher Code notwendig, der noch dazu Funktionalitäten erneut implementieren müsste die auf Counter(objekt)ebene besser aufgehoben sind. Allein um zu prüfen was vorhanden ist und wie deswegen geschaltet werden müsste.
Wie will ich das lösen? --> Event Struktur im Counter Objekt die als VI asynchron gestartet wird und einfach nur die Betätigung von Start und Stop überwacht. Das als dynamische Events zur Laufzeit anzulegen, kriege ich wahrscheinlich noch hin. Mein Problem ist eher:
Beim "Aufräumen" am Ende muss ich alle diese Schleifen (und damit das VI) sauber wieder beenden. Die einfachste Lösung die mir einfällt wäre ein Button auf dem Frontpanel der nur dazu da ist, dass ich dem beim beenden ein Value (signaling) hinwerfen kann der das "Beenden" Event direkt triggert. So richtig sauber scheint mir die Lösung aber nicht - auch wenn ich solchen Lösungen nicht grundsätzlich ablehnend gegenüber stehen würde. Gibts noch ne andere Variante mit der ich trotz Eventstruktur ein pollen vermeiden kann? Gibts da irgendeinen Königsweg für wie man es machen "sollte"? Soweit ich das überblickt habe gibt es bei den dynamischen Events keins das man allein im Blockdiagram (ohne Nutzung des FP) triggern kann.
Gruß Kiesch
P.S: Was mir noch aufgefallen ist: Die dynamische Eventregistrierung will ja eine feste Zahl an Referenzen haben, die zur Entwicklungszeit bereits definiert sein müssen. Ist zu erwarten, dass das zu Problemen führt wenn ich da leere Referenzen reinschreibe? Das die triggern ist ja nicht zu erwarten (da leer) und es erspart mir im konkreten Fall nach der Button Anzahl unterscheiden zu müssen welchen Event Struktur ich verwenden muss. Das kann dann über eine passieren und dort wo notwendig wird das Programverhalten dementsprechend angepasst. So lange das nicht zur Laufzeit merkwürdige Fehler werfen kann, wäre ich damit zufrieden dort leere/ungültige Referenzen mit reinzuschreiben statt abzufangen das die leer sind.
P.P.S: Mir fällt grade noch auf, ich kann natürlich auch einen "Programmende" Button nach unten ins Objekt durchreichen und dynamisch registrieren. Den muss der Nutzer im Hauptprogram dann lediglich mit nach unten durchreichen (und darf den dann nichtmehr latchen lassen wenn ich mich recht erinnere). So richtig schön finde ich die Lösung aber ebenfalls nicht.
P.P.P.S: Falls relevant kann ich auch gerne ein Minimalbeispiel basteln was ich mir in etwa vorstelle, dann aber reduziert um die ganze LVOOP und multiplen Aufruf des asynchronen SubVIs.
LV Version ist 2019
Nachtrag:
Wenn ich das richtige Stichwort "user event" gehabt hätte, hätte ich vermutlich auch früher gefunden was die Lösung für mein Problem sein dürfte... Ich werde mich mal damit auseinandersetzen. Das sollte User Event sollte aber ja genau das machen was ich eigentlich will wenn ichs richtig überreisse.
Was mir nur noch an Fragezeichen dann üblich geblieben ist / sind, sind die P.S. und die Frage wie ich bei meinem dynamischen Event dann hinterher wieder rauskriege welches Control das getriggert hat (CtrlRef sollte da helfen) und was passiert wenn ich die CtrlRef für ein User Event abfrage...
Gruß Kiesch
eine ganz bescheuerte Frage auf die ich zwar keine Antwort per SuFu gefunden habe, aber eigentlich erwarten würde dass die schon irgendwo beantwortet ist:
Ich habe mir ein Projekt gebastelt, dass mir meine DAQ Hardware als LV-Objekt anlegt und anschließend in Kanäle zerlegt die ich aus einem Ini file initialisiere. Das ganze ist so ausgelegt, dass ich die Labels der Controls nutze um Control und zugehörigen Kanal zu verknüpfen und damit automatisch mein Mapping von meinen ini-Routinen erledigt werden kann. Der "Nachteil" ist, dass dadurch das FP von der Funktionalität weitgehend entkoppelt ist. Das nur als Vorbemerkung warum die Frage relevant ist.
Ich habe jetzt neu ein Counter Objekt gebaut, dass einen Start und einen Stop Button haben kann, mindestens aber einen Start Button braucht (der dann für Start und Stop da ist). Was von beidem vorhanden ist, kann mein Objekt prüfen, im FP wäre Aufwand und zusätzlicher Code notwendig, der noch dazu Funktionalitäten erneut implementieren müsste die auf Counter(objekt)ebene besser aufgehoben sind. Allein um zu prüfen was vorhanden ist und wie deswegen geschaltet werden müsste.
Wie will ich das lösen? --> Event Struktur im Counter Objekt die als VI asynchron gestartet wird und einfach nur die Betätigung von Start und Stop überwacht. Das als dynamische Events zur Laufzeit anzulegen, kriege ich wahrscheinlich noch hin. Mein Problem ist eher:
Beim "Aufräumen" am Ende muss ich alle diese Schleifen (und damit das VI) sauber wieder beenden. Die einfachste Lösung die mir einfällt wäre ein Button auf dem Frontpanel der nur dazu da ist, dass ich dem beim beenden ein Value (signaling) hinwerfen kann der das "Beenden" Event direkt triggert. So richtig sauber scheint mir die Lösung aber nicht - auch wenn ich solchen Lösungen nicht grundsätzlich ablehnend gegenüber stehen würde. Gibts noch ne andere Variante mit der ich trotz Eventstruktur ein pollen vermeiden kann? Gibts da irgendeinen Königsweg für wie man es machen "sollte"? Soweit ich das überblickt habe gibt es bei den dynamischen Events keins das man allein im Blockdiagram (ohne Nutzung des FP) triggern kann.
Gruß Kiesch
P.S: Was mir noch aufgefallen ist: Die dynamische Eventregistrierung will ja eine feste Zahl an Referenzen haben, die zur Entwicklungszeit bereits definiert sein müssen. Ist zu erwarten, dass das zu Problemen führt wenn ich da leere Referenzen reinschreibe? Das die triggern ist ja nicht zu erwarten (da leer) und es erspart mir im konkreten Fall nach der Button Anzahl unterscheiden zu müssen welchen Event Struktur ich verwenden muss. Das kann dann über eine passieren und dort wo notwendig wird das Programverhalten dementsprechend angepasst. So lange das nicht zur Laufzeit merkwürdige Fehler werfen kann, wäre ich damit zufrieden dort leere/ungültige Referenzen mit reinzuschreiben statt abzufangen das die leer sind.
P.P.S: Mir fällt grade noch auf, ich kann natürlich auch einen "Programmende" Button nach unten ins Objekt durchreichen und dynamisch registrieren. Den muss der Nutzer im Hauptprogram dann lediglich mit nach unten durchreichen (und darf den dann nichtmehr latchen lassen wenn ich mich recht erinnere). So richtig schön finde ich die Lösung aber ebenfalls nicht.
P.P.P.S: Falls relevant kann ich auch gerne ein Minimalbeispiel basteln was ich mir in etwa vorstelle, dann aber reduziert um die ganze LVOOP und multiplen Aufruf des asynchronen SubVIs.
LV Version ist 2019
Nachtrag:
Wenn ich das richtige Stichwort "user event" gehabt hätte, hätte ich vermutlich auch früher gefunden was die Lösung für mein Problem sein dürfte... Ich werde mich mal damit auseinandersetzen. Das sollte User Event sollte aber ja genau das machen was ich eigentlich will wenn ichs richtig überreisse.
Was mir nur noch an Fragezeichen dann üblich geblieben ist / sind, sind die P.S. und die Frage wie ich bei meinem dynamischen Event dann hinterher wieder rauskriege welches Control das getriggert hat (CtrlRef sollte da helfen) und was passiert wenn ich die CtrlRef für ein User Event abfrage...
Gruß Kiesch