Hallo zusammen,
ich brauch mal wieder Eure Unterstützung.
folgendes:
ich habe mal wieder eine Prüfstandssoftware gestrikt.
Hier werden einige Messwerte überwacht und bei z.B. Überschreitung eines Wertes ein Benutzerereignis ausgelöst, das wiederum z.B. den Antrieb abschaltet. Das funktioniert alles wunderbar, allerdings habe ich das Problem, dass das jeweilige Ereignis geschätzte 100mal ausgelöst wird weil es einfach einige Zeit dauert um auf die Wertüberschreitung zu reagieren und bis die automatischen Gegenmaßnahmen greifen.
Meine Idee war eigentlich bei der Auslösung des Ereignisses, die nicht abgearbeiteten Ereignisse zu dursuchen und das entsprechende Ereignis nur auszulösen, wenn es nicht bereits in der Warteschleife steckt. Allerdings habe ich bis jetzt nicht gefunden wie ich an die Liste der ausstehenden Ereignisse rann komme. Oder gibt es eine andere Lösung wie ich ein Benutzerereigniss nur ein mal in die Erreignisliste eintragen kann?
Vielen Dank schon mal
Gruß Mario
Lad' mal Dein VI hoch. Da stimmt doch bestimmt schon was an der Programmstruktur nicht.
Gruß Markus
Hy,
das mit dem Hochladen wird schwierig, es handelt sich hier um ein recht großes Projekt.
Vieleicht zur Beschreibung, ich überwache in einer Parallelschleife die Messwerte und reagiere hier auch gleich mit einem Abschaltbefehl an eine weitere Parallelschleife die wiederum die Kommunikation mit dem Antrieb übernimmt und dem auslösen eines Benutzerereignisses. in einer Weiteren Parallelschleife wird dann das Benutzerereignis genutzt um dem Benutzer eine Meldung auf den Bildschirm zu geben.
Da die Überwachungsschleife recht schnell läuft sieht sie auch bei den Folgedurchläufen nach der ersten Überschreitung noch überhöhte Werte und setzt logischwerweise die Meldung erneut ab. Das geht dann so oft bis der Wert endlich den kritischen Wert unterschritten hat. Ich hätte die Meldung auf dem Bildschirm allerdings gerne nur ein mal.
Gruß Mario
Hallo Mario,
Zitat:auch bei den Folgedurchläufen nach der ersten Überschreitung noch überhöhte Werte und setzt logischwerweise die Meldung erneut ab
Wie wäre es mit einer einfachen Erkennung einer steigenden Flanke eines boolschen Signals? Man muss ja eine solche Meldung nicht in jeder Iteration erneut absetzen...
So z.B.:
[
attachment=47018]
Wie schrieb schon Markus: "Da stimmt doch bestimmt schon was an der Programmstruktur nicht."
Vielleicht hilft es, wenn Du überprüfst ob der Wert kleiner wird. Wenn er überschritten wurde und eine Meldung kommt und er danach aber kleiner wird (und in einer bestimmten Zeit) und sein Nomalwert erreicht, dann muss ja auch keine Meldung mehr kommen. Erst wenn er nach der Abnahme wieder ansteigt, bzw. die Grenze wieder übersteigt muss die Meldung kommen.
Gruß Markus
Hy,
das mit der Steigenden Flanke find ich gut Oh man hätte ich selbst drauf kommen können.
Probier ich gleich mal aus Vielen dank...
Gruß Mario
Wie wäre es, wenn du für jeden "Kanal" den du überwachst, noch parallel ein Flag setzt, sobald du eine Meldung abgesetzt hast...und dann nur noch die Kanäle für neue Meldungen überwachst, bei denen das Flag "false" ist?
Das würde ich jedenfalls machen...weil die Flankenauswertung schwierig werden könnte...
A.
(30.10.2013 08:04 )Mrindfleisch schrieb: [ -> ]Meine Idee war eigentlich bei der Auslösung des Ereignisses, die nicht abgearbeiteten Ereignisse zu dursuchen und das entsprechende Ereignis nur auszulösen, wenn es nicht bereits in der Warteschleife steckt.
Nur kleiner Hinweis am Rande: Das Problem scheint gelöst - ab LV2013
Zitat:
Betrachten des Queue-Inhalts während der VI-Ausführung
In LabVIEW 2013 können Sie sich die Ereignisse in der Queue einer Ereignisstruktur ansehen. Außerdem werden alle VIs angezeigt, die Ereignisstrukturen mit registrierten Ereignissen enthalten, und Sie können die von der Ereignisstruktur verarbeiteten Ereignisse protokollieren. Klicken Sie die Ereignisstruktur mit der rechten Maustaste an und wählen Sie die Option Ereignisprüfungsfenster aus, um zu den Ereignisinformationen zu gelangen.
Ja, das geht (vgl. Screenshot), aber soweit ich weiß kann man die Ereignisse nicht programmatisch über irgendeinen "Node",... auslesen. Das wäre nicht schlecht.
[
attachment=47034]
Gruß Markus
(30.10.2013 11:52 )Lucki schrieb: [ -> ] (30.10.2013 08:04 )Mrindfleisch schrieb: [ -> ]Meine Idee war eigentlich bei der Auslösung des Ereignisses, die nicht abgearbeiteten Ereignisse zu dursuchen und das entsprechende Ereignis nur auszulösen, wenn es nicht bereits in der Warteschleife steckt.
Nur kleiner Hinweis am Rande: Das Problem scheint gelöst - ab LV2013
Zitat:
Betrachten des Queue-Inhalts während der VI-Ausführung
In LabVIEW 2013 können Sie sich die Ereignisse in der Queue einer Ereignisstruktur ansehen. Außerdem werden alle VIs angezeigt, die Ereignisstrukturen mit registrierten Ereignissen enthalten, und Sie können die von der Ereignisstruktur verarbeiteten Ereignisse protokollieren. Klicken Sie die Ereignisstruktur mit der rechten Maustaste an und wählen Sie die Option Ereignisprüfungsfenster aus, um zu den Ereignisinformationen zu gelangen.