Beiträge von aybabtu

    Wie schaut es mit dem "Excel-Kit" aus?

    Funktionsliste: Dateien, Import/Export > Excep (Erweitert)

    Hier gibt es passende Funktionen zum Schreiben von Datenblöcken.

    z.B.: XlSetValues( "B2", 0, channel1, 0)


    Bei FileSave kannst du auch eine Export-Vorlage auswählen.

    Allerdings würde er hier die Datei komplett neu-erstellen und hat nicht die Option des "Reinschreibens".

    Welche FAMOS-Version nutzt du?

    Bringt der Befehl "FileSave" bessere Performance?

    Gibt es mehr Informationen zu dem Fehler 1004, z.B. einen Fehlertext?


    Was heißt für dich "nach sehr langer Zeit"?

    Um wie viele Samples handelt es sich bei den Daten?


    Wie genau sieht dein Schreiben der Kanäle denn aus?

    "Öffnen - jeden Kanal schreiben - Schließen" oder "Für jeden Kanal: öffnen, schreiben, schließen" oder, oder, oder?

    Hallo und willkommen im Forum :-),


    Vorab: Welche Editon hast du von FAMOS? (Enterprise, Professional, Standard, Reader)?

    Welche Abtastzeit haben deine Messdaten und wie viele Samples liegen vor bzw. wie ist die Messdauer?


    1a) Sind die Daten äquidistanz? Laut Q2 ja.
    Ich wundere mich nämlich gerade über das "Delta_T", welches bei äquidistanzen Kanälen immer gleich wäre.

    1b) Was denn für Spalten? Spalten gibt es für mich in einer Tabelle und dort rechne ich nicht mit Messdaten, sondern nutze diese zum Darstellen von Ergebnissen. Sicher können dann hier auch die Messdaten selbst stehen.

    Ansonsten habe ich in FAMOS Variablen, z.B: normale Datensätze (Kanäle). Mit denen kann ich auch rechnen.

    Bin nur gerade etwas verwirrt.

    Wenn du Messdaten in einer Tabelle hast, würde ich mir diese nach FAMOS holen (ASCII/EXCEL-Import-Assistent); dort verrechnen und die Ergebnisse wieder als EXCEL speichern. (Hier sagtest du ja aber, dass die Zeilen in EXCEL dafür nicht reichen... dachte, das war einmal...)

    Mir kommt es so vor, als hättest du nur den Reader und keine Möglichkeit Sequenzen zu schreiben um Berechnungen durchzuführen.


    2) Was meinst du denn mit Zusammenfassen?

    Wenn du für jede Zeile etwas tust, hast du auch für jede Zeile ein Ergebnis.

    Zusammenfassen hieße für mich: abschnittsweise Rechnen (Intervalle, etc)

    Irgendwie verstehe ich das noch nicht so richtig. :-D


    3a) Daten aus Tabelle nach FAMOS holen. Dort Runden und wieder zurückschreiben.

    Wenn es nur um die Darstellung geht, so kann EXCEL das auch.


    3b) Von welcher Tabelle redest du? Meinst du den Datensatzeditor?

    Markieren dort ist etwas heikel; hier kann ich dir gleich noch was zu schreiben.

    STRG+M -> Spalte wird markiert

    SHIIFT+PfeilRechts

    In der for-Schleife...

    was genau soll "A" sein? -> CurrentSegment


    Warum wird dann eine weitere Schleife von 1 bis der Längendifferenz gebildet?

    Ich dachte, die Abschnitte sollten jeweils mit einem anderen Signal verglichen werden.

    Hier kenne ich aber den Anwendungsfall nicht.

    Ebenso ändert sich die Längendifferenz während der inneren Schleife nicht.

    Daher würde ich eine weitere Zeile

    deltaSignalLength = lang?(Messung) - lang?(A) einführen.


    TeilStart = posi(A, A[i]) ist nichts anderes als i*xdel?(A) bzw. die aktuelle Zeit -> currentTime

    DeltaT: hier kann ich kein 'delta' erkennen. Es ist "fast" die zeitliche Dauer des Signals -> duration


    Okay, mit den beiden zeitlichen Punkten zerschneidest du das andere Signal.

    Teil -> measurementSegment


    Erg -> CoefficientName


    Warum wird dann TeilStart auf DeltaT gesetzt?

    Es wird nicht am Anfang der Schleife abgefragt, sodass ein "verrücken" notwendig wäre.

    Ebenso sehe ich nicht, dass es im folgendem Verlauf benutzt wird.


    Alles in allem würde ich die Variablennamen überdenken, damit klar ist, wofür diese Variable da ist.

    Zitat

    es funktioniert nicht..noch nicht wie erhoff.!

    Was genau ist dein Ziel bzw. deine Erwartung und was genau ist das Ergebnis?
    Wenn Fehler auftauchen, wie lautet die Meldung?


    Falls nicht geschehen würde ich das Zerteilen in Abschnitten in einer Untersequenz durchführen.

    Das macht den Code übersichtlich.

    Wenn deine Edition es nicht umfasst, müsstest du das Kit entsprechend kaufen.

    In älteren Versionen muss es noch "registriert" (aktiviert) werden; u.a. müsste dies in den Optionen möglich sein.

    Bzw. unten links beim Reiter "Kits" müsste via Rechtsklick auch im Kontextmenü diese Auswahl zum Aktivieren vorhanden sein.


    Ggf. sollte dann hier auch über ein Update auf die neuste Version nachgedacht werden.

    Deine ist sicher noch eine 6.x oder gar älter.

    Was genau meinst du mit "verkürzt" darstellen?

    Du kannst auf der x-Achse einen Bereich auswählen, der dargestellt wird bzw. in einen bestimmten Bereich zoomen.

    Was heißt für dich "ein Bereich, wo sich nichts ändert"? Meinst du damit einen konstanten Verlauf?

    Ist eher ein allgemeines Problem als ein FAMOS-Problem.


    Die Frage ist, ob sich das Signal anhand anderer Kenngrößen segmentieren lässt, dann kann man mit den Segmenten weiterarbeiten.

    Wie sah das Originalsignal aus? (Ich gehe mal davon aus, dass wir hier die Ableitung sehen).

    Zeigen ist nur ein relativ simples Kommando.


    Ansonsten kannst du auch immer eine Kurvenfensterkonfiguration speichern und mit CwLoadCCV laden.


    Mit deinem Update hast du auch Recht:

    Mittels CwNewChannel lassen sich neue Kurven hinzufügen, vorher muss nur immer "Selektiert" werden.

    Das gilt dann auch für andere Elemente wie Achsen etc. (CwSelectElement o.s.ä.)

    Weiteres siehe auch im Funktionszweig zu den Kurvenfenster-Funktionen.

    Gab es nicht bei "VarGetInit()" bzw. "VarGetInit2()" eine Option auf den Typ? Leider wohl nicht.


    In Kombination mit VarGetName?() und DataFormat?() lässt sich sicher etwas machen. Sprich, auch wieder alles durchiterieren und das Datenformat abfragen.


    Woher kommen die Gruppen? Ggf. kann man hier schon bei der Benennung Abhilfe schaffen. Wäre dann allerdings kein "sicheres Pogrammieren".

    Klar, einfach durch die Gruppen-Elemente durchhangeln und daraus neue Variablen erzeugen sowie die alte Gruppe löschen:

    Code
    1. NumberOfChannelsInGroup = GrChanNum?( GroupVariable)
    2. for k = 1 TO NumberOfChannelsInGroup
    3. channelName = GrChanName?( GroupVariable, k)
    4. <channelName> = GroupVariable:[k]
    5. end
    6. del GroupVariable
    7. del NumberOfChannelsInGroup
    8. del k

    Ich schreib erstmal, was mir spontan einfällt ohne groß über Probleme nachzudenken:

    Linearer Bereich heißt, die erste Ableitung ist konstant; die zweite Ableitung ist 0. (hier sicher mit gewissen Toleranzen).


    1) Ist die Steigung immer die gleiche und bekannt?

    2) Wann ist es für dich "nicht-linear"? Also, ab wann ist eine Abweichung der Linearität? Bei einem Ausreißer?
    Gibt es hier eine Art "Tolentanz-Korridor"?

    3) Oder meinst du "Monoton steigend/fallend"? (nur um Missverständnisse zu vermeiden)

    Wie funktioniert denn die Funktion "Pulse"? --> Diese zählt die Schwingungen um die y-Achse.


    Durch Abziehen des y-Offsets (Startwert) erreichst du das nicht.

    Da kann ich verstehen, wenn die Funktion zwei Wechsel findet.

    Der Mittelwert würde schon mehr Sinn ergeben. Aber auch hier erreichst du dein Ziel nicht.


    Du müsstest einen Drift/Trend oder gleitenden Mittelwert abziehen, bei dem die Fensterbreite größer als die Schwingungsbreite ist.

    So stell ich mir das gerade im Kopf vor.


    Wenn du dein Signal als "grob" glättest, erhälst du eine Trendlinie ohne große Schwingungen.

    Wenn du diese dann abziehst, hast du ein Schwingungssignal um die 0-Linie herum.


    Darauf kannst du dann die Funktion Pulse anwenden.

    Ich denke, solange du keine konkrete Beschreibung hast, was du als eine Schwingung ansiehst, wird es schwer.

    Du kannst natürlich das Signal glätten und nach Vorzeichenwechsel in der ersten Ableitung suchen.

    Sicherlich kann hier das Entfernen des Drifts/Trends auch behilflich sein.


    Ansonsten denke ich, dass die Funktion "Pulse/Peaks" schon vernünftig ist.


    Hast du einen Offset (Einzelwert) subtrahiert oder ein Driftsignal?

    Sprich: Wie sieht das Signal nach dem Entfernen aus?

    Bitte schau doch mal in die Kanal-Eigenschaften beider Kanäle. Was steht da bei Trigger-Zeit, X0 und X-Delta.


    Fehlende Werte mit 0 auffüllen würde ja das Signal verändern.

    Wie gesagt, du kannst die zeitlichen Informationen (x-Offset und Triggerzeit) ja in einer Sequenz setzen.

    Wie sieht denn das Kurvenfenster aus, wenn du die Zeit-Achse auf "Relativ" stellst? Somit müssten beide Datensätze bei 0 beginnen.

    Ansonsten kannst du mit "xoff" den x-Offset/zeitlichen Offset eines Kanals setzen.


    Die Frage ist ja auch, ob wirklich die Trigger-Zeitpunkte/Startzeiten unterschiedlich sind oder es nur einen zeitlichen Offset gibt.

    Die Triggerzeit kannst du mit "SetTime" setzen.

    War unglücklich von mir formuliert.

    End-Time ist der absolute Zeitpunkt, also die Zeit von Start bis Ende.

    Folglich müsstest du den Trigger-Startzeitpunkt drauf addieren.


    Code
    1. t_start = Zeit?(channel1)
    2. t_duration = leng?(channel1) * xdel?(channel1) + xoff?(channel1)
    3. t_stop = TimeAdd(t_duration, t_start)
    4. txt_start = TimeToText(t_start, 3)
    5. txt_stop = TimeToText(t_stop, 3)
    6. timeFormat = "{de}{T1:dd-MM-yyyy HH:mm:ss:fff}"
    7. txt_start2 = TxFormatEx(timeFormat, t_start)
    8. txt_stop2 = TxFormatEx(timeFormat, t_stop)

    Achtung: Bei TimeToText wird nur bis auf ganze Sekunden angezeigt. Daher ggf. TxFormatEx verwenden (ab FAMOS 7.2)

    Mit der Funktion Zeit?() fragst du den Triggerzeitpunkt eines Kanals ab.

    Der Start-Triggerzeitpunkt des Samples ist weiterhin der Startzeitpunkt des Kanals.

    Mal davon abgesehen hast du mit "Ch[i]" einen Einzelwert.


    Mit folgendem müsste sich der End-Zeitpunkt eines Kanals berechnen lassen.

    Code
    1. t_end = leng?(channel) * xdel?(channel) + xoff?(channel)


    Hinweis:

    Ich würde die Länge eines Kanals nicht mit "i" bezeichnen. "i" ist für mich ein Laufindex ohne große Bedeutung. Der Name "n_ch1" wäre besser.

    Ebenso ist "Ch1" kein schöner Name. Was ist "Ch"? Wenn es allgemein für einen Kanal stehen soll, dann wäre "channel1" besser.