INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Enum-Variable "zurücksetzen"



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!

04.01.2023, 15:33
Beitrag #1

Hans96 Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: May 2021

2019 SP1
-
DE



Enum-Variable "zurücksetzen"
Hallo zusammen,

ich bin mal wieder auf ein Problem bei meiner Programmierung gestoßen.
Ich bediene ein externes Gerät mit LabVIEW und schicke verschiedene Befehle. Die Befehle sind in einer Case-Struktur, welche über einen Enum-Selektor bedient wird.
Nun möchte ich aber dass nicht dauernd der Befehl gesendet wird sondern nach der Ausführung wieder der Standard-Case ausgewählt wird.
Meine ersten Gedanken waren eine Ereignisstruktur die auf Knopfdruck reagiert. Allerdings habe ich damit noch nicht so viel gearbeitet und wollte daher erst fragen ob das überhaupt möglich ist bevor ich darein Zeit investiere.
Mein zweiter Gedanke war die Enum-Variable irgendwie wieder auf den Standardwert zu setzen aber da weiß ich leider nicht wie. Evtl über eine globale Variable?

Ich freue mich über eure Antwort und evtl. auch andere Lösungsvorschläge.

PS: Screenshot kann ich gerade aufgrund PC-Wartung nicht machen aber ich hoffe es ist verständlich geworden.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
04.01.2023, 16:09
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Enum-Variable "zurücksetzen"
Hallo Hans,

Zitat:Ich bediene ein externes Gerät mit LabVIEW und schicke verschiedene Befehle. Die Befehle sind in einer Case-Struktur, welche über einen Enum-Selektor bedient wird.
Nun möchte ich aber dass nicht dauernd der Befehl gesendet wird sondern nach der Ausführung wieder der Standard-Case ausgewählt wird.
Meine ersten Gedanken waren eine Ereignisstruktur die auf Knopfdruck reagiert. Allerdings habe ich damit noch nicht so viel gearbeitet und wollte daher erst fragen ob das überhaupt möglich ist bevor ich darein Zeit investiere.
Mein zweiter Gedanke war die Enum-Variable irgendwie wieder auf den Standardwert zu setzen aber da weiß ich leider nicht wie. Evtl über eine globale Variable?

PS: Screenshot kann ich gerade aufgrund PC-Wartung nicht machen aber ich hoffe es ist verständlich geworden.
So richtig verständlich ist es nicht…

Du hast einen ENUM-Wert, der einen Case in einer Case-Struktur selektiert.
Warum musst du den Wert "zurücksetzen", wenn der Case abgearbeitet wurde???

Wie wird denn das ENUM an diese Case-Struktur übergeben? Du verwendest doch hoffentlich eine Producer-Consumer-Struktur mit einer Queue, sodass immer nur ein Befehl nach dem anderen abgearbeitet wird? Wie kann es da zu Wiederholungen kommen???

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.01.2023, 07:27
Beitrag #3

TpunktN Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 196
Registriert seit: Jul 2011

2021
2011
EN

70***
Deutschland
RE: Enum-Variable "zurücksetzen"

Akzeptierte Lösung

(04.01.2023 15:33 )Hans96 schrieb:  Meine ersten Gedanken waren eine Ereignisstruktur die auf Knopfdruck reagiert. Allerdings habe ich damit noch nicht so viel gearbeitet und wollte daher erst fragen ob das überhaupt möglich ist bevor ich darein Zeit investiere.

Hallo Hans,

soweit ich es verstanden habe ist die Ereignisstruktur keine schlechte Idee und wenn du noch nicht so viel Erfahrung hast ist das auf jedenfall keine Zeitverschwendung dir die mal genauer anzuschauen.

Leider kann hier niemand hellsehen und ohne VI sachlich richtig helfen.

Gut's neu's
Timo

"Auch aus Steinen, die einem in den Weg gelegt werden, kann man Schönes bauen."
Johann Wolfgang von Goethe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.01.2023, 08:57 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2023 09:46 von Hans96.)
Beitrag #4

Hans96 Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: May 2021

2019 SP1
-
DE



RE: Enum-Variable "zurücksetzen"
Erstmal danke für eure Antworten.
Ich hab das VI jetzt auf das Wesentliche heruntergebrochen und einen Screenshot angehängt.

Grundsätzlich läuft das Programm in einer While-Schleife in der eine große Case-Struktur ist, die über eine Enum-Konstante umgeschaltet wird.
In einer dieser Case-Strukturen ist ein Enum-Bedienelement über das ich die verschiedenen Befehle A,B,C und D schicken möchte je nach Auswahl des Bedienelementes.
Nun möchte ich aber dass nach jedem geschickten Befehl (A,B oder C) automatisch wieder der Case D ausgewählt wird, damit nicht bei jedem Schleifendurchlauf erneut der ausgewählte Befehl gesendet wird.

Ich hoffe jetzt ist es etwas verständlicher geworden.

EDIT: Mir ist bewusst, dass ich das auch über eine lokale Variable zurücksetzen kann aber das versuche ich zu vermeiden.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.01.2023, 09:49 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2023 09:55 von GerdW.)
Beitrag #5

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Enum-Variable "zurücksetzen"

Akzeptierte Lösung

Hallo Hans,

Zitat:In einer dieser Case-Strukturen ist ein Enum-Bedienelement über das ich die verschiedenen Befehle A,B,C und D schicken möchte je nach Auswahl des Bedienelementes.
Nun möchte ich aber dass nach jedem geschickten Befehl (A,B oder C) automatisch wieder der Case D ausgewählt wird, damit nicht bei jedem Schleifendurchlauf erneut der ausgewählte Befehl gesendet wird.

Ich hoffe jetzt ist es etwas verständlicher geworden.
Etwas…

Warum verwendest du kein Schieberegister für diesen Befehl, wenn du nach Abarbeiten eines Cases deiner Statemachine einen anderen Befehl im nächsten Durchlauf ausführen willst?

Und eine Frage ist immer noch offen: wie kommen die Befehle in die Statemachine hinein?
Wenn es sich um User-Input auf dem FP handelt:
- einen State einfügen, der sich um Userinput kümmert und dann den gewünschten Befehl ins Schieberegister einträgt
- gern eine Eventstruktur verwenden, um Userinput abzufragen…

Zitat:EDIT: Mir ist bewusst, dass ich das auch über eine lokale Variable zurücksetzen kann aber das versuche ich zu vermeiden.
Dein User wird sich freuen, wenn dein Programm seinen Input eventuell gleich wieder überschreibt.
Stichwort "race conditions"…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.01.2023, 12:35
Beitrag #6

TpunktN Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 196
Registriert seit: Jul 2011

2021
2011
EN

70***
Deutschland
RE: Enum-Variable "zurücksetzen"
So wirklich verstehe ich es nicht. Kannst du mal erklären was der Sin ndahinter ist und was du erreichen willst?

In Bildern geht sehr viel kontext verloren, vorallem wenn die noch gekürzt/vereinfacht werden.

Grüße Timo

"Auch aus Steinen, die einem in den Weg gelegt werden, kann man Schönes bauen."
Johann Wolfgang von Goethe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
05.01.2023, 14:08
Beitrag #7

Hans96 Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: May 2021

2019 SP1
-
DE



RE: Enum-Variable "zurücksetzen"
Der ganze Sinn dahinter ist, dass ich ein externes Gerät steuern möchte mit den Befehlen Start, Pause, Stopp und Auswahl.
Beim Befehl Start fährt das Gerät einen Zyklus über 32h ab.
Das funktionierte auch alles so wie es soll. Das Problem war nur, dass nach diesem Zyklus das Enum-Bedienelement immer noch auf Start stand und somit im Anschluss direkt ein weiterer Zyklus gestartet wird.
Daher die Frage mit dem "Zurücksetzen" des Bedienelementes auf Auswahl.
Das Bedienelement sollte aber jederzeit bedienbar bleiben.

Ich hoffe ich konnte das Anliegen etwas verdeutlichen. Ich würde gerne das VI hochladen aber aufgrund von Firmeninterna ist dies nicht gestattet.

