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!
24.04.2009, 12:13 (Dieser Beitrag wurde zuletzt bearbeitet: 24.04.2009 13:03 von J_uri.)
ich habe gelesen, dass man bei Queues am besten einen Cluster aus Enum-Steuerelement und Variant-Daten verwenden soll, da das sehr multifunktionell ist. Das stimmt natürlich, nur frage ich mich, ob das stets notwendige Konvertieren der Daten aus Variant nicht zu Performanceeinbußen führt. Schließlich ist bei jedem Schreiben und Lesen des Clusters eine zusätzliche Operation notwendig. Das mag bei selten verwendeten Queues nicht so gravierend sein, aber wenn ich bspw. eine Datenerfassung mit hoher Abtastrate programmiere und die Daten über eine solche Queue übertrage kann ich mir schon vorstellen, dass es sich bemerkbar macht.
Kann mir da jemand zustimmen? Oder ist die Daten-zu-Variant-Funktion (und umgekehrt) so systemoptimiert, dass sie zu keiner nennenswerten Zusatzbelastung führt?
Die von dir beschriebene Queue benutze ich auch, allerdings nur, um Kommandos mit optionalen Parametern zu versenden. Der Datentransfer läuft bei mir immer im nativen Datentyp der Messdaten.
In einem meiner Prüfstände läuft eine Messkarte mit 8 Kanälen und 10kHz. Ich kann mir durchaus vorstellen, dass die Prozessorlast merklich steigt, wenn ich alles in Variant und wieder zurückwandle.
' schrieb:aber wenn ich bspw. eine Datenerfassung mit hoher Abtastrate programmiere und die Daten über eine solche Queue übertrage kann ich mir schon vorstellen, dass es sich bemerkbar macht.
Wenn du nur alleine die Sampledaten per Queue verschicken willst, musst du ja nicht einen Variant nehmen. Nimm halt für die Sampledaten einfach eine eigene Queue mit 2DArrDBL.
Meistens verwende ich einen (verschachtelten) Cluster als Queue-Daten. Da können dann für jede Zielfunktion die entsprechenden Parameter drinnen stehen. Nur wenn dieser Cluster zu unübersichtlich wird, verwende ich Variant.
Ich halte den Overhead, der durch Variant entsteht, nicht für relevant.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Mach dir keine Sorge, es nimmt nich zu viel Performance. Ich nutze es überall mit vielen Abtastungen (zuletzt hatte ich 8 geräte mit bis zu 1000 Hz). Zwar nehme ich ENUM+String statt ENUM+Variant, da Variant nicht so verbreitet wie Binary String ist. Aber im Prinzip nimmt die Umwandlung der Daten nach Variant nicht viel mehr Performance, wie Flatten to String. Meine Meinung
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Queues oder Melder mit Variant Daten
Mach Dir mit dem Umwandeln in Variant keine Sorgen.
Das wird auf den Schulungen von NI auch so vermittelt und die müssen ja wissen, was sie machen.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
' schrieb:Wenn du nur alleine die Sampledaten per Queue verschicken willst, musst du ja nicht einen Variant nehmen. Nimm halt für die Sampledaten einfach eine eigene Queue mit 2DArrDBL.
Ganz genau! Wenn du ja weißt, was du versenden willst...dann musst du doch nicht zwanghaft alles "flexibel" halten.
Und mal ehrlich: Wenn eine Anwendung mal steht, wie oft wird dann wirklich eine derartige Änderung notwendig, dass der bis dahin getätigte Aufwand, alles so flexibel zu halten, gerechtfertigt war?
Gruß
Achim
"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)
' schrieb:Zwar nehme ich ENUM+String statt ENUM+Variant, da Variant nicht so verbreitet wie Binary String ist. Aber im Prinzip nimmt die Umwandlung der Daten nach Variant nicht viel mehr Performance, wie Flatten to String. Meine Meinung
Wobei Variant nochmal deutlich schneller als String ist, AQ hat dazu auf lava mal ein Statement abgelassen ...
aber wenn man jetzt nicht gerade schnelle Messdaten über so eine Queue streamt, dann wird man denke ich keinen Geschwindigkeits-Unterschied bemerken, und für das streamen von Messdaten würde ich dann sowieso eine Queue mit dem nativen Datentyl (DBL-Array, Waveform-Array, etc) verwenden ...
' schrieb:10kHz ist doch nicht schnell . Ich habe eine Datenerfassungskarte die mit 400MHz arbeitet :Pda bekomme ich immer graue Haare.
Der Unterschied dabei ist, dass deine Karte die Daten in Array sammelt und dir das komplette Datenarray übergibt. Bei mir muss ich die Daten einzeln über serielle Schnittstelle auslesen. Das macht verdammt viel aus...
Wieso wartest Du nicht bis z.B. 100 oder Messdaten im RS232 Speicher vorhanden sind, so das Du die alle mit einem mal auslesen kannst. Somit kannst Du eine Menge Zeit einsparren. Den RS232 Eingabepuffer kann man auch durch Eigenschaften vergrößern, so das 1 Million Datenpunkte reinpassen.
Es gibt aus RS232 USB Konverter die locker 250k anstelle von 115k baut schaffen. Die kazft man für 10€ steckt die einfach an den PC. Diese werden das als Comx erkannt und Du kannst die normalen Visa Funktionen benutzen. Nur muss Deine Gegenschnittstelle auch dieses Geschwindigkeit unterstützen.