23.05.2012, 11:29
(Dieser Beitrag wurde zuletzt bearbeitet: 23.05.2012 11:30 von Soean.)
Beitrag #1
|
Soean
LVF-Gelegenheitsschreiber
Beiträge: 140
Registriert seit: Sep 2010
2012
2009
EN
Deutschland
|
EventCase blockiert FP - aber welcher?
Hallo zusammen,
ich bin bestimmt nicht der Erste mit diesem Problem, aber die Suchfunktion bringt mich nicht weiter.
Ich habe ein _MAIN-vi mit einer Main-Loop und 5 dazu parallelen Schleifen (DIO-Signalerfassung/Erzeugung, RS232-Kommunikationen...). In meiner Main-Loop gibt es eine State-Machine, in einem Case dieser State-Machine eine Event-Structure mit derzeit 25 Cases.
Einer dieser Cases wird von 2 bool'schen Schaltern, welche in einer der parallelen Schleifen über die Property Value(Signaling) gesetzt werden, ausgelöst. Das Funktioniert auch. Die Main-State-Machine springt, sobald einer dieser Schalter gesetzt wurde, in den nächsten Case, die State-Machine wird nicht mehr aufgerufen. Trotzdem bleibt von diesem Zeitpunkt an mein FP gesperrt.
Dies bedeutet doch, dass irgendwo noch ein Bedienelement, welches auf die Event-Structure registriert wurde, seinen Wert ändert und dementsprechend ein Event auslöst, welches nicht verarbeitet werden kann, weil die Event-Structure nicht mehr aufgerufen wird, oder?
Leider kann ich keinen Punkt im Programmablauf finden, bei dem noch ein Bedienelemt verändert wird, erst recht nicht über value(signl).
Kann es noch eine andere Ursache geben? Wie würdet ihr vorgehen, um den Fehler weiter einzugrenzen?
Highlight-Mode usw. fallen raus, da ich das Programm nur als Applikation auf dem Rechner testen kann, an dem die Peripherie angeschlossen ist, und auf welchem kein LabView installiert ist.
Vielen Dank für eure Hilfe!!
|
|
|
23.05.2012, 11:47
(Dieser Beitrag wurde zuletzt bearbeitet: 23.05.2012 11:49 von GerdW.)
Beitrag #2
|
GerdW
______________
Beiträge: 17.465
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: EventCase blockiert FP - aber welcher?
Hallo Soean,
Zitat:in einem Case dieser State-Machine eine Event-Structure mit derzeit 25 Cases.
Zwei Punkte:
- Wenn das FP nicht auf Eingaben reagiert, ist ein Event noch nicht abgearbeitet. Dies ist nämlich die Standardeinstellung bei der Eventstruktur.
- Es ist m.M.n. äußerst schlechtes Design, die Eventstruktur in einem Case einer Statemachine zu verstecken... Wenn man Events für sich reklamiert, sollte man sie auch (jederzeit) abarbeiten können!
|
|
|
23.05.2012, 12:24
Beitrag #3
|
|
|
23.05.2012, 12:35
(Dieser Beitrag wurde zuletzt bearbeitet: 23.05.2012 12:36 von Lucki.)
Beitrag #4
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: EventCase blockiert FP - aber welcher?
Es gibt diese zwei Möglichkeiten:
Entweder eine parallele Schleife nur zur Ereignisbehandlung - dann kann/soll Timout unendlich sein (-1).
Oder Ereignsistruktur in der Hauptschleife. Dann kein Timeout von unendlich, sonst blockiert die Struktur!
|
|
|
23.05.2012, 13:22
Beitrag #5
|
Soean
LVF-Gelegenheitsschreiber
Beiträge: 140
Registriert seit: Sep 2010
2012
2009
EN
Deutschland
|
RE: EventCase blockiert FP - aber welcher?
Ich habe den Timeout auf 100 ms gesetzt - das FP bleibt blockiert.
|
|
|
23.05.2012, 13:37
Beitrag #6
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: EventCase blockiert FP - aber welcher?
Es ist doch leicht feszustellen, wo es hängt. In den Ereigniscases sollte es nichts geben, was wartet. Bei Dir sieht man so komische Sachen wie das Ikon mit der Uhr, oder den Text "Auf Heizpatrone warten". Vielleicht hat sie sich verlaufen und kommt überhaupt nicht...
|
|
|
23.05.2012, 13:48
Beitrag #7
|
|
|
23.05.2012, 13:52
Beitrag #8
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
RE: EventCase blockiert FP - aber welcher?
Wie GerdW schon gesagt hat, eindeutig schlechter Programmierstil. Eine Eventstruktur in einen Case einer State-Machine zu stecken, der dann nicht regelmäßig aufgerufen wird, da muss so was passieren.
Also: Eventstruktur in eine eigene "GUI-Loop" stecken, und dann die State-Machine per Queue oder Notifier steuern!
Gruß, Jen
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
23.05.2012, 14:02
Beitrag #9
|
Soean
LVF-Gelegenheitsschreiber
Beiträge: 140
Registriert seit: Sep 2010
2012
2009
EN
Deutschland
|
RE: EventCase blockiert FP - aber welcher?
Hmm...diesen "schlechten Programmierstil" habe ich auch in früheren Programmen angewandt - hat einwandfrei funktioniert.
Aber ok. Die Event-Structure in eine eigene Loop. Da stoße ich als Autodidakt jedoch gerade an meine Grenzen. Wie arbeite ich am Besten in verschiedenen Schleifen mit ein und der selben Klasse? Aber das ist vllt auch "Off-Topic"...
Danke für eure Hilfe!
|
|
|
23.05.2012, 14:11
(Dieser Beitrag wurde zuletzt bearbeitet: 23.05.2012 14:21 von jg.)
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
RE: EventCase blockiert FP - aber welcher?
Alternativ musst du halt dafür sorgen, dass der "Idle"-Case immer wieder aufgerufen wird, so dass auch wirklich Events abgearbeitet werden!
Andere Idee, wie sieht es mit dem Schaltverhalten deiner "Booleans" aus. Nicht dass die 2 Events pro "Value-Signaling" auslösen.
Ich kann mich da an einen Fehler bei Farbfeldern erinnern, die lös(t)en pro Benutzeränderung 2x das Event Value-Change aus.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
| |