INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.




Unsere Partner:

DIAdem-Forum.de Partner

DIAdem-Forum.de Partner






Stellenangebote:
Senior Softwareentwickler/in
Westliches Ruhrgebiet

Ingenieur/in Fernüberwachung
Westliches Ruhrgebiet

Berater und SW-Entwickler (m/w) für 3D-Erfassung/-Visualisierung/-Druck
Ulm

Applicationsingenieur (m/w) Testsysteme Central IE Prozessentwicklung
Frankfurt am Main

Entwicklungsingenieur (m/w) Auslegung / Versuch für Elektromotoren
Frankfurt





.
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5

Zwei Kurven automatisiert übereinander legen
25.11.2010, 12:44,
#1
DIAdem-Version: 11.0
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: 2010
Zwei Kurven automatisiert übereinander legen

Einen schönen guten Tag zusammen Smile

Um es dazu zu sagen, ich arbeite erst seit 2 Monaten mit DIAdem.
Bisher habe ich mich, dank eures Forums und der DIAdem Hilfe, sehr gut zurecht gefunden.
Doch ich arbeite seit zwei Tagen an einem Problem, für das sich einfach keine Lösung finden will.
Deswegen hoffe ich auf eure Hilfe.

Das Problem ist folgendes. Ich haben diverse Daten aus einer Datenbank zur Verfügung, die ich über stored procedures auslese und automatisiert in das Datenportal lade.
Diese Daten sind logischer Weise gemessene Werte, die über einen Zeitkanal und einen Wertekanal verfügen.
Speziell geht es um ein Vibrationssignal, welches ich gerne in Abhängigkeit der Zeit über das selbe Signal legen würde.
Das heißt ich möchte Signal1 im Zeitraum (z.B.) 08:00:00 - 08:03:32 (hh:mmConfuseds) auf Signal1 im Zeitraum (z.B.) 06:51:37 - 06:55:09 legen.
An sich ist das auch noch ohne Weiteres möglich.
Die Schwierigkeit (jedenfalls in meinen Gedankengängen) liegt darin, dass dies nicht nur in Abhängigkeit der Zeit, sondern auch eines anderen Indikators (Kanals) geschehen muss.

Beispiel Aufbau Datenportal:
Gruppe: Auswertung
Kanal 1: Signal1 'Werte aus denen ich die beiden Kurven bilden möchte
Kanal 2: Signal2 'Kanal der als Triggerpunkt dienen soll, um beide Kurven exakt übereinander zu legen
Kanal 3: Zeit

Signal2 beinhaltet Werte von 0-10. Der Datentyp ist float64.
Signal2 läuft in einem bestimmten Zyklus immer das gleiche Muster ab.
Nehmen wir an, dass ein Zyklus ca. eine Stunde dauert.
Währenddessen erhöht sich der Wert von Signal2 in festgesetzten Abständen um 0,5.

So genug erklärt, nun direkt in meine Problematik:
Ich möchte den exakten Punkt finden, zu dem sich Signal2 (unter Angabe eines bestimmten Zeitraumes) das letzte Mal um mindestens 0,5 erhöht hat und wann es sich das nächste mal erhöht (falls diese Werte vorhanden).
Dann ein/zwei/drei Zyklen zurück rechnen, den gleichen Wert von Signal2 (bzw. dessen Beginn) finden und auch da den Zeitpunkt merken.

Nun möchte ich Signal1 zum aktuellen Zeitpunkt mit Signal1 zum Zeitpunkt 3 Zyklen zuvor übereinander legen, in Abhängigkeit von Signal2 und der gemerkten Zeitpunkte.

Nur leider weiß ich nicht, wie ich das automatisiert realisieren soll. Ich hoffe ich konnte euch ein wenig erklären, worum es sich genau handelt und ihr versteht meine Problematik.
Weiterhin muss ich mich noch entschuldigen, dass ich nur mit Beispielen arbeiten kann, da alle Informationen vertraulich sind.

Grüße und einen großen Dank vorweg, wenn ihr euch die Zeit nehmt mir zu helfen Smile

Antworten
30.11.2010, 08:11,
#2
DIAdem-Version: 2011 und 2012 und auf alten CD's runter bis 3.0
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: 1996
RE: Zwei Kurven automatisiert übereinander legen

Hallo noVuz,
Du hast Dein Problem zwar umfassend erklärt, ich kann es leider trotzdem nicht 100%ig überblicken Big Grin...
Ich geb Dir einfach mal einen Startpunkt...

Code:
Dim Signal2, i
set Signal2 = Data.Root.ChannelGroups("NoName").Channels("Test")

for i = 1 to Signal2.Size-1
  if Signal2(i+1) >= Signal2(i) + 0.5 then
    msgbox i
  end if
next
Gruß
Bruno

DIAdem 2012
Antworten
01.12.2010, 11:05, (Dieser Beitrag wurde zuletzt bearbeitet: 01.12.2010, 11:09 von noVuz.)
#3
DIAdem-Version: 11.0
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: 2010
RE: Zwei Kurven automatisiert übereinander legen

Vielen Dank Bruno,

Ich weiß das das Thema nicht gerade einfach zu überblicken ist Smile

