Diadem- Schleife

OP #3403195
Lesenswert?
• ▲
▼
Hallo,
ich versuche momentan ein Skript in Diadem zu pflegen, das mir die 
Minimumwerte in einem Zeitkontinuierlichen Signal(Spannungseinbrüche 
wegen mehreren Autostart) ermittelt. Der Code funktionniert nicht. Kann 
mir jemand sagen warum. Ich wäre super dankbar für jede Hilfe. Den CODE 
habe ich reichlich mit Kommentare versehen:

DIM Num_C(100), zaehl, start, peak_index I
start       = 1     ' Initialisierung: Anfang des ersten Startvorgangs
peak_index  = 1     ' Initialisierung: Annahme für das erste Minimum
Num_C(1)  = CNo("Spannung")
Num_C(2)  = CNo("Time") '1KHz Spannungsmessung
Num_C(3) =  CNo("PeakY")
Num_C(4) =   CNo("PeakX")
Num_C(5) =  CNo("Motor_laeuft") '(=0 Motor AUS)
                               '(=1 Motor AN)

        I=ChnLength(Num_C(4))

        FOR zaehl = 1 TO I
 IF (chd(zaehl,Num_C(4))-chd(start,Num_C(4))) <0.5 THEN 
'Betrachte nur Minima innerhalb eines kurzen Zeitraums/Startvorgangs
' Finde abs. Minimum im Zeitraum.
            IF (chd(peak_index,Num_C(3)) > chd(zaehl,Num_C(3))) THEN
              chd(peak_index,Num_C(3))= NOVALUE
              peak_index               = zaehl
            ELSE
              chd(zaehl,Num_C(3))     = NOVALUE 
' Lösche/markiere lokale Minima.
            END IF

          ELSE 
' Starte je Suche in weiterem Zeitraum von Neuem.
            start       = zaehl
            peak_index  = zaehl
          END IF
        Next

        FOR zaehl = 1 TO L1
          IF chd(zaehl,Num_C(3))= NOVALUE THEN 
'Sofern y-Wert mit NOVALUE markiert wurde,
            chd(zaehl,Num_C(4))= NOVALUE 
'setze nachträglich auch Zeit-Werte zu NOVALUE.
          END IF
        Next

        ' NOVALUES löschen...
        CALL ChnNovHandle("PeakX","PeakY","Delete","XY",1,0,0)


        ' Alle gefundenen Peaks betrachten:
        FOR peak_index = 1 TO ChnLength("PeakX")

'Nächststehenden Zeitpunkt des Peaks in der 10Hz-Domäne finden:
          zaehl = Find( "abs( Ch(""Daten_L_10Hz: Time"") - " & 
str(CHV(peak_index,"PeakX")) & " ) < 0.1 ")


'Diejenigen Peaks löschen, bei denen Motor_laeuft = 1 gültig ist
           IF chd(zaehl,Num_C(5))=1 THEN
          chd(peak_index, Num_C(3)) = NOVALUE

        ELSE
'Berechnung zwischen letztem "Motor-geht-Aus" und aktuellen "PeakX".
            start= zaehl 
'Von PeakX rückwärts zählen bis zu Zeitpunkt, an dem Motor aus geht
            IF start>1 THEN
              WHILE (chd(start-1,Num_C(5))=0) AND (start > 1)
                start = start -1
              WEND

            END IF
           END IF
        Next

         ' NOVALUES löschen...
CALL ChnNovHandle("PeakX","PeakY","Delete","XY",1,0,0)
OP #3403272
Lesenswert?
• ▲
▼
Die Ausführung des Skriptes ergibt "Gruppen" von Minimas innerhalb von 
Zeitintervallen. D.h.
20s...21s--->3 Minimas
90s...91s--->3 Minimas
.
.
.
Bis Ende der Zeitaxe Num_C(2) = CNo("Time")
Was ich aber gerne bräuchte ist "ein" Minima. Dafür braucht das Program 
nach dem es die Minimumwerte ermittelt hat noch eine Methode die mir den 
kleinsten Minima in den einzelnen Zeitintervallen sucht. Jemand eine 
Idee?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.