01-04-2017 03:42 AM
Hallo liebe Community,
mein Anliegen ist wahrscheinlich für einen Pro ein leichtes Unterfangen und in ein paar Zeilen abgehandelt, als kompletter Neuling in Sachen Diadem und Skriptschreiberei für mich allerdings erstmal eine hohe Hürde. Daher wäre ich über Hilfe sehr dankbar und möchte mich an dieser Stelle bereits herzlich bedanken!
Im Rahmen meiner Masterthesis liegen zwölf Gruppen in DIAdem vor mit jeweils unterschiedlichem Namen, und jede Gruppe enthält genau zwei Kanäle: Kanal 1 "Time" enthält die x-Werte, Kanal 2 "Preload" den entsprechenden y-Wert. Ziel ist es nun ganz bestimmte Messwerte auszulesen, von den über eine Million vorhandenen Messwerten werden nur 83 benötigt.
Ich bräuchte also ein Skript welche die Gruppen nacheinander abarbeitet und die entsprechenden y-Werte in eine bestehende Excel-Datei spaltenweise schreibt (eine neue Exceldatei wäre auch ok). Also beispielsweise beginne mit der ersten Gruppe, x-Wert = 3 Sekunden, schreibe mir den dazugehörigen y-Wert in Zelle A1, dann x-Wert 10 Sekunden, y-Wert in Zelle A2 usw. Die x-Werte sind dabei für alle Gruppen gleich.
Das sollte doch als Skript ein leichtes sein, oder? Ich habe auch schon ein paar Code-Fragmente gefunden, aber so richtig erschließt sich mir noch nicht die Sprache. Als nächstes Problem kommt manchmal aufgrund der Messtechnik vor, dass beispielsweis nicht exakt 3s im Kanal stehen, sondern 3,02 s. Sollte der exakte Wert nicht vorliegen wäre eine lineare Interpolation der zwei benachbarten Werte natürlich am besten!
Vielen Dank für die Hilfe!
Solved! Go to Solution.
01-05-2017 02:41 AM
Hallo Chris,
ich denke, den Skript Befehl, den Du suchst ist "CHD":
Variable: CHD - DIAdem 2015 Hilfe - National Instruments
http://zone.ni.com/reference/de-XX/help/370858M-0113/varoff/chd/
D.h. Du würdest CHD gleich zweimal benutzen: einmal lesend, um den entsprechenden Wert aus den Gruppe auszulesen (siehe 1. Skriptbeispiel aus dem Link). Und dann noch einmal schreibend, um den Wert in z.B. einen neuen kanal hineinzuschreiben (siehe 2. Skript).
Was Du dann noch benötigst ist folgende KB:
How can I Programmatically Import My Data from Excel to DIAdem or Export it From DIAdem to Excel? - National Instruments
http://digital.ni.com/public.nsf/allkb/C9423530C340B77386256F5E0048F369?OpenDocument
bzw hier:
Solved: Re : How to export diadem channels to an existing excel file with a certain configuration - Discussion Forums - National Instruments
http://forums.ni.com/t5/DIAdem/How-to-export-diadem-channels-to-an-existing-excel-file-with-a/m-p/13...
Ich hoffe das hilft Dir weiter!
LG, Niko
01-05-2017 04:07 AM
Kurzer Nachtrag, nachdem ich meinen Post oben nicht mehr editieren kann:
nach einem Hinweis von unsrem Spezialisten wäre die wesentlich elegantere und vor allem auch schnellere Möglichkeit über die Objekt orientierte Data API zu gehen. Mehr dazu ist in der DIAdem Hilfe zu finden:
Help >> Programming Reference >> Object Oriented Script Interfaces >> Internal Data >> Objects >> Object: Data
Ein Beispiel um den 3. Wert aus einem neu angelegten Channel anzeigen wäre folgendermassen:
Dim oMyGrp, oMyChn, i
Set oMyGrp = Data.Root.ChannelGroups.Add("MyChannelGroup")
Set oMyChn = oMyGrp.Channels.Add("MyChannel",DataTypeFloat64)
For i = 1 to 100
oMyChn.Values(i) = CDbl(i/100000)
Next
MsgBox(oMyChn.Values(3))
Gruss, Niko
01-05-2017 04:18 AM
Perfekt und vielen lieben Dank für die ausführliche und schnelle Antwort, genau danach habe ich gesucht! Sie haben mir sehr geholfen! 🙂
01-05-2017 04:37 AM
Super, das es klappt! Wenn der vorherige Post stimmt, dann gerne als Lösung markieren oder einen Kudo dafür geben 😉
Merci