Ich hab jetzt den Befehl ChnFindReverse() gefunden mit dem man vom Ende eines Kanals anhand einer Bedingung den ersten Wert findet, der dies erfüllt.
Um den richtigen Zyklus innerhalb des Kanals zu finden geh ich einfach so oft mit einer For-Schleife darüber wie benötigt.
Dann hab ich mir noch eine SQL-Abfrage geschrieben, die mir das Signal2 genauso ausgibt, wie ich es benötige.

Jetzt hab ich nur noch ein Problem.
Und zwar ist das Signal2 als float64 abgelegt. Per SQL-Abfrage kann ich diesen Wert relativ leicht auf eine Dezimalstelle gerundet in das Datenportal einlesen lassen.
Signal1 kann aber nicht gerundet eingelesen werden.

Gibt es in DIAdem einen Befehl, der bestimmte Werte (die ich gerundet benötige) auf eine Dezimalstelle rundet? Oder muss ich mir selber eine Prozedur schreiben?

Antworten
02.12.2010, 08:17,
#4
DIAdem-Version: 2011 und 2012 und auf alten CD's runter bis 3.0
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: 1996
RE: Zwei Kurven automatisiert übereinander legen

Hallo niVuz,
das geht am besten mit dem Taschenrechner. Wobei ich nicht hundertprozentig sicher bin, was DIAdem da macht Big Grin...
Eigentlich sollte DIAdem standartmäßig die VBS Syntax (ab Version 11) benutzen, VBS Round kann die Anzahl der Nachkommastellen ändern.
Aber nur DIAdem Round kann wohl einen ganzen Kanal verarbeiten...

Code:
Call FormulaCalc ("Ch('Group2/Result'):= Round ('Group1/Input'*10)/10")
Gruß
Bruno

DIAdem 2012
Antworten
02.12.2010, 10:57,
#5
DIAdem-Version: 11.0
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: 2010
RE: Zwei Kurven automatisiert übereinander legen

Danke dir, die Funktion läuft und auch relativ schnell Smile

Ich komm meinem Ziel doch noch näher. Ich meld mich wenn ich mal wieder vor einer Hürde stehen.

Vielen vielen Dank noch mal.

Grüße

Antworten
06.12.2010, 11:14,
#6
DIAdem-Version: 11.0
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: 2010
RE: Zwei Kurven automatisiert übereinander legen

Ok ich bin fast am Ziel Smile
Aber eine Hürde liegt noch vor mir.
Ich bekomme beide Kurven nahezu perfekt übereinander gelegt, doch genau da liegt das problem - nur nahezu.

Und zwar sekundengenau... Ich bräuchte es aber millisekundengenau!
Die Daten liegen als Zeitformat im Millisekundenbereich vor, nur meine Funktion die ich derzeit verwende:
"Datediff"
kann anscheinend maximal Sekunden bearbeiten.

Ich müsste eine Zeit von der anderen substrahieren. Gibt es da noch eine weitere Methode um genauer, als eine Sekunde zu arbeiten?

Grüße

Antworten
08.12.2010, 13:40,
#7
DIAdem-Version: 11.0
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: 2010
RE: Zwei Kurven automatisiert übereinander legen

ok das Problem hat sich gelöst... Smile

hat jemand vllt eine ahnung warum:
Start_Zeile = ChnFind("Ch(""[1]/Zeit"")>=dtStartTime.X.Value")

nicht funktioniert?
Ich möchte den Wert der in dtStartTime.X.Value mit dem Zeitkanal vergleichen und sobald die korrekte Zeile gefunden wurde diese in Start_Zeile abspeichern.

Grüße

Antworten
08.12.2010, 16:06,
#8
DIAdem-Version: 11.0
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: 2010
RE: Zwei Kurven automatisiert übereinander legen

ok hab es selber gelöst Smile

Code:
R5=dtStartTime.X.Value
Start_Zeile = ChnFind("Ch(""[1]/Zeit"")>="&R5,1)

und schon funktioniert es!

Antworten


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Kurven "reparieren" (Setzen durch Schraubverbindung) embee83 5 7.110 14.01.2015, 13:36
Letzter Beitrag: Carpe_DIAdem
  ChnFind Werte zwischen zwei Variablen stellan 0 3.293 19.04.2014, 13:50
Letzter Beitrag: stellan
  Vergleich zweier Kurven selim42 1 4.470 24.05.2013, 20:16
Letzter Beitrag: MichiR
  mehrere Kurven in Report übertragen d.m. 0 5.956 20.12.2011, 08:01
Letzter Beitrag: d.m.
  Kurven übereinander legen commander731 2 4.711 26.09.2011, 08:17
Letzter Beitrag: commander731
  Kurven einfügen und bearbeiten? Harald789 4 4.669 16.09.2011, 07:28
Letzter Beitrag: grisu
  Schnittpunkte von Kurven nitni 4 4.869 15.04.2011, 10:20
Letzter Beitrag: nitni
  [ERLEDIGT] txt-Daten aus dem Navigator ins Datenportal automatisiert importieren dim_ka 3 5.311 21.01.2011, 09:04
Letzter Beitrag: Bruno
  [ERLEDIGT] Zwei Kanäle dividieren, in Abhängigkeit von drittem Kanal speichern kwakz 1 3.668 20.09.2010, 11:47
Letzter Beitrag: Bruno
  Zahlenwerte eines Kanals mit zwei Nachkommastellen edi 1 5.434 02.09.2010, 08:50
Letzter Beitrag: voyager

Gehe zu: