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 

Schalter deaktivieren führt zu race condition, wie umgeht man das?



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!

11.05.2021, 07:19
Beitrag #1

TpunktN Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 196
Registriert seit: Jul 2011

2021
2011
EN

70***
Deutschland
Question Schalter deaktivieren führt zu race condition, wie umgeht man das?
Guten Morgen zusammen.
Wahrscheinlich total banal, aber ich komme nicht drauf:
Ich muss einen zweiten Motor zuschalten zu einer Anlage, der ist aber an die Bedingung geknüpft, dass zwei Referenzmessstrecken (Turbinenradzähler) geöffnet sind. Jetzt baue ich mir eine race condition wenn ich den Schalter wieder deaktiviere, wenn die Bedingung nicht erfüllt ist. Die Bedingung wird in einer state machine erst generiert, dort würe ich es deaktivieren, wenn es nicht erlaubt ist. Aktuell ist es noch so:
   
Wo ich mir eine race condition einfange und es sein kann, das ich den Schalter drücke und er wieder rausspringt.

Wie macht man sowas richtig? Eventcase?

MfG 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
11.05.2021, 07:48 (Dieser Beitrag wurde zuletzt bearbeitet: 11.05.2021 07:54 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Schalter deaktivieren führt zu race condition, wie umgeht man das?
Hallo Timo,

Zitat:Wo ich mir eine race condition einfange und es sein kann, das ich den Schalter drücke und er wieder rausspringt.
Deine Beschreibung kann man nur anhand eines Bildes eines Teils deines Codes nur schlecht nachvollziehen, insbesondere das "Drücken" und "Rausspringen"…

Zum Bild:
- Warum so viele lokale Variablen? (Gerade beim Thema Race-Conditions!?)
- Du vergleichst diesen "Zähler 1" einmal "<>3" und einmal "==3"!? Warum nicht nur ein Vergleich? Warum eine Case-Struktur daran knüpfen und parallel ein Select? Warum nicht beide Auswertungen dieser einen Bedingung in nur einer Case-Struktur? Warum nicht eine gemeinsame Propertynode, in der sowohl der "value" als auch das "Disabled" gesetzt werden? Bei mir sieht so ein Konstrukt in etwa so aus (wenn es denn unbedingt sein muss):
   
(Da man recht oft Controls en-/disablen muss, habe ich dafür ein kleines subVI in meiner user.lib, um das passende Enum zu generieren.)

- Race-Condition: du schreibst in eine lokale Variable von "Motor2" innerhalb der Case-Struktur, liest aber parallel dazu aus dem Terminal von Motor2!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.05.2021, 09:48
Beitrag #3

TpunktN Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 196
Registriert seit: Jul 2011

2021
2011
EN

70***
Deutschland
RE: Schalter deaktivieren führt zu race condition, wie umgeht man das?
Hallo Gerd,

danke für die Kritik.
(11.05.2021 07:48 )GerdW schrieb:  
Zitat:Wo ich mir eine race condition einfange und es sein kann, das ich den Schalter drücke und er wieder rausspringt.
Deine Beschreibung kann man nur anhand eines Bildes eines Teils deines Codes nur schlecht nachvollziehen, insbesondere das "Drücken" und "Rausspringen"…
Mir ging es nur eher generell, ich bin sicher nicht der Einzige der solche Fälle hat und überlege mir jedesmal neu um dann festzustellen, so kann das nicht richtig sein. Ich habe es hier jetzt gelöst, in dem ich es in das erste Case nach dem Umschalten gepackt habe, welches die Auswahl des Zählers bestätigt und entsprechend schaltet.

Dennoch hier: Der zweite Motor ist eine Option und kann zusätzlich eingeschalten werden (falsch formuliert in meinem ersten Beitrag). Mit "rausspringen" ist die race condition gemeint, beim Schalten des Schalters ist der state schon abgefragt und wird dann zurückgesetzt, obwohl die Bedingung erfüllt ist. Dies wollte ich mit der Case abfangen, indem ich nur bei aktivem Schalter diesen evtl. zurücksetze (FALSE-Case ist leer).

Zitat:Zum Bild:
- Warum so viele lokale Variablen? (Gerade beim Thema Race-Conditions!?)
Altes Programm, das von mir übernommen wurde, über 5 Bildschirme voller Code Undecided Und der wurde schon von mir zusammengestutzt ... Ich arbeite viel mit lokalen Variablen (ich weiß, ist schlecht), weil das in den alten Programmen so gemacht wurde und ich das damit so gelernt habe. Neue Programme von mir haben fast gar keine mehr oder zumindest keine Race Conditions.

Zitat:- Du vergleichst diesen "Zähler 1" einmal "<>3" und einmal "==3"!? Warum nicht nur ein Vergleich? Warum eine Case-Struktur daran knüpfen und parallel ein Select? Warum nicht beide Auswertungen dieser einen Bedingung in nur einer Case-Struktur?
Durch das ganze rumprobieren ist das entstanden, haste recht, habe ich behoben. (Bei FALSE soll der Schalter nicht geändert werden, der Case ist leer)

Zitat:Warum nicht eine gemeinsame Propertynode, in der sowohl der "value" als auch das "Disabled" gesetzt werden?
Auf jedenfall mal ein guter Tipp, es sind die kleinen Dinge, die einen Code besser machen.

Zitat:- Race-Condition: du schreibst in eine lokale Variable von "Motor2" innerhalb der Case-Struktur, liest aber parallel dazu aus dem Terminal von Motor2!
Ja, das will ich doch gerade richtig machen und bin deswegen hier. Um das ganze mal runter zu brechen, mein Testversuch war so:
   
Der 2te Case ist leer. Wie würde man das richtig machen? Mit oder ohne Bedienelement (de-)aktivieren.


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
11.05.2021, 10:17
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Schalter deaktivieren führt zu race condition, wie umgeht man das?
Hallo Timo,

Zitat:Mit "rausspringen" ist die race condition gemeint, beim Schalten des Schalters ist der state schon abgefragt und wird dann zurückgesetzt, obwohl die Bedingung erfüllt ist. Dies wollte ich mit der Case abfangen, indem ich nur bei aktivem Schalter diesen evtl. zurücksetze (FALSE-Case ist leer).
Wieso kann man diesen Schalter überhaupt betätigen, wenn die Bedingungen dafür noch nicht gegeben sind?
Anders ausgedrückt: warum prüfst du diese Bedingen erst so spät, nachdem der User schon den Motor aktivieren konnte/wollte?

Zitat:Der 2te Case ist leer. Wie würde man das richtig machen? Mit oder ohne Bedienelement (de-)aktivieren.
Erstmal eine kleine Wartezeit in die Schleife.
Und dann hilft es meistens auch, wenn man Propertynodes nur (erneut) setzt, wenn sich die Property wirklich geändert hat - also die Property "Disabled" nur dann beschreiben, wenn sich "möglich" ändert.
Und wenn alles nichts hilft, kann man mit einer Sequenz noch festlegen, wann die lokale Variable geschrieben wird und wann das Terminal gelesen wird…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.05.2021, 09:18
Beitrag #5

TpunktN Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 196
Registriert seit: Jul 2011

2021
2011
EN

70***
Deutschland
RE: Schalter deaktivieren führt zu race condition, wie umgeht man das?
(11.05.2021 10:17 )GerdW schrieb:  Erstmal eine kleine Wartezeit in die Schleife.
generell ja, hier lässt sich ohne Wartezeit die race condition aber sehr gut nachvollziehen Tongue
Zitat:Und dann hilft es meistens auch, wenn man Propertynodes nur (erneut) setzt, wenn sich die Property wirklich geändert hat - also die Property "Disabled" nur dann beschreiben, wenn sich "möglich" ändert.
Also so:
   
Ja, ich glaube das war der entscheidende Punkt der mir fehlte, vielen Dank für die Unterrichtsstunde Smile

"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
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Änderung von großen Cluster (Type Def.) führt zu out of Memory exeption spacz 8 5.565 28.10.2019 09:01
Letzter Beitrag: spacz
  Bildschirmschoner deaktivieren Snoop2000 10 10.653 18.06.2019 15:50
Letzter Beitrag: Ratio
Question (viele) Bedienelemente deaktivieren / aktivieren F.Bi 3 4.064 16.08.2018 12:59
Letzter Beitrag: GerdW
  Case-Struktur führt True und False aus (Ereignisschleife) HIMI 11 7.555 24.08.2017 13:04
Letzter Beitrag: HIMI
  Schalter an/aus Tobolf 1 3.381 27.01.2017 11:00
Letzter Beitrag: GerdW
  Laufzeitmenü deaktivieren P.Pfarherr 8 7.858 19.10.2016 14:09
Letzter Beitrag: C.Maier

Gehe zu: