DAQ-Anzeige in seperatem VI und Speicherung in TDMS Format
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.11.2015, 15:15 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2015 15:26 von GerdW.)
RE: DAQ-Anzeige in seperatem VI und Speicherung in TDMS Format
Hallo m.,
ja eben: es wird nur der Wert im Cluster geändert, den du beim BundleByName ausgewählt hast!
Du änderst das Cluster-Element "1", während Cluster-Element "2" unverändert bleibt. (THINK DATAFLOW!)
Deinen Kommentar im FP "Der Wert von 2 wird allerdings auch in Cluster geschrieben" verstehe ich nicht. Es ist doch alles durch THINK DATAFLOW geregelt!?
Du schreibst einen Cluster, bestehend aus 2 Werten, in deinen Indicator "Cluster"!
Edit:
Dein Kommentar "Die Funktion "Bundle By Name" benutzt "Cluster_Prototyp" als Strukturprototyp" ist FALSCH!
Cluster_Prototyp ist eine DATENQUELLE - THINK DATAFLOW!
RE: DAQ-Anzeige in seperatem VI und Speicherung in TDMS Format
(27.11.2015 15:06 )m.werle schrieb: In LV2010 werden alle Werte vom Input Cluster genommen, die ausgewählten Werte werden überschrieben, und das ganze ins Outputcluster geschrieben.
Das ist nicht nur in LV2010 so, das ist eine Methode von graphischer Programmierung.
Zitat:"New_Value_of_1" wird gebundelt und soll die Variable "1" in "Cluster" überschreiben.
Das kann man so sagen.
Man kann aber auch sagen: In dem Datensatz, der durch den Wire repräsentiert wird und der die Variable "1" enthält, wird mittels eines Bundles der Wert der Variablen "1" mit dem Wert von "New_Value_of_1" ersetzt.
Beachte: Eingabeelement, Wire, Bundle und Anzeigeelement haben alle vier - also auch der Wire - den selben Datentyp und somit die selben Variablen.
Zitat:Die Funktion "Bundle By Name" benutzt "Cluster_Prototyp" als Strukturprototyp"
Auch das kann man so sagen.
Wenn du ein "Bundle By Name" auf das Blockdiagramm ziehst, liegt dieses Element völlig typlos auf dem BD. Indem du einen definierten Cluster (z.B. eine Konstante oder den Ausgang eines Eingabeelementes) auf den Eingang von "Bundle By Name" gibst, bekommt dieses Element einen "Typ" - nämlich den des Clusters. Demzufolge enthalten alle Elemente des Bundles nur Variablennamen des typisierenden Clusters. So gesehen ist "Cluster_Prototyp" ein "Strukturprototyp". Dies alles geschieht zur Entwicklungszeit.
Später allerdings, zur Laufzeit des Programmes, wirkt der am Eingang des "Bundle By Name" angebundene Datensatz als Eingangsdaten für "Bundle By Name" - also als Datenquelle.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
03.12.2015, 15:06 (Dieser Beitrag wurde zuletzt bearbeitet: 03.12.2015 16:32 von m.werle.)
RE: DAQ-Anzeige in seperatem VI und Speicherung in TDMS Format
Bezüglich der "Bundly by Name" Sache. Mh, hab's kapiert. Verzeihung, wenn ich mich ungenau ausdrücke, weil ich mir die offizielle Terminologie noch nicht so ganz erschlossen habe.
Datalogging mit "Write to Spreadsheet" in einer .csv-Datei
So, ich möchte Daten in einer .csv-Datei loggen. Leider klappt es nicht, die verschiedenen Daten auf die Spalten der .csv-Datei aufzuteilen. Eigentlich sollte dies per Komma geschehen.
Bei jeder Iteration in die nächste Reihe rücken funktioniert, leider wird immer nur die erste Spalte gefüllt. Sollte doch nicht so schwer sein...
Beispiel aus der .csv-Tabelle:
15:7:33, 1,203907, 2,033211, 2,725275, 0,000000, 0,000000, 0,999185, 0,000200, 2,114774,
15:7:34, 1,789011, 2,644689, 3,357753, 0,000000, 0,000000, 0,999654, 0,000304, 2,793651,
Edit: Weitere Erläuterungen zum Blockschaltbild
Der Dateninput (rosa Wire von oben links) hat folgenden Datentyp:
1D-Array (Kette von Datensätzen)
Einzelner Datensatz: 1D-Array (Jedes Array-Glied entspricht einer Messgröße)
Jede Messgröße ist in Waveformformat gespeichert mit dem Komponenten t0, dt und Y, wobei Y ein Array mit einem Sample(DBL) ist.
03.12.2015, 17:06 (Dieser Beitrag wurde zuletzt bearbeitet: 03.12.2015 17:17 von GerdW.)
RE: DAQ-Anzeige in seperatem VI und Speicherung in TDMS Format
Hallo m.,
Grundlagen der Windows-Nutzung:
Das CSV-Format wurde für Computer entworfen, die mit englischen Zahlenformaten arbeiten: Punkt als Dezimaltrennzeichen. (CSV = "comma seperated values"!)
Da ist es nicht besonders clever, sowohl innerhalb von Zahlen als auch als Trennzeichen zwischen Zahlen ein Komma zu verwenden.
Von mit präferierte Lösung: In Windows -> Regionaleinstellung englische Zahlenformate einstellen (Punkt als Dezimaltrennzeichen, Komma als Tausendertrennzeichen). Grund: Jedes externe Messgerät arbeitet mit diesem Zahlenformat!
Andere Lösungen:
- In LabVIEW die Zahlen mit einem Punkt als Dezimaltrennzeichen formatieren ("%.;")
- Ein anderes Trennzeichen für die csv-Dateien verwenden, üblich sind auch TAB oder ;
Und wie bestimmt schon mal gesagt: Ein VI lässt sich wesentlich einfacher debuggen als ein Bild…
Zitat:Weitere Erläuterungen zum Blockschaltbild
Der Dateninput (rosa Wire von oben links) hat folgenden Datentyp:
1D-Array (Kette von Datensätzen)
Einzelner Datensatz: 1D-Array (Jedes Array-Glied entspricht einer Messgröße)
Ich sehe keine "Ketten von Datensätzen".
Ich sehe da ein 1D-Array of Cluster of 1D-Array of Waveform. So sollte es dir auch die Kontexthilfe anzeigen!
Und warum ist es so schwierig, gerade Drähte oder mal Ctrl-U zu verwenden?
Die Berechnung unten in der Loop ist auch hochgradig Rube-Goldberg: es gibt da eine Modulo-Division in der Numerics-Palette…
RE: DAQ-Anzeige in seperatem VI und Speicherung in TDMS Format
Rube Goldberg war mir bis gerade kein Begriff. Mit der Modulo Division ist das deutlich übersichtlicher.
Hmpf. Datalogging in csv-Format wird gleich weitergetestet. Habe noch ein paar andere seltsame Probleme.
Property Node (Value) Error 1055 bei strikt typisierter Variable
EDIT: Liegt wohl an den Typendefinitionen der Ctrls! Werde das erstmal ausbessern. Wenns doch nichts bringt komm' ich wieder.
OK, habe bei den VIs, bei denen es nicht ging die Typendefintion von unten wiederholt und den Teil einfach neu gemacht. Funktioniert inzwischen.
Habe mir in diversen VIs eine strikt typisierte Boolsche Stopvariable eingebaut (mechanical action switch). Die Referenzen dieser strict typsierten Boolschen Variablen, habe ich mir global gespeichert. (Global_Stop.vi)
Da ich viele Programme im Hintergrund laufen habe, wollte ich diese nacheinander in der richtigen Reihenfolge über ein VI (Beenden.vi) schließen können.
Leider spucken mir manche der Property Nodes (Value) in "Beenden.vi" den Error 1055 aus. In den VI's in welchen die Stopvariablen sind (habe mal beispielhaft "Debug_Datalogmenü.vi" und "Alarmmenü.vi" hochgeladen) funktioniert es einwandfrei die boolschen Variablen über Property Nodes (Value) zu benutzen. Auch, wenn ich die Referenz aus der globalen Variable (Global_Stop.vi) entnehmen, kann ich den Property Node (Value) ohne Error benutzen.
Oh, stelle gerade fest, dass es bei manchen VIs funktioniert, bei manchen nicht. Typendefinition scheint auch nicht ganz überall gleich zu sein? In "Debug_Datalogmenü.vi" gibt es bei den lokalen Variablen der typ def boolschen VariableCoersion Dots. In "Alarmmenü.vi" gibt es diese nicht, und der Property Node (Value) funktioniert nicht.
Typendefinition:
Control in VI 1 erstellt
Rechtsklick -> Customize -> Strict Type Def -> Save as "Ctrl_blabla.ctl" -> Control in VI 1 damit ersetzen? Ja
Rechtsklick auf das nun strikt typisierte Bedienelement -> Create -> Reference
Rechtsklick auf Reference -> Create -> Control
Control in Globale Variable kopieren
Reference aus VI 1 in strikt typisierter Refnum-Control in globaler Variable speicher
RE: DAQ-Anzeige in seperatem VI und Speicherung in TDMS Format
(03.12.2015 17:06 )GerdW schrieb: Hallo m.,
Grundlagen der Windows-Nutzung:
Das CSV-Format wurde für Computer entworfen, die mit englischen Zahlenformaten arbeiten: Punkt als Dezimaltrennzeichen. (CSV = "comma seperated values"!)
Da ist es nicht besonders clever, sowohl innerhalb von Zahlen als auch als Trennzeichen zwischen Zahlen ein Komma zu verwenden.
Von mit präferierte Lösung: In Windows -> Regionaleinstellung englische Zahlenformate einstellen (Punkt als Dezimaltrennzeichen, Komma als Tausendertrennzeichen). Grund: Jedes externe Messgerät arbeitet mit diesem Zahlenformat!
Andere Lösungen:
- In LabVIEW die Zahlen mit einem Punkt als Dezimaltrennzeichen formatieren ("%.;")
- Ein anderes Trennzeichen für die csv-Dateien verwenden, üblich sind auch TAB oder ;
Und wie bestimmt schon mal gesagt: Ein VI lässt sich wesentlich einfacher debuggen als ein Bild…
So, hab mich nochmals daran gewagt und beides ausprobiert. (Erstens die regionale Einstellungen geändert und zweitens im VI per Format-Syntax die Dezimalkommas in Punkte umgetauscht, damit die Kommas in der CSV Datei zum Seperieren der Daten benutzt werden können.)
Windows 7 installiert.
Systemsteuerung -> Region und Sprache -> Formate -> Weitere Einstellungen -> Dezimaltrennung "." und Symbol für Zifferngruppierung "," -> Ok.
Zweiteres kannst du in meinem kleinen TestVI anschauen.
Zitat:Weitere Erläuterungen zum Blockschaltbild
Der Dateninput (rosa Wire von oben links) hat folgenden Datentyp:
1D-Array (Kette von Datensätzen)
Einzelner Datensatz: 1D-Array (Jedes Array-Glied entspricht einer Messgröße)
Ich sehe keine "Ketten von Datensätzen".
Ich sehe da ein 1D-Array of Cluster of 1D-Array of Waveform. So sollte es dir auch die Kontexthilfe anzeigen!
Das war das, was ich ausdrücken wollte. Ein Array sind für mich eine Reihe (oder Kette) von Daten. Jede mit einem eigenen Index. Bei mehrdimensionalen Arrays muss man wohl eher Feld dazu sagen. Ich werd versuchen meine Wortwahl treffender zu formulieren.
RE: DAQ-Anzeige in seperatem VI und Speicherung in TDMS Format
Hallo m.,
Zitat:Zweiteres kannst du in meinem kleinen TestVI anschauen. Funktioniert leider beides nicht.
Da sind ja auch ein paar Bugs drin:
(Nicht wundern über die roten Kreuze, hab gerade LV2015 installiert…)
- Wenn du dein "Header"-Array größer machst wie im bild, dann siehst du auch die doppelten Einträge. Müssen die sein?
- Wenn du ein String-Array an WriteSpreadsheetFile anschließt, dann ist ein Formatstring wie "%.;%f" Blödsinn. String kennen nur "%s"…
- Wenn du Zahlen speichern willst, musst du sie nicht zwingend "händisch" in Strings umwandeln, siehe Bild.
- Wenn du schon Zahlen nach String umwandelst, wieso hängst du dann an jede noch ein Komma dran? Und gibst dann zusätzlich beim WriteSpreadsheetFile nochmal das Komma an, was dort dann nochmal zwischen jedes Stringelement eingefügt wird!? Einmal reicht doch völlig aus!
RE: DAQ-Anzeige in seperatem VI und Speicherung in TDMS Format
Datalogging CSV-Format mittels WriteSpreadsheetFile, Probleme mit Spalten füllen
Ups, ja das Header-Array ist ausversehen vermurkst.
Formatstring "%.;%f" brauche ich also nur, wenn ich Zahlen (z.B: DBL) über FormatValue in Strings verwandeln möchte. Wollte als Dezimales Trennzeichen den Punkt einführen, damit ich Komma als Delimiter benutzen kann. Leider hatte ich ein gewisses Verständnisproblem, was dieser Delimiter denn macht oder ist.
Ziel:
Ich möchte einen Wert je Spalte haben (Anzahl: 11 Werte), im Header sind diese benannt, später in der Schleife (N müsste 11 statt 10 sein), werden die Werte dann im Test-VI zufällig generiert und geloggt.
Versuchte Umsetzung:
Ich dachte der Delimiter(\t)-Input des WriteSpreadsheetFile (in meinem Falle String: ",") gibt an, bei welchem Stringsymbol ich in die nächste Spalte springe. Deshalb habe ich mein 1D-String-Array so aufgebaut, dass alle Messwerte mit einem Komma abgetrennt bei Index 0 im 1D-String-Array liegen.
LabviewHelp:
Zitat:delimiter is the character or string of characters to use to separate fields in the spreadsheet file. For example, a value of , (comma) specifies a single comma as the delimiter. The default is \t, which specifies a single tab character as the delimiter.
Wenn ich Daten ins 1D-String-Array beim nächsthöheren Index einfüge, landen diese durch WriteSpreadsheetFile ja in der nächsten Zeile.
Wie schreibe ich Daten in verschiedene Spalten einer .csv-Datei mithilfe von WriteSpreadsheetFile?
Zitat: 1. Create column labels by creating a String array and putting the column labels into the first element of the array. Write this array into a spreadsheet file with the Write to Spreadsheet File VI. Set the Transpose value to True.
2. Convert data for each column into Strings and append them. Delimit each data value with a comma (for CSV files) or tabs (for tab-delimited files). If using a loop where one set of data is acquired in each iteration of the loop, only one appended string is needed. Otherwise, several appended strings will be needed.
3. Insert the appended string(s) into a 1D String array.
4. Write the 1D String array into the spreadsheet with the Write to Spreadsheet File VI. Set the Append and Transpose values to True.
1. Check, Alle Spaltenbezeichnungen sind im ersten Index des 1D-String-Array für den Header. Wie im Bild im Link sind alle Bezeichnungen durch Kommas getrennt.
2. Check Jedes Datenpaket (für jede Zeile) besteht aus einem String. Jeder Wert ist mit einem Komma vom nächsten getrennt.
3. Check Dieser String wird zu einem 1D-String-Array umgewandelt. Der String liegt beim ersten Index, der Rest ist leer.
4. Check ... mag trotzdem nicht funktionieren.
RE: DAQ-Anzeige in seperatem VI und Speicherung in TDMS Format
Hab die CSV-Datei mal mit OpenOffice geöffnet. Voilà, alles wie gewollt.
Nur in Excel werden die Kommas in der CSV-Datei ignoriert und alles in eine Spalte gepackt.
RE: DAQ-Anzeige in seperatem VI und Speicherung in TDMS Format
Hallo m.,
Excel hat da gewisse Grundeinstellungen:
- wenn ich mit csv-Dateien arbeite, verwende ich das Semikolon als Trennzeichen. Damit hat Excel nie Probleme: dies entspricht dem, was Excel bei "Speichern als…" mit der Vorgabe "CSV, trennzeichengetrennt" erzeugt!
- wenn ich mit txt-Dateien arbeite, verwende ich das TAB als Trennzeichen. Damit hat Excel nie Probleme: dies entspricht dem, was Excel bei "Speichern als" als "TXT-Datei" erzeugt…
Manchmal hilft es ja, die Anleitung/Hilfe zu Programmen zu lesen!