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 

Referenz zu mehreren Instanzen



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.01.2009, 18:27
Beitrag #1

Event Horizon Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Jan 2009

7.1, 8.6
-
DE_EN

42653
Deutschland
Referenz zu mehreren Instanzen
Hallo!

Ich habe hier ein kleines Problem mit Referenzen, bei dem ich nicht weiter weiß. Ich hab hier auch schon etwas im Forum gesucht, aber meistens wurden nur Lösungen in Form von VIs für LabVIEW 8+ gepostet, ich verwende jedoch nur 7.1. Daher erlaube ich mir mal, ein neues Thema zu erstellen.

Folgendes: Ich möchte gerne 36 unterschiedliche vorzeichenbehaftete 16Bit-Werte histogrammieren. Da mir die LV-eigenen Histogrammfunktionen nicht so sehr zusagen, will ich mir was eigenes bauen. Und zwar will ich in die Histogramme Wert für Wert reinschieben (und das mit 500Hz), und gleichzeitig etwas gemächlicher die Histogramme bei Bedarf plotten lassen.

Dazu habe ich mir ein Array mit 64k Einträgen gemacht, es mit zwei weiteren Zahlen verclustert, und die Referenz zu dem Cluster gebildet. Dies geschieht innerhalb eines SubVIs.

Ich rufe das SubVI nun in einer Schleife 36 mal auf, um ein Array von 36 Referenzen für meine 36 Messwerte zu erhalten.

Das Problem: Dieses Array enthält nun 36 Referenzen zu einem einzigen Cluster.

Hat da wer nen heißen Tipp, wie man das lösen kann?

Ich habe mal ein Minimalbeispiel in LV7.1 angehängt


Angehängte Datei(en)
Sonstige .zip  Minimal.zip (Größe: 29,98 KB / Downloads: 185)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.01.2009, 19:16
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Referenz zu mehreren Instanzen
So ganz bin ich noch nicht schlau, was du eigenzlich machen willst.

Ich weiß nur, Referenzen so wie du sie verwendest, sind alles andere als Datenfluß-gerecht. Ich bin der Meinung, was du machen willst, geht mit einem "funktionalen SubVI".

Guck dirs mal an. Es soll LV7.0 sein.


Angehängte Datei(en)
Sonstige .vi  MeimMuster.vi (Größe: 44,23 KB / Downloads: 188)

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.01.2009, 13:34
Beitrag #3

Event Horizon Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Jan 2009

7.1, 8.6
-
DE_EN

42653
Deutschland
Referenz zu mehreren Instanzen
Hallo!

Das Füttern meiner Cluster bzw deren Arrays ist kein sonderliches Problem, und geht auch z.B. so, wie du es als Beispiel gepostet hast. Ich möchte nur gleichzeitig in einem anderen Zeitintervall die Daten aus dem Array auch auslesen können.




Nochmal zum eingentlichen Sinn des ganzen:



Nun habe ich 36 dieser Cluster, und die Arrays darin haben jeweils 64k Einträge. Bei jeder Messung gibt es für jeden Cluster neue Zahl. Diese Zahl beschreibt einen Index im Array, Der Wert bei dem Index wird um 1 vergrößert. Das ganze passiert für alle Cluster 500x pro Sekunde.

Ich möchte nun den Inhalt der Arrays in xy-Graphen visualisieren, und zwar, während die Messung läuft. Ich werde nie alle Array gleichzeitig zeigen, aber zumindest 9 werden stets zu sehen sein. Nun ist zum einen die Datenrate selbst viel zu hoch, die Anzeige sollte eher jede Sekunde aktualisiert werden, zum anderen stirbt LabVIEW auch daran, 64k xy-Paare im Graphen darzustellen, hier ist u.a. noch ein Resampling o.ä notwendig.




Im Endeffekt will ich also zwei Schleifen haben. Eine läuft so schnell, wie die Daten kommen und packt sie in die Cluster / Arrays, und die zweite holt sich die Daten recht gemächlich und zeigt sie an.

Im Sinne konventioneller Programmiersprachen wäre es vorteilhaft, wenn man einen einzigen Speicherbereich hätte, wo die eine Funktion reinschreibt, währen die andere liest, denn die Gesamtmenge an Daten beträgt etwa 5MB. Übertragen auf LV hieße das, daß man mit Referenzen arbeiten müßte.

Mein Beispiel hatte nun nur das Phänomen vorgeführt, der Sinn des ganzen blieb aber außen vor.




Ich danke dir für die Mühe, allerdings bin ich weiterhin für Vorschläge für mein Problem offen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.01.2009, 14:13
Beitrag #4

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Referenz zu mehreren Instanzen
' schrieb:Ich möchte nur gleichzeitig in einem anderen Zeitintervall die Daten aus dem Array auch auslesen können.
Mach halt.
Das SubVI einfach in einer anderen Task aufrufen. Am Ausgang stehen alle Daten bereit.

Von einer Lösung per Referenz rate ich ab.

Nichtsdestoweniger würde es prinzipiell gehen. Referenzen haben aber einen Nachteil: Wenn der Speichermanager irgendwann mal der Meinung ist, seinen Speicher aufräumen zu wollen, geht das Referenzziel verloren. Ohne Referenz, also mit normalem Zugriff, kann nichts passieren.

Zitat:die Anzeige sollte eher jede Sekunde aktualisiert werden,
Top1
Zitat:zum anderen stirbt LabVIEW auch daran, 64k xy-Paare im Graphen darzustellen,
Hä? 64.000 Wertepaare? Kauf dir ein neues LV. 300.000 gehen ohne Probleme.
Zitat:Im Endeffekt will ich also zwei Schleifen haben. Eine läuft so schnell, wie die Daten kommen und packt sie in die Cluster / Arrays, und die zweite holt sich die Daten recht gemächlich und zeigt sie an.
Top1

Zitat:Im Sinne konventioneller Programmiersprachen wäre es vorteilhaft, wenn man einen einzigen Speicherbereich hätte, wo die eine Funktion reinschreibt, währen die andere liest, denn die Gesamtmenge an Daten beträgt etwa 5MB.
Der gemeinsame Speicher heißt Melder.
Zitat:Übertragen auf LV hieße das, daß man mit Referenzen arbeiten müßte.
Müssen nicht. Das Sample-Programm kann die Daten per Melder/Queue weiterschicken. Wer Daten haben will, hole sie sich ab.

Wie samples du denn deine Daten? Max oder eigene DLL?

Zitat:allerdings bin ich weiterhin für Vorschläge für mein Problem offen.
Was wolltest du nochmals haben? 36 Referenzen? Das müsstest du manuell machen. Also 32 Elemente anklicken, Referenz erstellen, und mit ArrayErzeugen zu einem Array machen.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.01.2009, 14:45 (Dieser Beitrag wurde zuletzt bearbeitet: 28.01.2009 14:49 von jg.)
Beitrag #5

Event Horizon Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Jan 2009

7.1, 8.6
-
DE_EN

42653
Deutschland
Referenz zu mehreren Instanzen
So wird es wohl sein.




Um mal etwas weiter auszuholen, wo die Daten her kommen:
Die Hardware besteht aus einem PIC18F4455 Microcontroller von Microchip, der von Hause aus USB spricht und sich als COM-Schnittstelle einnistet. Sehr praktisch das.
Nun gibt es eine DLL (nicht von mir), die über Queues die Kommunikation mit dem PIC regelt, und das geht eigentlich extrem fix.
Der PIC schickt mir Datensätze von 36 16bit-Werten (von einem ADC), die ich im Vorfeld in solche Arrays mit 36 Einträgen packe. Die so formatierten Datensätze werden in einer Queue zur weiteren Verarbeitung bereitgestellt.
Ich bekomme grade nur etwa 280 Datensätze pro Sekunde, weil der PIC nicht mehr schafft, aber da kann noch optimiert werden, um auf eine Zielrate von etwa 500 Sätzen pro Sekunde zu kommen.


Meine Auswertung holt sich nun einen Datensatz nach dem anderen aus der Queue und soll diese 36 Werte in die 36 Cluster einsortieren, sodaß Histogramme raus kommen.

Nun hab ich noch ein wenig rumprobiert:

Wenn ich diese Histogrammierung mit den Referenzen erledige (was ja halbwegs funktioniert, es gibt hinterher nur ein einziges Histogramm Dry), habe ich eine Systemlast von 40-60%, womit ich recht zufrieden bin, wenngleich ein C-Programm den Job erledigt, ohne daß die CPU das merkt.

Wenn ich nun sowas in der Art mache (Man möge sich oben die Queue vorstellen):


   


habe ich 100% Systemlast, und statt 280 Datensätze verarbeite ich nur noch 18 pro Sekunde. Das ist armselig.


Wenn ich die Queue einfach mal auslese, ohne die Datensätze weiter zu verarbeiten, komme ich auf eine Systemlast von etwa 3-4%.


Das ganze natürlich noch OHNE Anzeige im xy-Graphen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.01.2009, 14:51
Beitrag #6

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Referenz zu mehreren Instanzen
Offtopic2
Hey, heute haben wir aber viele externe Bildlinks...

Auch für dich gilt: LVF-Regeln lesen und beachten (in diesem Fall vor allem Punkt 4).

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.01.2009, 15:00
Beitrag #7

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Referenz zu mehreren Instanzen
' schrieb:Um mal etwas weiter auszuholen, wo die Daten her kommen:
Ja. Gut.

Zitat:habe ich eine Systemlast von 40-60%,
Das ist sehr schlecht. Entweder machst du was falsch, oder benutzt ein falsches Verfahren.

Zitat:Wenn ich nun sowas in der Art mache
Kein Wunder.
Da wird ja auch mit dem Memorymanager gearbeitet. Und der ist ein Zeitfressen ohne Gleichen. Überall, wo du autoindizierte Arrays erstellst, vergeht Zeit ohne Ende. Hier benutzt du also ein falsches Verfahren. Stell von autoindiziert auf Schieberegister um und überlege dir, wie es in der Schleife aussehen muss.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.01.2009, 15:17
Beitrag #8

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Referenz zu mehreren Instanzen
Ich muss mal was Prinzipielles fragen:

Du hättest am Ende gerne 36 Histogramme? Wobei jedes Histogramm 65535 (FFFFh) Klassen besteht?

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.01.2009, 18:56
Beitrag #9

Event Horizon Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Jan 2009

7.1, 8.6
-
DE_EN

42653
Deutschland
Referenz zu mehreren Instanzen
Hallo!

Auf die Schnelle: JA. Also, sofern du unter Klassen auch 16Bit Integer-Zahlen verstehst... Warum?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.01.2009, 22:03
Beitrag #10

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Referenz zu mehreren Instanzen
' schrieb:Hallo!

Auf die Schnelle: JA. Also, sofern du unter Klassen auch 16Bit Integer-Zahlen verstehst... Warum?
ich wollte nur sichergehen, dass ich dein Ziel richtig verstehe, das ist in dem langen Text mglw. etwas untergegangen.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
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
  Instanzen identischer SubVi's, Verhalten unerklärbar studmt 5 4.954 22.07.2015 22:11
Letzter Beitrag: studmt
  Fensterpositionen mehrerer Instanzen speichern und laden NoWay 2 4.170 15.07.2014 14:11
Letzter Beitrag: NoWay
  Kommunikation zw. 2 Instanzen einer Exe Trinitatis 3 4.087 14.04.2014 22:15
Letzter Beitrag: jg
  Array Element als Referenz von Referenz Benjamin Fuchs 15 20.573 18.02.2014 11:56
Letzter Beitrag: RabenFlug
  Variable Anzahl von Instanzen zur Laufzeit D_Sev 13 9.668 04.11.2013 09:18
Letzter Beitrag: GerdW
  Wie mache ich zwei Instanzen einer FGV im selben Projekt? Lupin 13 12.162 06.10.2013 19:10
Letzter Beitrag: jg

Gehe zu: