DIAdem-Forum - deutschsprachiges DIAdem Forum

Normale Version: Doppelte Hysteresekurve Min und Max
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute,

ich benötige Hilfe bei einer automatisierten Auswertung einer doppelten Hysteresekurve, Bild siehe Anhang.

Die Kurve besitzt 8 Extremstellen (blau markiert). Die Kurve besteht aus 25 einzelnen Kurven, die sich alle in einem Kanal befinden. Jede blau markierte Stelle besitzt also 25 Maxima oder Minima - je nachdem, um welche Stelle es sich handelt.

Meine Aufgabe besteht darin, die X- und Y- Werte aller Maxima/ Minima von allen 25 Kurven zu erfassen.
Sprich, ich brauche 25 x 8 Punkte.

Da die Erfassung aller Punkte sehr zeitaufwendig ist und ich mehrere solcher Kurven habe, brauche ich dafür ein Script.


Mein bisheriges Vorgehen: Ich habe zunächst händisch angefangen die Extrempunkte zu erfassen: Cursor Maximum/Minimum --> Flag setzten --> Flags in neuen Kanal kopieren

So ähnlich stelle ich mir auch die automatisierte Version vor.
Bisher habe ich jedoch nur herausgefunden, wie man Flags setzen kann: Call chnFlagSet (5,60,100, true)

Als unerfahrener DIAdem Nutzer mit Amateurmäßigen Programmierkenntnissen komme ich nun nicht weiter.
Wie erfasse ich NUR die Maxima/Minima aller Kurven in den gewünschten Stellen?
Optional:
Wie lege ich diese Maxima/Minima in einen Kanal je Extremstelle ab?
Hier noch eine Detailansicht von einem Extrempunkt.
Habe mir überlegt, es möglicherweise so umzusetzen:

1. Bereich eingrenzen, in dem Extremstellen liegen
2. Abfrage, ob Maxima oder Minima vorhanden
3. Wenn Abfrage true setze Flag

Kann mir jemand helfen, wie ich das programmiere?
Hallo,

ich habe vor geraumer Zeit mal ein ähnliches Problem gehabt. Ich hatte einen Sägezahn und wollte von dem alle Maxima und Minima haben.
Ich habe das eher "simpel" gelöst. Ich bin den Kanal Wert für Wert durchgegangen und habe den aktuellen Wert immer mit fünf Werten davor und danach verglichen. Wenn z.B. alle Werte davor und danach kleiner Waren habe ich den Wert als Maxima in einen extra Kanal gespeichert. Mit den Minima natürlich umgekehrt. Weiß nicht ob das der einfachste Weg war, aber es hat funktioniert.
Ich weiß noch, dass ich etwas mit der Anzahl der vergleichenden Werte herumspielen musste (also ob fünf oder mehr) um eine Sichere Aussage zu erhalten. Das hängt bei dir von der Anzahl der Werte ab. Du musst halt aufpassen das du bei dir mit einem solchen Verfahren nicht die "Plateaus" mit erkennst.
Ich kann mal schauen ob ich das Skript dazu noch finde. Schick mir mal ne PM mit deiner Email-Adresse, dann schicke ich dir das zu.

Ansonsten wie man das mit Flags etc. löst kann ich nicht sagen.
Gruß
Tobias
Moin,

wie's aussieht, scheinen die Kurven ja alle recht definiert zu sein. Wenn Du die Teilbereiche, in denen jeweils ein Minimum und Maximum auftritt, in die jeweiligen Zeilen aufteilen kannst - versuch's mal damit:

Code:
Dim Kurve, i, j, Block(4), ErgebnisN, ErgebnisW
Kurve = Data.Root.ChannelGroups(1).Channels("Name der Kurve").Name
Set ErgebnisN = Data.Root.ActiveChannelGroup.Channels.Add("Ergebnis Name",DataTypeString)
Set ErgebnisW = Data.Root.ActiveChannelGroup.Channels.Add("Ergebnis Wert",DataTypeFloat64)

'-- vier auszuwertende Blöcke bestimmen, mit je einem Min und Max
Block(1) = "1-2500"
Block(2) = "2501-5000"
Block(3) = "5001-7500"
Block(4) = "7501-10000"

For i = 1 To 22
  StatSel(i) = "No"
Next
STATSEL(4)       ="Yes"   'Min rechnen
STATSEL(5)       ="Yes"   'Max rechnen
STATCLIPCOPY     =0
STATCLIPVALUE    =0
STATFORMAT       =""
StatResChn       =0
For j = 1 to 4
  Call STATBLOCKCALC("Channel",Block(j), Kurve)
  ErgebnisN.Values(j*2-1)="Maximum "&j&":"
  ErgebnisN.Values(j*2)="Minimum "&j&":"
  ErgebnisW.Values(j*2-1)=StatMax
  ErgebnisW.Values(j*2)=StatMin
next

Geht vielleicht auch eleganter, aber das hier war mal "so eben schnell" ;-)

Gruß
Yeti