LabVIEWForum.de - Laufzeitprobleme; Auswertung

LabVIEWForum.de

Normale Version: Laufzeitprobleme; Auswertung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,


in dem Programm für ein projekt habe ich im Prüfablauf gewisse Laufzeitprobleme:


Das Programm reagiert nur etwa nach einer Verzögerung von ca. 3-4 s auf den Druck des Stop Buttons, alle anderen Abbruchbedingungen beenden sofort die Schleife. Sieht jemand Auffälligkeiten in der Schleife?


Irgendwie werden die DO`s und AO`s nicht wirklich zurückgesetzt wenn ich den Stop Button drücke, seltsamerweise ist dies bei den anderen Bedingungen der Fall. ich habe mal ein Bild von der Hardware task und vom Prüfablauf beigefügt.



Im Rahmen des Projekts soll ich noch eine kleine Auswertung der Daten vornehmen, ich nehme eine Strom- und Spannungskennlinie auf und soll dortdraus die typische charakteristischen Zeitpunkte während einer prüfung bestimmen. Wie geht man in so einem Fall genau vor? Zunächst müssen die beiden Zeitpunkte (Bild Trigger) gefunden werden.





Vielen Dank.
Hallo Lifter,

Zitat:Das Programm reagiert nur etwa nach einer Verzögerung von ca. 3-4 s auf den Druck des Stop Buttons, alle anderen Abbruchbedingungen beenden sofort die Schleife. Sieht jemand Auffälligkeiten in der Schleife?
- TimeOuts durch Queue-Abfrage?
- subVIs, deren Laufzeit wir nicht abschätzen können?

Zitat:Irgendwie werden die DO`s und AO`s nicht wirklich zurückgesetzt wenn ich den Stop Button drücke, seltsamerweise ist dies bei den anderen Bedingungen der Fall. ich habe mal ein Bild von der Hardware task und vom Prüfablauf beigefügt.
THINK DATAFLOW! Lokale Variablen entsprechen nicht dem DATAFLOW-Prinzip!
RACE CONDITION! Unbestimmte Zugriffszeiten auf lokale Variablen...
Du setzt zwar neue Werte in den lokalen Variablen, wenn "STOPP" gedrückt wurde - aber gleichzeitig (wahrscheinlich schon eher) wird die Ausgabeschleife beendet...

Du hast sicher schon mal die Stichworte "Producer-Consumer-Schema" und "Statemachine" gehört! Eine saubere Programmarchitektur vereinfacht ordnungsgemäße Programmabläufe ungemein...

(Apostrophitis ist eine weit verbreitete Krankheit Big Grin)

Zitat:Im Rahmen des Projekts soll ich noch eine kleine Auswertung der Daten vornehmen, ich nehme eine Strom- und Spannungskennlinie auf und soll dortdraus die typische charakteristischen Zeitpunkte während einer prüfung bestimmen. Wie geht man in so einem Fall genau vor? Zunächst müssen die beiden Zeitpunkte (Bild Trigger) gefunden werden.
Erstmal: IndexArray neötigt nicht zwingend Werte an den Index-Eingängen...
Dann: Warum muss man die Komponenten eines Waveforms auslesen, um damit eine neue Waveform zu bauen? Warum nicht einfach die Originalwaveform weiterverwenden?
Ich verstehe nicht, warum du erst Cursor benutzt, um Punkte im Plot auszuwählen, um dann noch einmal eine Triggerfunktion hinterher drauf anzusetzen. Wie sieht dein Signal aus und was willst du daraus extrahieren?
hallo,


die Laufzeitprobleme habe ich mit ein paar timing bausteinen gelöst bekommen.


Also wenn ich die Hardware Schleife weiter laufen lasse sollte das Problem gelöst sein? Ich werde dies gleich mal überprüfen.



Ich habe mal ein typisches Signal beigefügt. Hier sollen die beiden Zeitpunkte gefunden werden (T1 und T2 ergeben die Schmelzzeit), und dann die Stromkurve über diese Fläche integriert werden.


Hierbei muss beim Zeitpunkt T2 auf den steilen Anstieg getriggert werden, der liegt nämlich immer vor. Hat jemand einen Vorschlag wie man sowas in LV umsetzt?
Hallo Lifter,

