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 

Messintervall mit Eventstruktur



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!

27.08.2012, 08:04
Beitrag #1

gm-axion Offline
LVF-Grünschnabel
*


Beiträge: 45
Registriert seit: Aug 2010

2010
2010
DE


Deutschland
Messintervall mit Eventstruktur
Guten Morgen,

zur Zeit bearbeite ich die Messwerterfassung eines alkalischen Elektrolyseurs über SOAP und OPC. Die Daten sollen, versehen mit einem SubVI zur Zeitstempelerzeugung, jede Sekunde in ein TDMS-File geschrieben werden. Um die Daten mit konstanten Zeitabständen abzuspeichern erfasse ich am Anfang den Timer, lasse die Daten schreiben, leere die TDMS und bilde dann die Differenz zwischen dem aktuellen und dem Anfangstimer und diese Differenz wird dann von den 1000ms abgezogen. Somit wollte ich eigentlich sicherstellen, dass wenn der Code bspw. 200ms zur Abarbeitung benötigt, die Eventstruktur nur noch 800ms wartet. Die Eventstruktur deswegen, weil das Programm auf ein "Messung beenden" auf dem Frontpanel unmittelbar reagieren soll.

Das funktioniert soweit sehr gut, allerdings passiert es manchmal, dass derzweite Timer irgendwie sehr groß ist und nach meiner Differenzbildung schließlich ein negativer Timeout an der Eventstruktur anliegt. Dann war´s das natürlich mit meiner Messung.
Offensichtlich habe ich da ein grundsätzliches Verständnisproblem?

Ich hoffe, jemand von euch kann mir da weiterhelfen. Diese Intervallprogrammierung habe ich eigentlich bisher immer benutzt, nur ist mit meistens nichts aufgefallen, bis schließlich ein Student unseres Labors bei einem Versuch mit meinem Programm mich daauf hinwies, dass die Messung aufgrund des negativen Timeouts abbricht.

Anbei habe ich mal den Screenshot angefügt.

Danke schon einmal,
Jonas


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
27.08.2012, 08:13 (Dieser Beitrag wurde zuletzt bearbeitet: 27.08.2012 08:18 von Clyde.)
Beitrag #2

Clyde Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 71
Registriert seit: May 2012

2012
2009
EN


Sonstige
RE: Messintervall mit Eventstruktur
Guten Morgen Jonas,

ist dir das "Wait until Next ms Multiple"-VI ein Begriff? Das macht eigentlich genau das, was du möchtest. Das könntest du zum Beispiel innerhalb deiner Case-Struktur mit einem Wert von 999(ms) platzieren und den Timeout-Eingang der Ereignisstruktur mit 1(ms) belegen.
So ist sichergestellt, dass die Case-Struktur immer 999 ms benötigt, bevor die Ereignisstruktur anfängt.

Ich hoffe, das hilft dir Smile

Gruß
Christoph


Edit:
es sieht ja so aus, dass die Bearbeitung der Case-Struktur manchmal mehr als eine Sekunde benötigt (weshalb dann negative Werte am Timeout-Eingang resultieren). Negativer Wert heißt, dass kein Timeout vorgesehen ist. Wäre es nicht auch möglich negative Werte abzufangen und sie zu einer Null umzuwandeln, bevor man sie zur Ereignisstruktur weiterreicht? Natürlich wäre dann deine exakt sekündliche Messung hinüber.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.08.2012, 09:07
Beitrag #3

gm-axion Offline
LVF-Grünschnabel
*


Beiträge: 45
Registriert seit: Aug 2010

2010
2010
DE


Deutschland
RE: Messintervall mit Eventstruktur
Hallo,
gut, das könnte man natürlich so machen, aber wie du schon richtig bemerkt hast, ist das Hauptproblem der negative Wert an der Eventstruktur. Ich könnte eine Auswahl treffen und so den negativen Wert abfangen, aber genau das soll ja auch gar nicht erst passieren. Ich dachte, es gibt vielleicht eine Möglichkeit das eleganter zu implementieren, sodass mein Problem gar nicht erst auftritt...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.08.2012, 09:32
Beitrag #4

NWOmason Offline
Simultator
*****


Beiträge: 1.078
Registriert seit: Dec 2010

2012.SP1
2008
EN

93047
Deutschland
RE: Messintervall mit Eventstruktur
(27.08.2012 09:07 )gm-axion schrieb:  Ich könnte eine Auswahl treffen und so den negativen Wert abfangen, aber genau das soll ja auch gar nicht erst passieren.

Und woran scheiterts?

   

(27.08.2012 09:07 )gm-axion schrieb:  Ich dachte, es gibt vielleicht eine Möglichkeit das eleganter zu implementieren, sodass mein Problem gar nicht erst auftritt...

Mit dem obigen Lösungsvorschlag wird der Timeoutanschluss nie negativ.


Beste Grüße,
NWO

9 von 10 Stimmen in meinem Kopf sagen: Ich bin nicht verrückt,
die andere summt die Melodie von Tetris
.

NI schrieb:To use the abort button is like using a tree to stop a car!

(20.01.2012 11:02 )NWOmason schrieb:  Getting Started with NI LabVIEW Student Training
http://zone.ni.com/devzone/cda/tut/p/id/7466

Introduction to NI LabVIEW - Learn LabVIEW Basics
http://www.ni.com/gettingstarted/labviewbasics/

Top 5 der Empfehlungen für LabVIEW-Einsteiger
http://www.ni.com/newsletter/51735/de/
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.08.2012, 09:33
Beitrag #5

Clyde Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 71
Registriert seit: May 2012

2012
2009
EN


Sonstige
RE: Messintervall mit Eventstruktur
Das Problem ist aber, dass deine Messung mehr als eine Sekunde benötigt; sonst würden keine negativen Werte auftreten.
Was ich damit sagen will: du solltest das Problem an der Wurzel anpacken und nicht versuchen das Drumherum zu verbessern. Du musst rausfinden warum die Verarbeitung manchmal mehr als eine Sekunde braucht und das beheben.
Die Zeit kann man auch mit der besten Programmierung nicht schneller oder langsamer laufen lassen Wink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.08.2012, 09:44
Beitrag #6

gm-axion Offline
LVF-Grünschnabel
*


Beiträge: 45
Registriert seit: Aug 2010

2010
2010
DE


Deutschland
RE: Messintervall mit Eventstruktur
(27.08.2012 09:33 )Clyde schrieb:  Das Problem ist aber, dass deine Messung mehr als eine Sekunde benötigt; sonst würden keine negativen Werte auftreten.
Was ich damit sagen will: du solltest das Problem an der Wurzel anpacken und nicht versuchen das Drumherum zu verbessern. Du musst rausfinden warum die Verarbeitung manchmal mehr als eine Sekunde braucht und das beheben.
Die Zeit kann man auch mit der besten Programmierung nicht schneller oder langsamer laufen lassen Wink

Genau das war der Kern meiner Frage Blush Das habe ich wohl nicht so gut ausgedrückt.
Am besten einfach mal ein paar Marken setzen und gucken. Allerdings lief das Programm sogar schon knapp 2 Tage ohne Probleme.
Gibts vielleicht etwas, was auf das Problem hinweist? Ob das leeren des Puffers zwischendrin mal mehr zeit benötigt? Das Cluster sollte für die TDMS-Befehle auch lesbar sein, wenn da die erzeugerschleife nachhängt. (?)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.08.2012, 13:08
Beitrag #7

rasta Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 245
Registriert seit: Oct 2006

LabVIEW 2009-2017
2006
EN

53909
Deutschland
RE: Messintervall mit Eventstruktur
(27.08.2012 09:44 )gm-axion schrieb:  
(27.08.2012 09:33 )Clyde schrieb:  Das Problem ist aber, dass deine Messung mehr als eine Sekunde benötigt; sonst würden keine negativen Werte auftreten.
Was ich damit sagen will: du solltest das Problem an der Wurzel anpacken und nicht versuchen das Drumherum zu verbessern. Du musst rausfinden warum die Verarbeitung manchmal mehr als eine Sekunde braucht und das beheben.
Die Zeit kann man auch mit der besten Programmierung nicht schneller oder langsamer laufen lassen Wink

Genau das war der Kern meiner Frage Blush Das habe ich wohl nicht so gut ausgedrückt.
Am besten einfach mal ein paar Marken setzen und gucken. Allerdings lief das Programm sogar schon knapp 2 Tage ohne Probleme.
Gibts vielleicht etwas, was auf das Problem hinweist? Ob das leeren des Puffers zwischendrin mal mehr zeit benötigt? Das Cluster sollte für die TDMS-Befehle auch lesbar sein, wenn da die erzeugerschleife nachhängt. (?)

Hallo Jonas,
Deine "Intervallprogrammierung" ist nicht so mein Fall
aber trotzdem ein paar allgemeine Tipps:

- Der Zugriff mittels Property-Nodes und die Umwandlung nach dynamische Daten sind unnötig. Die Property Nodes-Werte (langsamer Zugriff auf die Werte+Frontpanel-Update) kannst Du bestimmt mit den echten Control-Werten ersetzen und gleich in Waveform schreiben, was die Dynamische-Daten-Wandlung überflüssig macht.
Das ganze dann schön kompakt in ein Datenarray mit dem Du in eine For-Schleife gehst und zum Speichern dann nur einen TDMS-Write benötigst.
- „Das Problem ist aber, dass deine Messung mehr als eine Sekunde benötigt; sonst würden keine negativen Werte auftreten.“ – Grund hierfür ist wahrscheinlich die Fragmentierung der TDMS-Datei. Dies ist sehr häufig zu beobachten wenn Einzelwerte geschrieben werden (so wie in Deinem Fall). Als Indikator für die Fragmentierung beobachte mal die automatisch angelegte *.tdms_index Datei. Diese ist dann nahezu gleich gross wie die eigentliche TDMS-Datei. Abhilfe schafft das TDMS- Defrag. Dazu musst Du jedoch das Schreib-Handling wie folgt umstellen: Die TDMS-Datei öffnen-Werte schreiben-TDMS-Datei schließen und anschließend defragmentieren. Du brauchst nicht jede Iteration zu defragmentieren.Hierfür bietet sich an „ausnahmsweise ein Express-Vi  Verstrichene Zeit (elapsed Time)“ zu nehmen, bei der Du am Anschluß (Time Target (s)) z.B. 60s einstellt. Am Ausgang „Time has elapsed“ wertest Du den Boolean in einer case aus (TrueDefrag)—False (nix).
- Wenn das ganze wochenlang bzw. monatelang speichern soll, mache Dir schon einmal Gedanken für einen automatischen Dateisplit.


Gruß
Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.08.2012, 16:13
Beitrag #8

gm-axion Offline
LVF-Grünschnabel
*


Beiträge: 45
Registriert seit: Aug 2010

2010
2010
DE


Deutschland
RE: Messintervall mit Eventstruktur
Hallo Ralf,
danke für die Tipps. Allerdings verstehe ich nicht ganz, was mit deinem folgenden Ansatz gemeint ist.
Soll heißen, ich sollte lieber den Cluster mit meinen Werten gleich direkt abspeichern, statt aufdröseln und einzeln abspeichern?

[/quote]
Hallo Jonas,
Deine "Intervallprogrammierung" ist nicht so mein Fall
aber trotzdem ein paar allgemeine Tipps:

- Der Zugriff mittels Property-Nodes und die Umwandlung nach dynamische Daten sind unnötig. Die Property Nodes-Werte (langsamer Zugriff auf die Werte+Frontpanel-Update) kannst Du bestimmt mit den echten Control-Werten ersetzen und gleich in Waveform schreiben, was die Dynamische-Daten-Wandlung überflüssig macht.
Das ganze dann schön kompakt in ein Datenarray mit dem Du in eine For-Schleife gehst und zum Speichern dann nur einen TDMS-Write benötigst.
Gruß
Ralf
[/quote]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.08.2012, 19:32
Beitrag #9

NWOmason Offline
Simultator
*****


Beiträge: 1.078
Registriert seit: Dec 2010

2012.SP1
2008
EN

93047
Deutschland
RE: Messintervall mit Eventstruktur
(27.08.2012 16:13 )gm-axion schrieb:  Soll heißen, ich sollte lieber den Cluster mit meinen Werten gleich direkt abspeichern, statt aufdröseln und einzeln abspeichern?

Dein Screenshot sieht so aus, als würde der Cluster nur DBL-Werte enthalten. Diese kannst du auch gleich komplett als Array speichern.

Hier ein mögliches Konzept:

   

Beste Grüße,
NWO

9 von 10 Stimmen in meinem Kopf sagen: Ich bin nicht verrückt,
die andere summt die Melodie von Tetris
.

NI schrieb:To use the abort button is like using a tree to stop a car!

(20.01.2012 11:02 )NWOmason schrieb:  Getting Started with NI LabVIEW Student Training
http://zone.ni.com/devzone/cda/tut/p/id/7466

Introduction to NI LabVIEW - Learn LabVIEW Basics
http://www.ni.com/gettingstarted/labviewbasics/

Top 5 der Empfehlungen für LabVIEW-Einsteiger
http://www.ni.com/newsletter/51735/de/
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.08.2012, 08:24
Beitrag #10

gm-axion Offline
LVF-Grünschnabel
*


Beiträge: 45
Registriert seit: Aug 2010

2010
2010
DE


Deutschland
RE: Messintervall mit Eventstruktur
Hallo,
okay das bringt schon ein paar Millisekunden und ist übersichtlicher, danke!

Das Hauptproblem scheint nun tatsächlich die ständig wachsende Index Datei zu sein. Leider zeigt das Defragmentieren keinerlei Wirkung bei mir, im Gegenteil:

Sobald ich im Case True von "zeit verstrichen" schließe, defragmentiere und wieder öffne braucht meine Schleife auch mehr als eine Sekunde...

Das kann dich nicht so schwer sein, wie ich mir das hier mache Blink
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
  Eventstruktur in state machine/ Zustandssteuerung Meister Eder 1 4.038 11.02.2014 18:51
Letzter Beitrag: Trinitatis
  Messintervall+Pausenintervall bei Durchflussmessung Jack Bauer 2 4.286 15.08.2007 19:20
Letzter Beitrag: Jack Bauer

Gehe zu: