Hallo zusammen!
Ich bin relativ neu in der LabView-Welt, komme aus der zeilenbasierten Programmierung (C#, C, etc) und habe noch Probleme, meine Pläne in grafischen Code umzuwandeln.
Evtl. benötige ich für mein Problem lediglich einige Stichwörter, bis jetzt habe ich noch keine sinnvolle Lösung gefunden.
Zu meiner Aufgabenstellung: Ich zeichne Messwerte von unterschiedlichen Messgeräten auf, die Anzahl der Kanäle liegt so im Bereich 40-50 (hauptsächlich Temperaturen, Leistungen, Spannungen, Ströme, etc).
Zu meinem ersten Problem: Die Verwaltung der Kanäle im Blockschaltbild. Derzeit liefern meine MessVI's Doublearrays, das Ganze artet in ein riesiges Arraykonstrukt aus, zusätzlich variieren Kanalanzahl und Bezeichnung je nach Messobjekt. Gibt es da eine Möglichkeit, sich aus einer "Kanalwurst" gezielt Kanäle z.B. nach einer Bezeichnung herrauszupicken? In C# hätte ich mir eine Klasse mit Bezeichnung, Double Array/Liste und Zeitstempeln generiert und die in einem Messobjekt abgelegt. Es gibt ja auch diesen Signaldatentyp, mit dem habe ich mich noch nicht so richtig angefreundet.
Außerdem würde ich gerne zu jedem Messwert einen Zeitstempel abspeichern, es gibt Berechnungen, z.B. die Erwärmung in der letzten halben Stunde, die auch bei variabler Abtastrate funktionieren soll.
Das zweite Problem: Das anzeigen dieser Daten, ich würde gerne die Kanäle in Gruppen einteilen, um sie dann per Buttondruck ein- bzw. auszublenden. Als Anzeigeobjekt selbst hat bis jetzt am besten ein Signalverlaufsdiagramm funktioniert, auch wenn ich mit dem noch nicht ganz glücklich bin. Die Aufzeichnungen gehen über mehrere Stunden, die Abtastrate ist z.B. 1 Hz. Wenn ich gezoomt durch den Chart fahre, springt der Blickbereich bei Aktualisierung (also jede Sekunde) zum aktuellsten Wert.
Mit mehreren unterschiedlichen Achsen habe ich mich noch gar nicht beschäftigt, das kommt aber bestimmt auch bald :-)
Noch ein kleine Punkt am Rand: Wenn ich die Grafik exportiere (ob Excel, Diadem oder ähnliches) wandelt mir Labview die Daten in Integer um, das Komma ist also weg.
Hat jemand dazu paar Vorschläge, Stichwörter, etc?
Schonmal Danke fürs Lesen :-)
Hallo tsa,
Zitat:Ich zeichne Messwerte von unterschiedlichen Messgeräten auf, die Anzahl der Kanäle liegt so im Bereich 40-50 (hauptsächlich Temperaturen, Leistungen, Spannungen, Ströme, etc).
Externe Messgeräte über eine VISA-Schnittstelle? Oder eine NI-DAQmx-Messkarte?
Konstante Samplerate? Alle Kanäle mit der gleichen Samplerate?
Zitat:Derzeit liefern meine MessVI's Doublearrays
Ein Array pro Kanal?
Ein Array pro Messgerät und mit je einem Element pro Kanal?
Zitat:In C# hätte ich mir eine Klasse mit Bezeichnung, Double Array/Liste und Zeitstempeln generiert und die in einem Messobjekt abgelegt.
LabVIEW könnte das prinzipiell auch - auch wenn ich das hier für Overkill halte…
Zitat:Signaldatentyp, mit dem habe ich mich noch nicht so richtig angefreundet.
Meinst du Signalverläufe aka Waveforms?
Zitat:bis jetzt am besten ein Signalverlaufsdiagramm funktioniert, auch wenn ich mit dem noch nicht ganz glücklich bin.
Mit Charts werde ich auch selten glücklich. Graphen bieten viel mehr Möglichkeiten!
Zitat:Wenn ich gezoomt durch den Chart fahre, springt der Blickbereich bei Aktualisierung (also jede Sekunde) zum aktuellsten Wert.
Was erwartest du? Der Chart stellt nun mal den aktuellsten Datenpunkt dar - oder hast du etwa vergessen, das Autoscaling abzuschalten?
Zitat:Wenn ich die Grafik exportiere (ob Excel, Diadem oder ähnliches) wandelt mir Labview die Daten in Integer um, das Komma ist also weg.
Das ist ein typisches Problem, wenn du einen Rechner mit deutschen Zahlenformaten nutzt. Das hatten wir
erst so ähnlich vor kurzem diskutiert…
Zusammenfassung:
Bitte formuliere deine Fragen konkreter, detaillierter, präziser…
(03.02.2015 14:35 )GerdW schrieb: [ -> ]Hallo tsa,
Externe Messgeräte über eine VISA-Schnittstelle? Oder eine NI-DAQmx-Messkarte?
Konstante Samplerate? Alle Kanäle mit der gleichen Samplerate?
Teils VISA, teils vom Assistenten für Instrumen IO abgewandelte VI's (Messgeräte sind fast alle über GPIB verbunden)
Samplerate sei für ein Messobjekt konstant, kann aber für andere Messobjekte variieren (wobei das könnte für den Anfang auch vernachlässigt werden)
Zitat:Zitat:Derzeit liefern meine MessVI's Doublearrays
Ein Array pro Kanal?
Ein Array pro Messgerät und mit je einem Element pro Kanal?
Von Messgeräten die nur einen Wert messen kommt ein Skalar (double)
Von einem Messgerät mit 10 Kanälen kommt ein 2d Array (double) mit 10 Einträgen, die Werte dieser 2 Messgeräte werden zu einem 2D array mit 11 Elementen verheiratet sodass aus dem "Mess VI" nur noch eine Messdatenleitung rauskommt, soweit der Plan, bin jedem Verbesserungsvorschlag aufgeschlossen!
Zitat:Zitat:In C# hätte ich mir eine Klasse mit Bezeichnung, Double Array/Liste und Zeitstempeln generiert und die in einem Messobjekt abgelegt.
LabVIEW könnte das prinzipiell auch - auch wenn ich das hier für Overkill halte…
Bitte nur her mit den Vorschlägen! :-)
Zitat:Zitat:Signaldatentyp, mit dem habe ich mich noch nicht so richtig angefreundet.
Meinst du Signalverläufe aka Waveforms?
Ja genau, ich experimentiere gerade mit Clusterkonstanten, in die ich so nen Signalverlauf mit Startzeitstempel, dt, Messwerten hineingezogen habe + nen String für Kanalbezeichnung, der Signalverlaufausgang hat den Datentyp waveform
Zitat:Zitat:Wenn ich gezoomt durch den Chart fahre, springt der Blickbereich bei Aktualisierung (also jede Sekunde) zum aktuellsten Wert.
Was erwartest du? Der Chart stellt nun mal den aktuellsten Datenpunkt dar - oder hast du etwa vergessen, das Autoscaling abzuschalten?
Gut möglich dass ich das übersehen habe in einer Option
Zitat:Zusammenfassung:
Bitte formuliere deine Fragen konkreter, detaillierter, präziser…
Wie kann ich 40 Kanäle plus minus 5 sinnvoll verdrahten und anzeigen?
Der Hinweiß zu den Graphen war schonmal gut, darauf stürze ich mich nun!
Hallo tsa,
Zitat:Teils VISA, teils vom Assistenten für Instrumen IO abgewandelte VI's
Also alles mit VISA…
Zitat:Von Messgeräten die nur einen Wert messen kommt ein Skalar (double) Von einem Messgerät mit 10 Kanälen kommt ein 2d Array (double) mit 10 Einträgen, die Werte dieser 2 Messgeräte werden zu einem 2D array mit 11 Elementen verheiratet sodass aus dem "Mess VI" nur noch eine Messdatenleitung rauskommt
Du willst also einen Einzelwert mit einem
2D-Array von 10 Werten verknüpfen und machst daraus ein
2D-Array? Spätestens hier wäre ein Beispiel-VI hilfreich.
Ich würde alle Messwerte in einem
1D-Array ablegen…
Zitat:Bitte nur her mit den Vorschlägen! :-)
Konstante Samplerate? Oder variable/variierende Samplerate?
Im ersten Fall mit Waveforms arbeiten, im zweiten Fall mit X-/Y-Arrays…
Zitat:Wie kann ich 40 Kanäle plus minus 5 sinnvoll verdrahten und anzeigen?
Mit einem einzigen Array: 40±5 Zeilen für deine Kanäle…
Zitat:Ich würde alle Messwerte in einem 1D-Array ablegen…
Mein Fehler, hatte mich vertan, es sind natürlich 1D Arrays!
Zitat:Mit einem einzigen Array: 40±5 Zeilen für deine Kanäle…
Nach derzeitigem Erkenntnisstand werde ich die Doubles in ein Array aus waveforms konvertieren. Die große Frage die sich mir stellt ist nun die Selektion einzelner Kanäle. Ich möchte davon Abstand nehmen, die Kanäle über Indizes anzusprechen, da sich Anzahl und Index je nach Messobjekt ändern kann. So kann z.B. Index 5 einmal ein Strom und einmal eine Leistung sein. Mir wäre es am liebsten, die Kanäle über Namen anzusprechen (z.B. "U1"), die einmal an einem Ort im Programm zu definieren sind. Dieser Name soll dann im Graph gleich als Plotbezeichnung dienen. Idealerweise ist eine Liste hinterlegt, die vordefinierte Namen einer Gruppe zuordnet, die dann im Graphen einzeln anzeigbar und ausblendbar ist (z.B. U1, URMS als Spannung identifiziert, und der jeweiligen Achse im Graphen zuordnen)
Viele Grüße!
Hallo tsa,
du willst also mit Key-Value-Paaren arbeiten? Dafür
bietet LabVIEW schon was, ist aber leicht über Einsteigerlevel.
Du tust dir einen Gefallen, wenn du erst mal ein paar Einsteigerkurse belegst!
(03.02.2015 15:57 )GerdW schrieb: [ -> ]Hallo tsa,
du willst also mit Key-Value-Paaren arbeiten? Dafür bietet LabVIEW schon was, ist aber leicht über Einsteigerlevel.
Du tust dir einen Gefallen, wenn du erst mal ein paar Einsteigerkurse belegst!
Ah das scheint mir schon recht nahe an dem zu sein, was ich benötige!
Ich bin noch nicht ganz fit mit den verschiedenen Leitungsfarben/Arten, Object Data ist in dem Beispiel ein Array aus Object Data Types, wobei das erste Element des Objekts DataTypes ein String ist?
Dieses Object Data, kann das als Cluster bestehend aus Waveform + String aufgebaut werden?
Der Cluster kann ja zerlegt in die einzelnen Elemente werden, da dann einfach auf Gleichheit des Strings prüfen?
Auf jeden Fall ein herzliches Dankeschön, das hat mich ordentlich weitergebracht, warum diese Dummy Variant Leitung benötigt wird erschließt sich mir jetzt auf Anhieb nicht, macht aber nix :-D
Hallo tsa,
Zitat:warum diese Dummy Variant Leitung benötigt wird erschließt sich mir jetzt auf Anhieb nicht
Der Variant bietet eben diese
Attribute, in denen die Key-Value-Paare gespeichert werden. Deshalb der Dummy-Variant, der selbst
keinen Wert zugewiesen bekommt…
(03.02.2015 16:27 )GerdW schrieb: [ -> ]Der Variant bietet eben diese Attribute, in denen die Key-Value-Paare gespeichert werden. Deshalb der Dummy-Variant, der selbst keinen Wert zugewiesen bekommt…
Er wird also nur als temporäre Datenstruktur verwendet, um den red/black tree Algorithmus durchführen zu können?
Um die andere Frage abzuschließen, das Objekt, das ich hier benötige, ist das ein Cluster? Mit Google und "Labview object data type" lande ich jedesmal bei Clustern. Am Front End (also die Benutzeroberfläche wie auch immer die heißt) konnte ich schon so nen Cluster bauen, im Blockschaltbild wills noch nicht so klappen, ist aber bestimmt nur ne Frage der Zeit.
Ich fange schon wieder zu schwafeln an, kurz formuliert: Wie erhalte ich aus meinen waveforms den hier benötigten Object Data Type?
Hallo tsa,
Zitat:Wie erhalte ich aus meinen waveforms den hier benötigten Object Data Type?
Falsche Fragestellung, die wahrscheinlich aus der Nutzung OOP-basierter Programmierung in C++/C# stammt…
Welche Daten willst du speichern? Name der Kurve (= Key für das Variant-Attribut!) und Waveform. Wenn das alles ist, dann ist der zu speichernde Datentyp ein Waveform. Wenn du mehr Daten zu einem Namen speichern willst, solltest du einen Cluster aus Waveform und diesen anderen Daten erstellen:
[
attachment=51994]