Zitat:Hierbei muss beim Zeitpunkt T2 auf den steilen Anstieg getriggert werden, der liegt nämlich immer vor. Hat jemand einen Vorschlag wie man sowas in LV umsetzt?
Der Anstieg wird normalerweise über die Differentiation bestimmt. Bei zeitkonstanten Samples reicht hier auch die Differenz jeweils zweier aufeinanderfolgender Samples...

Zitat:dann die Stromkurve über diese Fläche integriert werden
Sowas nennt sich integrieren in der Mathematik. Bei zeitkonstanten Samples vereinfacht sich das zu "Summe(x*dt)"...

Bei den gezeigten Kurven könnte man aber auch die Stromwerte nutzen und diese einfach mit einem Schwellwert vergleichen: die Stromwerte sind ja nahezu "an" oder "aus"...
ja, soweit klappt das ja auch alles ganz gut, habe nur grad bei der inbetriebnahme ein paar probleme:


ich differenziere den verlauf, passt auch soweit alles und möchte dann meine beiden zeitpunkte herausfinden. Leider erkennt das Programm auch immer zu Beginn einen Peak. Ich habe in der Funktion einen Schwellwert von 300 .. 2000 hinterlegt, leider ist der Peak zu Beginn größer als der Peak den der Beginn der Schmelzzeit macht. Die richtigen Zeitpunkte liegen bei ca. 0,8 und ca. 1,25. In dem Bild ableitung sieht man zu beginn aber auch einen peak, zwar negativ, aber das express VI kennt diesen trotzdem.



Hat jemand einen Vorschlag? Innerhalb der ersten 0,5 s passiert sowieso nichts großartiges, die Messung startet aber es wird noch nichts geschaltet. Kann man diesen Zeitpunkt irgendwie umgehen?



Das nächste Problem: Ich möchte dann über diese beiden Zeitpunkte integrieren. Leider steigt das Integral in der AUswertung immer weiter an. Dabei habe ich die Startzeit und die Dauer klar vorgegeben.


Sieht jemand einen Fehler?


Vielen dank.
Hallo Lifter,

mittlerweile solltest du doch wissen, dass man am besten ein VI mit hinterlegten Daten hier anhängt, wenn man konstruktive Hilfe erwartet...

Zitat:Leider erkennt das Programm auch immer zu Beginn einen Peak.
Wenn das immer so ist, dann kannst du den ersten Peak doch ignorieren... (Big Grin quick&dirty)

Zitat:Leider steigt das Integral in der AUswertung immer weiter an.
Du weißt doch am besten, was du in diesem ExpressVI eingestellt hast! (Es geht viel einfacher ohne ExpressVI, siehe Formel oben...)
Ja, ignorieren würde ich diesen Peak beim Einschalten ja sehr gern. Nur leider weiss ich nicht so wirklich wie. In der Spitzenwerterkennung kann ich dies zumindest nicht.


Eine Art Timer wäre sinnvoll, der dafür sorgt das das Ableiten erst nach sagen wir 250 ms startet, d.h. das der erste Peak der sich bisher bei allen Messungen in Bereichen unter 200 ms abgespielt hat somit gar nicht erst als peak wahrgenommen wird.


Leider weiss ich nicht so recht wie ich das im VI realisieren soll.


Anhängen hatte ich schonmal gemacht, aber LV 2013 VI`s können sie eh nicht öffnen, oder?


Was ist denn der Grund dafür das das mit dem Express VI integrieren nicht funktioniert? Die Zeitpunkte über die integriert werden soll stehen ja fest, sind also feste Zeitwerte. Ähnlich wie ein Timer läuft der Wert des Integrals in der Auswertung immer weiter hoch, das kann ich mir gerade nicht erklären.
(27.11.2013 21:12 )Lifter schrieb: [ -> ]Leider weiss ich nicht so recht wie ich das im VI realisieren soll.
Geht es um das Speichern mit Werten? Ein Control anlegen, darin die Werte schreiben, dann per "Rechtsklick -> Make Current Value Default" Werte quasi im VI speichern.

(27.11.2013 21:12 )Lifter schrieb: [ -> ]Anhängen hatte ich schonmal gemacht, aber LV 2013 VI`s können sie eh nicht öffnen, oder?
Wenn du eine breitere Basis erreichen willst, dann mach ein "Save for previous", bevor du dein VI hochlädst. Die Durchdringung mit LV2013 ist noch relativ gering.
Referenz-URLs