DIAdem

cancel
Showing results for 
Search instead for 
Did you mean: 

Timer setzen

Hallo Kollegen,

wie wird die Funktion „timer“ in Diadem verwendet?

Gibt es eine fertige Funktion wie CTNV()?

 

Ich muss in einem Kanal Werte 5s lang ausblenden,

nachdem eine Bedingung eintrifft.

 

Mit anderen Wörtern,

wenn in einem Kanal der Wert von „0“ auf „1“ springt,

sollen im anderen Kanal ab diese Zeile alle Datenwerte 5s lang auf NOVALUE gesetzt werden.

 

Kann ich mit ctnv() Zeitbereiche wie Wertebereiche ausschneiden?

 

Danke im Voraus,

 a6a

0 Kudos
Message 1 of 4
(3,421 Views)
Hallo,
leider habe ich kein fertiges Beispiel für diese Aufgabe, aber ich will versuchen mit ein paar Hinweisen weiter zu helfen:
Eine vorbereitete Funktion für diese Filterung beinhaltet DIAdem nicht, mit einem Script sollte sich die Analyse iterativ jedoch relativ einfach lösen lassen.

Im ersten Schritt würde ich den Datenkanal kopieren, um die Originaldaten nicht zu überschreiben
Gehen wir davon aus, dass T der Triggerkanal, D der kopierte Datenkanal und Z der zugehörige Zeitkanal ist.
Die Chnfind Funktion, die hier gut genutzt werden kann akzeptiert als zweiten Parameter die Startzeile, ab der gesucht wird

(1) find (T=1,offset)  - Finden der Zeile, in welcher getriggert wird. Die Startzeile ist in der ersten Iteration 1 und wird dann auf die Zeile gesetzt, in der der Triggerkanal nach einem Trigger wieder auf 0 zurückgeht.

(2) chdx(triggerZeile, Z)  - Zeitstempel des Triggers ausleden.

(3) find(Z>Zeitstempel+5) - Finden der Zeile, in dem der Zeitstempel dem Triggerzeitpunkt + 5 Sekunden enspricht.

(4) DataBlInsertVal(D,Zeitstempel, Anzahl Werte,novalue,1)- Ersetzen der Werte in D, im Bereich der gefundenen Zeilen mit NoValue.

(5) find(T=0, triggerzeile) bestimmen des offsets, ab welchem der Nächste Trigger gesucht werden soll

(6) nächste Iteration, goto 1

Die Schleife wird beendet, wenn in T keine Triggerbedingung mehr erfüllt wird, d.h. die Find-Funktion liefert den Wert 0 als Zeilennummer zurück.

Ich hoffe, dieses Konzept hilft Ihnen bei der Entwicklung Ihrer Lösung weiter.
Ingo Schumacher
Systems Engineering Manager CEERNational Instruments Germany
0 Kudos
Message 2 of 4
(3,385 Views)

Hallo Info,

habe vielen Dank für das Konzept.

habe es an meine daten angepasst (s. Anhang) und beim debuggen bekomme ich eine Fehlermeldung, die mich in Wahrnsinn treibt und jeden Spaß auf Diadem kostet.

Bitte schaue es Dir an. warum ist der Ausdruck "Zeitstempel+5" als fehlerhaft gemeldet.

Viele Grüße,

a6a


Call DATAFILELOADSEL("2007y7m13d_13h54m7s AEP1101.dat","MDF","[6]/[1]","")    ' laden time kanal
call ChnAlloc("I_batt_5s")                                                                                                 ' ein data kanal anlegen
Call DataBlCopy("[1]/I_batt",1,2000,"[1]/I_batt_5s",1)                                                      ' die original daten in ein data kanal kopieren

dim triggerZeile, zeitstempel, offset, intNo_time
offset=1

do
triggerZeile = find("ch(""[1]/B_kwdreht"")=1",offset)                                                            '- Finden der Zeile, in welcher getriggert wird. Die Startzeile ist in der ersten Iteration 1 und wird dann auf die Zeile                                                                                                                                  gesetzt, in der der Triggerkanal nach einem Trigger wieder auf 0 zurückgeht.

intNo_time = CNo("[1]/time")                        

zeitstempel=chdx(triggerZeile, intNo_time)                                                                        '- Zeitstempel des Triggers ausleden.

Anzahl_Werte=find("ch(""[1]/time"")>Zeitstempel+5", zeitstempel)                                     '- Finden der Zeile, in dem der Zeitstempel dem Triggerzeitpunkt + 5 Sekunden enspricht.

call DataBlInsertVal(ch("[1]/I_batt_5s"),Zeitstempel, Anzahl_Werte, novalue)                    '- Ersetzen der Werte in D, im Bereich der gefundenen Zeilen mit NoValue.

offset = find("ch(""[1]/B_kwdreht"")=0", triggerzeile) 'bestimmen des offsets, ab welchem der Nächste Trigger gesucht werden soll

loop until triggerZeile=0

0 Kudos
Message 3 of 4
(3,358 Views)
Hallo a6a!
 
Die Ursache dürfte sein das 'Zeitstempel' eine VBS und keine DIAdem Variable ist und somit nicht in einem Formelausdruck verwendet werden kann. Setze vor dem find die Variable R1 mit dem Wert und ersetze im Formelausdruck 'Zeitstempel' durch 'R1'. Ich würde dann noch eine Klammer drumherum machen, weiß aber nicht ob das notwendig ist.
 
Matthias
Matthias Alleweldt
Project Engineer / Projektingenieur
Twigeater?  
0 Kudos
Message 4 of 4
(3,355 Views)