Ich hab das Ganze nun mit einer Ereignisstruktur gelöst die bei Wertänderung aktiviert wird und dann in den jeweiligen Case springt. Das ganze ist mit einem Timeout versehen, sodass 2s nach Aktivierung der Ereignisstruktur diese wieder in den Case Auswahl springt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.01.2023, 15:54
Beitrag #8

TpunktN Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 196
Registriert seit: Jul 2011

2021
2011
EN

70***
Deutschland
RE: Enum-Variable "zurücksetzen"

Akzeptierte Lösung

Somit ist also dein Enum gleichzeitig dein Trigger zum Starten, klingt jetzt sehr gewöhnungsbedürftig als Eingabe, hat sicher seinen Grund Wink

(05.01.2023 14:08 )Hans96 schrieb:  Ich hab das Ganze nun mit einer Ereignisstruktur gelöst die bei Wertänderung aktiviert wird und dann in den jeweiligen Case springt. Das ganze ist mit einem Timeout versehen, sodass 2s nach Aktivierung der Ereignisstruktur diese wieder in den Case Auswahl springt.
Da verstehe ich jetzt nicht was du meinst.

Um sicher zu gehen, schau dir mal im Exampelfinder ('Help' -> 'Find Examples...') unter 'Fundamentals' -> 'Loops and Structures' das Beispiel 'State Machine Fundamentals.vi' an. Das sollte so in etwa dem entsprechen was du machst (hier sind 2 Knöpfe anstatt einem Enum verwendet, welche den Vorteil der Latch-Funktion haben).

Grüße Timo

"Auch aus Steinen, die einem in den Weg gelegt werden, kann man Schönes bauen."
Johann Wolfgang von Goethe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.01.2023, 07:48
Beitrag #9

Hans96 Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: May 2021

2019 SP1
-
DE



RE: Enum-Variable "zurücksetzen"
(05.01.2023 15:54 )TpunktN schrieb:  Somit ist also dein Enum gleichzeitig dein Trigger zum Starten, klingt jetzt sehr gewöhnungsbedürftig als Eingabe, hat sicher seinen Grund Wink

Genau dient nur der schnellen Programmauswahl die eigentliche Steuerung funktioniert ganz normal über Schalter.

(05.01.2023 14:08 )Hans96 schrieb:  Ich hab das Ganze nun mit einer Ereignisstruktur gelöst die bei Wertänderung aktiviert wird und dann in den jeweiligen Case springt. Das ganze ist mit einem Timeout versehen, sodass 2s nach Aktivierung der Ereignisstruktur diese wieder in den Case Auswahl springt.
Da verstehe ich jetzt nicht was du meinst.

Die Ereignisstruktur springt bei Nichtaktivierung nach einer voreingestellten Zeit wieder in den Standard-Case Timeout und somit meinen Befehl Auswahl der dort definiert ist.

Um sicher zu gehen, schau dir mal im Exampelfinder ('Help' -> 'Find Examples...') unter 'Fundamentals' -> 'Loops and Structures' das Beispiel 'State Machine Fundamentals.vi' an. Das sollte so in etwa dem entsprechen was du machst (hier sind 2 Knöpfe anstatt einem Enum verwendet, welche den Vorteil der Latch-Funktion haben).

Grüße Timo

Das ist genau das was ich gesucht habe und es ist auch noch so simpel. Da muss ich nur einen Case ergänzen dann habe ich es.
Vielen Dank!!!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Type Def Enum unterscheiden? Achim 5 3.067 30.07.2020 08:19
Letzter Beitrag: Freddy
  Enum gesteuertes Event ares2013 3 3.431 29.11.2019 19:03
Letzter Beitrag: Lucki
  String nach Enum konvertieren NoWay 2 4.062 20.08.2019 10:58
Letzter Beitrag: NoWay
  XY Graph zurücksetzen bzw. leeren Ralfk84 2 3.387 06.10.2017 06:09
Letzter Beitrag: Ralfk84
  Enum Baumstruktur Hydrogencarbonat 8 6.060 24.02.2017 00:01
Letzter Beitrag: Hydrogencarbonat
  automatischer Enum durchlauf floH857 4 4.162 21.02.2017 08:57
Letzter Beitrag: Freddy

Gehe zu: