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 

Zeiger in Array speichern



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!

19.11.2010, 11:38
Beitrag #1

mike8080 Offline
LVF-Grünschnabel
*


Beiträge: 28
Registriert seit: Nov 2010

8.5
-
de


Deutschland
Zeiger in Array speichern
Hallo Forum,

ich beschäftige mich seit kurzem mit LabVIEW 8.5 und stehe jetzt vor einem größeren Problem.
Im Augenblick versuche ich aus einer Messkarte Daten auszulesen dies gelingt mit allerdings nicht wie erwartet.

(Schleife1)
Die Daten werden durch den Befehlt IK220 ModeRAM (subVI des Herstellers) konstant in der Messkarte erfasst und in den Ram geschrieben.
Der Befehl muss nur einmalig aufgerufen werden die Karte Zeichnet dann konstant in einem Loop auf.

(Schleife 2)
Die Messwerte möchte ich anschließend über den Befehl „IK220 BurstRam“ (subVI des Herstellers) in ein Array schreiben.
Im Anhang befindet sich die Beschreibung zu dem SubVI „IK220BurstRam“.
Nun versuche ich über pData (Zeiger auf ein Array in welchem die Zählerwerte abgelegt werden) die Messwerte auszulesen und in einen Array zu schreiben. Dazu verwende ich die Funktion InsertIntoArray. Die Werte sollen dabei so lange in ein Array geschrieben werden bis ich den OK Butten drücke .

(Schleife 3).
Anschließend Will ich die Messwerte in eine Tabelle schreiben.


Wenn ich das Programm ausführe wird mein Array bei einem erneuten Aufruf nicht auf 0 gesetzt.
Ich hab zusätzliche Anzeigen eingebaut um mir die Größe der Arrays auszugeben.
Array Size1 gibt mir den richtigen Wert aus, es handelt sich dabei um die Größe der aktuell ausgelesenen Messwerte im jeweiligen Schleifendurchlauf.
Array Size2 gibt mir allerdings immer den Wert der letztmaligen Ausführung des Programms aus.
Somit funktioniert das Programm nur 1x.

In Schleife 3 werden mir allerdings auch nur die Messwerte ausgegeben, die zuletzt in IK220 Burst Ram ausgelesen wurden.

Die Karte Stellt einen Speicher von 8191 Messwerten zur verfügung, es wird jede Millisekunde ein Messwert erfasst.
Die Karte wird im Loop betrieben wenn dier Speicher voll ist wird wieder bei 1 begonnen.

Ich hoffe Ihr habt mein Problem verstanden
Gruß Mike


Angehängte Datei(en) Thumbnail(s)
       

Sonstige .vi  ik220_Realtime.vi (Größe: 123,04 KB / Downloads: 158)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
19.11.2010, 12:55
Beitrag #2

mike8080 Offline
LVF-Grünschnabel
*


Beiträge: 28
Registriert seit: Nov 2010

8.5
-
de


Deutschland
Zeiger in Array speichern
jetzt hab ich noch mal ne komische Frage.
Warum gibt mir LabView nur so viele Messwerte aus wie ich im Timer einstelle?
Wenn ich bei Timer 8191ms einstelle schreibt er mir das gesamte Array mit Messwerten voll.
Trage ich 10ms ein gibt er mir nur 10 Werte aus????
Bbei jedem Durchlauf holt er sich doch das Array neu und fügt es an??
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2010, 13:30 (Dieser Beitrag wurde zuletzt bearbeitet: 19.11.2010 13:32 von Achim.)
Beitrag #3

Achim Offline
*****
*****


Beiträge: 4.222
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
Zeiger in Array speichern
Hi,
bei pData kommen schon die Daten raus, die du eigentlich willst! Die Jungs von Heidenhain haben für ihr VI einfach die Namen des Zeigers verwendet, mit denen man in C auf die Daten zugreifen müsste...aber in der unterlagerten DLL wird dieser Zugriff schon gemacht und dir die eigentlichen Werte zurückgegeben!

Diese kannst du mit BuildArray einfach bei jedem Durchlauf an die Daten des vorhergehenden Durchlaufs (siehe dein FeedbackNode) anhängen!

A.

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2010, 13:32 (Dieser Beitrag wurde zuletzt bearbeitet: 19.11.2010 13:32 von RHeil.)
Beitrag #4

RHeil Offline
LVF-Grünschnabel
*


Beiträge: 26
Registriert seit: Nov 2010

2011 SP1
2001
EN

81737
Deutschland
Zeiger in Array speichern
Ich versuche gerade zu verstehen, was da genau passiert.
Ist natürlich etwas theoretisch ohne die SubVIs.
Aber der Kern scheint das "ik220 BurstRam.vi" zu sein, dessen Kontexthilfe Du uns ja mitgeliefert hast.
Ich gehe mal davon aus, dass das VI in Wahrheit Double-Werte zurückliefert und keinen Zeiger. Das dürfte wohl eher ein Copy-Paste-Fehler beim Erstellen der Hilfe gewesen sein.

Zuerst fällt mir auf, dass das wie eine ungebremste Schleife aussieht.
Wieviele Werte bekommst Du denn pro Durchlauf zurück?
Werden das mehr, wenn Du eine Wartezeit (wenige ms) einbaust?
Das wäre vermutlich sinnvoll, um die CPU-Last in einem erträglichen Rahmen zu halten.

Dein eigentliches Problem liegt aber wohl in der Datenhaltung.
Verstehe ich deine Absicht richtig? Du möchtest einfach alle Messwerte eines Programmablaufs aneinanderhängen und dann gemeinsam darstellen?

Ein grundlegender Fehler besteht darin, dass Du die Feedback Nodes nicht initialisierst. Deshalb behalten sie ihren Inhalt zwischen den einzelnen Durchläufen.

Außerdem vermute ich, dass sich Deine Absicht wesentlich einfacher umsetzen lässt, indem Du einfach ein "Build Array" verwendest (nicht vergessen einen Rechtsklick darauf zu machen und "Concatenate Inputs" anzuhaken!).

Ich persönlich würde das lieber mit einem Shift Register umsetzen als mit einem Feedback Node, aber das ist letztlich Geschmackssache.

Schau Dir mal das angehängte VI an, ich hoffe das klärt einiges.

Mit etwas mehr Wissen über die Randparameter könnte man die Datenhaltung sicher noch weiter optimieren (z.B. indem man das Array zu Beginn allokiert), allerdings sollte man sich hier die Frage stellen, ob das im konkreten Fall den Aufwand wert ist.

Lv85_img


Angehängte Datei(en)
Sonstige .vi  ArrayAufbau01.vi (Größe: 17,22 KB / Downloads: 178)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2010, 15:04
Beitrag #5

mike8080 Offline
LVF-Grünschnabel
*


Beiträge: 28
Registriert seit: Nov 2010

8.5
-
de


Deutschland
Zeiger in Array speichern
Danke für die schnelle Antworten!!!

OK den Timer habe ich jetzt eingebaut.
Komischerweise bekomme ich immer ungefähr die Anzahl Werte übergeben was ich auch als Wartezeit eintrage.
Ich habe den Timer jetzt auf 100ms eingestellt.

Und nach der Initialisierung meines Feedback Nodes funktioniert es jetzt auch :-)
Ich muss dir recht geben mit Build Array ist es viel einfach,
hatte des auch erst versucht aber "Concatenate Inputs" war der Trick an der Sache!

Kannst du mir jetzt noch sagen wie ich den Speicher allokieren kann?

DANKE noch mal, ich hab jetzt 2 Tage an dem S.... rum gemacht :-)
jetzt kann das Wochenende kommen!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.11.2010, 09:10
Beitrag #6

RHeil Offline
LVF-Grünschnabel
*


Beiträge: 26
Registriert seit: Nov 2010

2011 SP1
2001
EN

81737
Deutschland
Zeiger in Array speichern
' schrieb:OK den Timer habe ich jetzt eingebaut.
Komischerweise bekomme ich immer ungefähr die Anzahl Werte übergeben was ich auch als Wartezeit eintrage.
Ich habe den Timer jetzt auf 100ms eingestellt.
Das hängt davon ab, wie das Treiber-VI intern funktioniert.
Gut möglich, dass das selbst auf die nötigen Werte wartet - dann hat die äußere Wartezeit keinen Effekt.
Tipp: Rechne Dir theoretisch aus, wie lange ein Schleifendurchlauf ca. dauern sollte (Anzahl Werte / Rate) und wähle eine Wartezeit, die etwa halb so groß ist. Damit sollten dann auch Fehlerfälle abgedeckt sein, ohne dass die Schleife amokläuft.

' schrieb:Kannst du mir jetzt noch sagen wie ich den Speicher allokieren kann?
Allokieren im Voraus ist natürlich nur dann richtig sinnvoll, wenn Du vorher bereits weißt, wieviele Werte Du insgesamt lesen wirst (oder zumindest eine feste Obergrenze definieren kannst).
Deshalb verwendet das angehängte Beispiel auch eine For-Schleife statt der While-Schleife (es geht aber natürlich auch mit while).

Was passiert da genau?
Zuerst rechnen wir aus, wieviele Werte es werden und legen ein Array der entsprechenden Größe an.
Als Element verwende ich hier NaN (NotANumber). Das hat den Vorteil, dass es im Graphen transparent (bzw. nicht) gezeichnet wird. Außerdem ist es die korrekte Codierung für "ungültiger Wert".

Dieses Array bleibt dann die ganze Zeit über im Shift Register.
In jedem Durchlauf wird ein Teil des Arrays mit den neuen Werten überschrieben.
Wenn Du Dir den Graphen anschaust, siehst Du, dass die X-Achse bereits zu Beginn die volle Wertezahl zeigt, da das Array bereits diese Länge hat.

Lv85_img


Angehängte Datei(en)
Sonstige .vi  ArrayAufbau02.vi (Größe: 13,53 KB / Downloads: 155)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
23.11.2010, 12:32
Beitrag #7

mike8080 Offline
LVF-Grünschnabel
*


Beiträge: 28
Registriert seit: Nov 2010

8.5
-
de


Deutschland
Zeiger in Array speichern
Ok hab es jetzt eingebaut Danke nochmal für die Hilfe
Big Grin
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
  Maximalwert aus Array speichern Hans96 3 4.228 15.07.2021 14:56
Letzter Beitrag: Hans96
  String in Array speichern für flexible Gruppenbenennung in TDMS Datei hansi_1 3 3.452 10.12.2019 09:45
Letzter Beitrag: Freddy
  Encoder werte nach bestimmte steps in Array speichern ziarehmann 4 4.695 09.07.2017 23:33
Letzter Beitrag: Trinitatis
  Elemente aus 2D-Array nach bestimmten Index (n,m) auslesen und in 2D Array speichern 1990 2 5.074 29.04.2017 21:51
Letzter Beitrag: 1990
  Werte nach Zeitablauf in Array speichern mundb 3 3.860 14.04.2016 13:56
Letzter Beitrag: mundb
  Messdaten in 3D Array speichern und sortieren andrepf 8 6.633 08.04.2016 10:12
Letzter Beitrag: jg

Gehe zu: