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 

UDP-Steuerung (Race Condition)



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!

01.09.2015, 12:27
Beitrag #1

nurso Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2010

20xx, 8.x
2010
DE_EN


Deutschland
UDP-Steuerung (Race Condition)
Hallo LabVIEW-Gemeinde!

Anbei eine Prinzipdarstellung meiner Programmstruktur (bitte nicht fragen, geht momentan nicht anders).

Problem: Weder über das Hauptprogramm, noch per SubVI kann ich die Anwendung sauber beenden. Es handelt sich im Grunde um das Problem, wie beende ich 2 Parallelschleifen. Da dies von beiden Stellen möglich sein soll, habe ich mit einer globalen Variable verbunden.

Ich vermute, dass ich an dieser Stelle voll in eine dieser berüchtigten Race Conditions reinlaufe.

Als einzige Lösung zur Problematik schlägt LabVIEW die Verwendung von Funktional Globalen Variablen vor.

Ist das so? Gibt es andere (einfache) Techniken?

Was läuft in meiner Programmstruktur schief?
Zur Erläuterung: Das Programm soll (sauber) schliessen, wenn die globale Variable 'R-Global' FALSE ist, oder wenn beim UDP ein Fehler auftritt (Fehler-Cluster).
'R-Stopp' ist nur eine lokale Hilfsvariable im Hauptprogramm.
Der gestrichelte Draht ist nur eine Idee zur Verschlimmbesserung und noch nicht implementiert.

Wie erreiche ich, dass die beiden Parallelschleifen (Hauptprogramm, SubVI) sauber beenden?


Danke und Gruss!


PS: Das SubVI/UDP-Listen.. soll gewährleisten, dass andere Programmierumgebungen (z.B. Visual Basic) auf die Funktionalität des Hauptprogramms zugreifen können (Remote-Betrieb als Event des Schalters 'Remote' implementiert).


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.09.2015, 13:13
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: UDP-Steuerung (Race Condition)
Hallo nurso,

Zitat:Das Programm soll (sauber) schliessen, wenn die globale Variable 'R-Global' FALSE ist, oder wenn beim UDP ein Fehler auftritt (Fehler-Cluster).

Du verknüpfst deine Bedingungen komisch:
- "R-Global" soll FALSE sein für einen Abbruch
- Der Fehlercluster soll TRUE sein für einen Abbruch
- beides wird OR-verknüpft und auf ein Stopp-Terminal geführt, welches bei TRUE die Schleife beendet (wenn ich dein Bild richtig deute)
Vielleicht solltest du entweder R-Global invertieren oder deine logische Verknüpfung anpassen!?

Wo wird "R-Global" initialisiert?
Wo wird "R-Global" gesetzt?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.09.2015, 14:01 (Dieser Beitrag wurde zuletzt bearbeitet: 01.09.2015 14:07 von nurso.)
Beitrag #3

nurso Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2010

20xx, 8.x
2010
DE_EN


Deutschland
RE: UDP-Steuerung (Race Condition)
(01.09.2015 13:13 )GerdW schrieb:  Du verknüpfst deine Bedingungen komisch:
- "R-Global" soll FALSE sein für einen Abbruch
- Der Fehlercluster soll TRUE sein für einen Abbruch
- beides wird OR-verknüpft und auf ein Stopp-Terminal geführt, welches bei TRUE die Schleife beendet (wenn ich dein Bild richtig deute)
Vielleicht solltest du entweder R-Global invertieren oder deine logische Verknüpfung anpassen!?

Wo wird "R-Global" initialisiert?
Wo wird "R-Global" gesetzt?


>>>
Es ist nur eine Prinzipdarstellung, was nicht besonders praktisch ist. Ich sehe es ein.
Muss dringend eine Internetverbindung einrichten :/
<<<


R-Global ist selbstverständlich invertiert, bevor der Wert in die ODER-Verknüpfung geht.

R-Global wird mit FALSE zu Beginn der Hauptanwendung initialisiert.
Schaltverhalten ist 'Beim Drücken schalten' (oben links in der Auswahlmatrix).

R-Global ist im Hauptprogramm direkt mit dem Schalter auf dem Frontpanel verbunden, wird dort gesetzt. Daher auch die While-Schleife im Event [Remote], um den Zustand zu checken.

R-Global wird im SubVI per UDP-Befehl String:"Stopp" gesetzt. Die While-Schleife des SubVI rauscht ohne zusätzliches Timing durch.


Die Vermutung mit der verletzten Race Condition habe ich, da bei aktiver Highlight-Funktion der Abbruch funktioniert.

Vom Gedanken her wollte ich eigentlich erreichen, dass immer erst die While-Schleife im SubVI beendet wird und dann der Event-Case verlassen.

1. Fall: UDP fordert stoppen -> SubVI endet, über lokale Variable R-Stopp wird Event-Case verlassen

2. Fall: Remote-Schalter wird FALSE -> SubVI endet, über lokale Variable R-Stopp wird Event-Case verlassen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.09.2015, 14:08 (Dieser Beitrag wurde zuletzt bearbeitet: 01.09.2015 14:09 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: UDP-Steuerung (Race Condition)
Hallo nurso,

Zitat:Es ist nur eine Prinzipdarstellung, was nicht besonders praktisch ist. Ich sehe es ein.
Oder du solltest gleich besser erläutern.
Inzwischen wird das Bild klarer…

Zitat:R-Global ist im Hauptprogramm direkt mit dem Schalter auf dem Frontpanel verbunden, wird dort gesetzt.
R-Global wird im SubVI per UDP-Befehl String:"Stopp" gesetzt.
Klassische Race-Condition: zwei Instanzen versuchen, eine Variable unabhängig voneinander zu setzen. Schlecht. Ganz schlecht!

Zitat:Die While-Schleife des SubVI rauscht ohne zusätzliches Timing durch.
Ganz ganz schlecht. Da wird die globale Variable andauernd (im ns-Takt) geschrieben - und du wunderst dich über Probleme…

Zitat:Daher auch die While-Schleife im Event [Remote], um den Zustand zu checken.
Ach, das sollte eine Event-Struktur sein? Das solltest du aber dazu sagen…

Wieso sind da lang laufende Schleifen in einer Event-Struktur? Sowas gehört sich nicht!
Auf was hört das Event? Sind nachfolgende UI-Events durch den Event-Case blockiert?

Zitat:Muss dringend eine Internetverbindung einrichten
Ja, dann könnte man sich einiges an diesem Frage-Antwort-Spiel ersparen…
(Manche fügen ja wenigstens "echte" Bildschirmfotos hier an. Big Grin)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.09.2015, 14:17 (Dieser Beitrag wurde zuletzt bearbeitet: 01.09.2015 14:40 von nurso.)
Beitrag #5

nurso Offline
LVF-Grünschnabel
*


Beiträge: 19
Registriert seit: Dec 2010

20xx, 8.x
2010
DE_EN


Deutschland
RE: UDP-Steuerung (Race Condition)
Oje.. jetzt bemerke ich eine Schwierigkeit, die dann am Ende doch nichts mit Race Condition zu tun hat?!?!??

Im SubVI wird nicht-signalisierend gesetzt bzw. die globale Variable 'R-Global' ist keinem Event-Case zugeordnet.

Beende ich im Hauptprogramm per Schalter, dann rufe ich ja schon wieder erneut den Event-Case [Remote] auf, den ich eigentlich verlassen will Sad


Das muss irgendwie anders....
Sollte Schluss machen für heute.
PS: Höchstwahrscheinlich hast Du mit den "ganz ganz schlecht" Einwänden recht, dennoch geht es im 1. Ansatz darum, richtig auf die Beenden-Aktion zu reagieren. Und zwar entweder per Knöpfen im Hauptprogramm oder per Stopp via UDP. Dass dies gleichzeitig geschieht kann ich für den Moment ganz klar ausschliessen.
PPS: Die globale Variable 'R-Globale' wird nur dann im SubVI gesetzt, wenn der Befehl-String Stopp durchs UDP rauscht (nicht zu sehen; Prinzipdarstellung^^)
PPPS: Das komplette Hauptprogramm ist im Event 'Remote' blockiert. Das soll auch so sein, denn der Remote-Betrieb ist an eine andere Anwendung abgegeben worden (SubVI/UDP als einzige Schnittstelle). Nur noch der 'Remote-Button' auf dem Frontpanel ist freigegeben und wird alle 40ms abgerufen.
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
Question Schalter deaktivieren führt zu race condition, wie umgeht man das? TpunktN 4 2.788 12.05.2021 09:18
Letzter Beitrag: TpunktN
  Race Condition Eisbär 8 5.081 02.01.2016 20:22
Letzter Beitrag: Lucki
  Race Conditions eg 36 24.808 26.08.2010 09:58
Letzter Beitrag: Lucki
  "Race-Conditions"?! vermeiden/beheben TSC 12 9.388 24.04.2009 14:48
Letzter Beitrag: TSC

Gehe zu: