DIAdem-Version: 11.2 DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 2011
Beiträge: 3
Themen: 1
Registriert seit: Aug 2016
Doppelte Hysteresekurve Min und Max
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?
DIAdem-Version: 12 DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 2006
Beiträge: 3
Themen: 1
Registriert seit: Apr 2010
RE: Doppelte Hysteresekurve Min und Max
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
DIAdem-Version: 2017 Beta2 / seit 4.0 dabei DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 1996
Beiträge: 65
Themen: 18
Registriert seit: Mar 2010
RE: Doppelte Hysteresekurve Min und Max
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" ;-)