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 

Array von bestimmter Stelle an lesen



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!

28.02.2010, 19:58
Beitrag #1

taylor Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Jan 2010

8.6.1
-
de

57627
Deutschland
Array von bestimmter Stelle an lesen
Hi Leute,

ich bin immer noch Neuling, sowohl hier im Forum als auch in Bezug auf LabVIEW. Im Moment arbeite ich an einem Programm für eine Prüfung. Dabei geht es darum, vier Messwerte zu erfassen und grafisch darzustellen. Soweit auch mittlerweile kein großes Problem mehr. Allerdings hat das Programm noch zwei "Schönheitsfehler":

- Die aufgenommenen Messwerte werden in eine TDMS-Datei geschrieben. Mit einem zweiten, anderen VI kann diese später ausgelesen und die Daten wieder grafisch aufbereitet werden. Im Prinzip nehme ich Messwerte von vier Sensoren auf und füge diesem Array vor dem Datei Schreiben eine weitere, fünfte Spalte mit einer Relativzeit hinzu (beginnt beim Start der Messung ab 00:00 = HH:MM zu laufen). Ich möchte jetzt die Möglichkeit schaffen, beim Auslesen der Messdaten durch eine Tastatureingabe "Zeit" an die entsprechende Stelle der fünften Spalte des Arrays zu springen und dann alle darauf folgenden Messwerte (aus den vier anderen Spalten) auszulesen, damit der Benutzer nicht nach einer langen Aufzeichnung "ewig" vor seinem PC sitzen muss. Welche Möglichkeit(en) gibt es da?

- Da ich den DAQmx-Task, der die Daten von vier AI der USB-6008 einliest, mit 1/4Hz Samplerate betreibe (es geht um die Aufnahme von wenig dynamischen Temperaturen über eine Zeit von bis zu 48h), wird auch die While-Schleife, in der sich dieser Task befindet, nur alle 4s durchlaufen. An sich nicht besonders tragisch, aber es ist sehr unschön wenn man im Frontpanel auf einen Button klickt und erst einige Sekunden später eine Reaktion sieht. Gibt es die Möglichkeit, zwei Schleifen zu synchronisieren und Daten (in dem Fall ja ein 2D-Array mit fünf Spalten) von der einen in die andere zu übertragen? Habe die Synchronisations-Palette bereits "durchforstet", aber es mit keiner der dort gebotenen Möglichkeiten hinbekommen. Das liegt aber vermutlich an meiner eigenen Unwissenheit...

Sowohl das Suchen im Forum als auch in der LV-Hilfe haben mich nicht weitergebracht...

Im Anhang findet Ihr Screenshots der jeweiligen Blockdiagramme (Schreiben / Lesen). Wenn Bedarf besteht, lade ich gerne die VIs hoch. Ich danke Euch für schnelle Antworten!

       

MfG
taylor
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
01.03.2010, 10:59
Beitrag #2

M Nussbaumer Offline
Zarathustra
****


Beiträge: 654
Registriert seit: Sep 2009

2009 SP1
2009
EN

6300
Schweiz
Array von bestimmter Stelle an lesen
' schrieb:- Die aufgenommenen Messwerte werden in eine TDMS-Datei geschrieben. Mit einem zweiten, anderen VI kann diese später ausgelesen und die Daten wieder grafisch aufbereitet werden. Im Prinzip nehme ich Messwerte von vier Sensoren auf und füge diesem Array vor dem Datei Schreiben eine weitere, fünfte Spalte mit einer Relativzeit hinzu (beginnt beim Start der Messung ab 00:00 = HH:MM zu laufen). Ich möchte jetzt die Möglichkeit schaffen, beim Auslesen der Messdaten durch eine Tastatureingabe "Zeit" an die entsprechende Stelle der fünften Spalte des Arrays zu springen und dann alle darauf folgenden Messwerte (aus den vier anderen Spalten) auszulesen, damit der Benutzer nicht nach einer langen Aufzeichnung "ewig" vor seinem PC sitzen muss. Welche Möglichkeit(en) gibt es da?

Sehe ich das richtig, du willst in dem Array quasi zur Stelle scrollen an der dein eingegebener Zeitwert steht?
Wenn ja, dann vergleich doch deine 5.Spalte mit deinem Eingabewert, den Index den du findest kannst dann mit einer Porperty-Node des Arrays zum scrollen bringen.
Hier das Beispiel, wie ich es machen würde:

LabVIEW 8.5

Sonstige .vi  ArrayScrollen.vi (Größe: 12,13 KB / Downloads: 281)



' schrieb:- Da ich den DAQmx-Task, der die Daten von vier AI der USB-6008 einliest, mit 1/4Hz Samplerate betreibe (es geht um die Aufnahme von wenig dynamischen Temperaturen über eine Zeit von bis zu 48h), wird auch die While-Schleife, in der sich dieser Task befindet, nur alle 4s durchlaufen. An sich nicht besonders tragisch, aber es ist sehr unschön wenn man im Frontpanel auf einen Button klickt und erst einige Sekunden später eine Reaktion sieht. Gibt es die Möglichkeit, zwei Schleifen zu synchronisieren und Daten (in dem Fall ja ein 2D-Array mit fünf Spalten) von der einen in die andere zu übertragen? Habe die Synchronisations-Palette bereits "durchforstet", aber es mit keiner der dort gebotenen Möglichkeiten hinbekommen. Das liegt aber vermutlich an meiner eigenen Unwissenheit...
Hier würde ich dir das Producer-Consumer-Pattern von LabVIEW empfehlen, sprich Queues auf der Synchronisations-Palette.

Solltest du noch Fragen haben, so kannst du sie gerne stellen Wink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.03.2010, 20:22
Beitrag #3

taylor Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Jan 2010

8.6.1
-
de

57627
Deutschland
Array von bestimmter Stelle an lesen
Hallo,

erstmal vielen Dank für die schnelle Antwort!

Ich wünschte ich könnte jetzt sagen, dass es mir weitergeholfen hat. Vermutlich stehe ich auch nur auf dem Schlauch. Wenn ich versuche, die Funktion so wie in obigem Beispiel gezeigt zu realisieren, erhalte ich durch die Funktion "Array initialisieren" einen Fehler an der For-Schleife ("N ist nicht verbunden und es existieren keine indizierten Eingänge"). Mir ist aufgefallen, dass sich "Array initialisieren" nicht, wie im Beispiel, in Spalten und Zeilen unterteilen lässt indem ich einfach den ersten Indexeingang offen lasse und am zweiten die Spaltennummer eintrage, sondern dass statt dessen an beiden Eingängen das schwarz ausgefüllte Rechteck abgebildet ist, was meines Wissens heißt, dass der Anschluss aktiviert ist und somit hier dann wohl Spalte 0 ausgelesen würde.
Ich kann mir nicht erklären, warum das so ist und deshalb stellt sich mir folgende Frage: Lag ich überhaupt richtig, als ich schrieb, dass es sich um ein 2D-Array mit fünf Spalten handelt?! Das hängt ja sicher davon ab, wie die Express-VIs "Messwerte in Datei schreiben" bzw. "Messwerte aus Datei lesen" die TDMS-Datei anlegen, oder? Und davon, wie das Array aussieht, welches vom DAQmx-Task kommt.
Des weiteren frage ich mich, wie ich einen Eigenschaftsknoten für das Array erzeugen kann, denn es erscheint ja nicht als Anzeige- oder Bedienelement in meinem Frontpanel, sondern wird lediglich von o.g. Express-VIs erzeugt. Fragen über Fragen... deshalb finden sich im Anhang beide VIs (Messwerte schreiben und Messwerte lesen) und eine der betreffenden TDMS-Dateien. Das alles wurde mit LV 8.6.1 erzeugt.
Ich hoffe, jemand kann damit diese Fragen klären, denn ich weiß wirklich nicht weiter.

Vielen Dank!
taylor


Sonstige .vi  Lesen.vi (Größe: 5,18 MB / Downloads: 363)

Sonstige .vi  Livemessung.vi (Größe: 5,23 MB / Downloads: 294)

Sonstige .rar  Test_TG_4.rar (Größe: 3,58 KB / Downloads: 194)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.03.2010, 21:21
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.430
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Array von bestimmter Stelle an lesen
Hallo Taylor,

dein VI ist ein klassisches Beispiel dafür, warum man von ExpressVIs eher Abstand nehmen sollte...
Du hängst hier 2 VIs von jeweils >5MB Größe an. Wenn ich eines davon on LV2009 lade und wieder abspeichere, werden sogar >13MB draus. Und das alles für eine Funktionalität, die man glatt mit ca. 100kB VI-Größe erzeugen könnte.

ArrayInit liest keine Werte aus, sondern erzeugt ein Array. Deshalb musst du (natürlich) für jede Dimension eine Größe angeben, auch wenn diese Null sein kann...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.03.2010, 08:45
Beitrag #5

M Nussbaumer Offline
Zarathustra
****


Beiträge: 654
Registriert seit: Sep 2009

2009 SP1
2009
EN

6300
Schweiz
Array von bestimmter Stelle an lesen
' schrieb:Ich wünschte ich könnte jetzt sagen, dass es mir weitergeholfen hat. Vermutlich stehe ich auch nur auf dem Schlauch. Wenn ich versuche, die Funktion so wie in obigem Beispiel gezeigt zu realisieren, erhalte ich durch die Funktion "Array initialisieren" einen Fehler an der For-Schleife ("N ist nicht verbunden und es existieren keine indizierten Eingänge"). Mir ist aufgefallen, dass sich "Array initialisieren" nicht, wie im Beispiel, in Spalten und Zeilen unterteilen lässt indem ich einfach den ersten Indexeingang offen lasse und am zweiten die Spaltennummer eintrage, sondern dass statt dessen an beiden Eingängen das schwarz ausgefüllte Rechteck abgebildet ist, was meines Wissens heißt, dass der Anschluss aktiviert ist und somit hier dann wohl Spalte 0 ausgelesen würde.

Im Beispiel wurde auch nicht die Funktion "Array initialisieren" sondern "Index Array" (Sorry verwende LabVIEW auf Englisch) verwendet. Dies damit die 5. Spalte ausgelesen werden kann

' schrieb:Des weiteren frage ich mich, wie ich einen Eigenschaftsknoten für das Array erzeugen kann, denn es erscheint ja nicht als Anzeige- oder Bedienelement in meinem Frontpanel, sondern wird lediglich von o.g. Express-VIs erzeugt. Fragen über Fragen... deshalb finden sich im Anhang beide VIs (Messwerte schreiben und Messwerte lesen) und eine der betreffenden TDMS-Dateien.

Wie gibst du denn dein Array aus? Per Express-VI geht das mit den Eigenschaftsknoten nicht, du musst also zumindest dieses Express-VI durch ein Frontpanel-Array ersetzen.

' schrieb:Ich kann mir nicht erklären, warum das so ist und deshalb stellt sich mir folgende Frage: Lag ich überhaupt richtig, als ich schrieb, dass es sich um ein 2D-Array mit fünf Spalten handelt?! Das hängt ja sicher davon ab, wie die Express-VIs "Messwerte in Datei schreiben" bzw. "Messwerte aus Datei lesen" die TDMS-Datei anlegen, oder? Und davon, wie das Array aussieht, welches vom DAQmx-Task kommt.

Sehe mir gerne dein Problem an, wenn du es für mich auf LabVIEW 8.5 runterspeichern könntest.


Allgemein:
Ich verwende kaum Express VIs da man, wie du gerade selber merkst, diese nicht gut erweitern kann.
Zudem verschlechtert sich die Lesbarkeit des Codes meiner Meinung nach, da man nie auf den ersten Blick die Konfiguration des Express VIs sehen kann.
Und natürlich auch noch aus den selben Gründe wie GerdW Wink
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
  String Array in bin schreiben und lesen EOF hansi9990 9 8.576 31.08.2016 10:56
Letzter Beitrag: hansi9990
  bestimmte Werte aus Array lesen psypher 5 6.682 12.04.2016 09:21
Letzter Beitrag: psypher
  Kommentar an erster Stelle Dustin 5 5.336 23.07.2015 12:31
Letzter Beitrag: GerdW
  String lesen, nach vorgaben löschen und in Array schreiben nova.08 6 7.204 18.09.2014 13:31
Letzter Beitrag: GerdW
  Bestimmter Teil einer Textdatei auslesen ExperimetalPhysiker 3 5.176 24.02.2014 09:08
Letzter Beitrag: GerdW
  String lesen und in Array schreiben maxikboy 2 11.107 19.09.2012 09:52
Letzter Beitrag: maxikboy

Gehe zu: