Beiträge von aybabtu

    013 ist das ASCII-Zeichen für einen Zeilenumbruch (Carriage Return)


    Das ist übrigens kein Minuszeichen sondern eine Tilde (auf der + Taste).

    Irgendwie stellt das Forum (bei Zoomstufe 90%) hier die Tilde so seltsam da.

    Allgemein kannst du Stücke "herausschneiden":

    Code
    t_start = 0
    t_stop = 42
    
    part1 = Cut(signal, t_start, t_stop) ; Alternative: CutIndex

    Anhand von "SearchLevel" kannst du nach bestimmten "Kriterien" im Signal suchen.


    Wenn die Abschnitte im Signal alle gleichlang sind, können Segment-Funktionen helfen, glaube "SetSegLen" wäre da ein Kandidat.

    Ich kenne es von anderen Editoren so, dass du bei gedrückter Alt-Taste Bereiche markieren kannst und wenn du dann tippst, fügt er es in jeder Zeile des Markierungsbereichs ein. Hier kannst du auch einfach nur einen senkrechten Strich (ohne Zeichen) markieren.

    Das wurde auch in FAMOS ab Version 7.?? hinzugefügt.

    Somit lassen sich beliebige Texte vor den markierten Zeilen einfügen oder entfernen.


    Wenn es dir um das Auskommentieren geht, so wurde ja schon eine Lösung genannt.

    Auf welche Weise möchtest du diese Vergleichen? Mathematisch? Grafisch?

    Wieso willst du die Abschnitte verschieben?


    Sind die Abschnitte (innerhalb eines Kanals) immer gleich groß? Dann könnte es helfen die Signale zu segmentieren.

    Das "Excel-Kit" ist auch schon sehr mächtig und erlaubt weitreichende Zugriffe auf Excel.

    Diese sind in der Funktionsliste oder via Suche zu finden:


    Dateien, Import/Export > Excel

    Dateien, Import/Export > Excel (erweitert)


    Dort kann man Excel starten, eine Datei öffnen, auf ein Arbeitsblatt zugreifen sowie auf einzelne Zellen oder Zellbereiche.

    Ist es eine Tabelle oder sind es spaltenweise verschiedene Messdaten/physikalische Größen?

    Ich würde die Daten erstmal in FAMOS laden (ASCII-Import-Assistent beim Datei-Typ auswählen).

    Anschließend kannst du Datensätze mit der Funktion "sum" (oder "Summe") aufsummieren.

    Warum holst du die Werte mit "MatrixGet" ?

    Warum gehst du nicht über den normalen Index?

    Hast du mal das "h" und die 1 bzw. das "a" und die 1 getauscht?


    Code
    singleValue = dataset[i]


    Zu den Begrifflichkeiten.

    In imc FAMOS haben wir "normale Datensätze", welches in der Regel Kanäle sind. Man könnte diese als Vektoren bezeichnen. Dieser normale Datensatz hat die y-Werte in äquidistanten x-Abständen (idR Zeit) vorliegen. Daher werden hier (intern) auch nur die y-Werte und die Abtastzeit gespeichert. (Hinzu kommt noch ein x-Offset).

    Das Wort "Tabelle" ist irritierend und könnte eher auf "segmentierte Datensätze" passen, die z.B. aus einer FFT mit gleitendem Fenster über das Signal entstehen.


    Performanter könnte man dein Bespiel auch so machen, dass man den Datensatz verschoben von sich abzieht und Nullen sucht.


    Code
    d1 = cutIndex(dataset, 1, N-1)
    d2 = cutIndex(dataset, 2, N)
    d = d2-d1
    ; PosiEx, SearchLevel, etc. to find "d = 0"


    PS.: Ich weiß nicht, welche FAMOS Version du nutzt, aber es gibt schon etwas länger die "FOR"-Schleife.

    Das Symbol sieht anders aus, weil es XY-Datensätze sind. Die zeitlichen Abstände sind nicht zwangsweise gleich.

    Man könnte auch mit XYdt einen äquidistanten Kanal daraus machen.


    Allgemein kann man auch einfach abfragen, welche Daten oberhalb einer Schwelle liegen und das Aufsummieren, multipliziert mit der Abtastzeit.


    Code
    block20 = 20 < temperature AND temperature <= 30
    t_20 = sum(block20) * xdel?(temperature)


    Für die 1°C Bereiche wäre natürlich eine Schleife besser. Hier müssten aber die Namen automatisch generiert werden.

    Code
    ; whereas i_loop is the counter of the FOR-loop; you can also use STEP 10 for other blocks
    blockName = "block_" + Tform(i_loop, "")
    timeName = "t_" + Tform(i_loop, "")
    
    <blockName> = i_loop < temperature AND temperature <= (i_loop + 1)
    <timeName> = sum(<blockName>) * xdel?(temperature)


    Mit den spitzen Klammern (< >) machst du aus dem Inhalt einer Textvariablen eine Variable.

    Hallo und herzlich Willkommen in der Welt von imc FAMOS. :-)


    Wie liegen die Daten vor? Famos-Datei, CSV, ...

    Wie liegen die Daten in FAMOS vor?

    Oder ist es ein normaler Datensatz der Temperatur? (äquidistante Zeitbassis)


    Möchtest du nur eine Darstellung oder wie sollte sich das gestalten?

    Möchtest du nur eine Gesamtzeit wissen? Oder möchtest du alle Zeitintervalle der Temperatur von 10°C - 20°C haben?

    Eine Schwierigkeit wird auch sein, was mit den Grenzwerten ist. Also offenes oder geschlossenes Intervall.


    Man könnte natürlich mit einem Mittelwertfilter über das "Zeit-Temperatur-Signal) drüber gehen.


    Wenn es ein Temperatur-Signal ist, kannst du dir auch mit "SuchePegel" die Start und Endpunkte suchen und daraus die Differenzen bilden.

    Wird nur schwer bei doppelten Intervallen die richtig zuzuordnen, man müsste ja dann die Zeiten entsprechend aufaddieren.


    Mit den Intervall-Funktionen habe ich noch nichts gemacht, aber die könnten ggf. auch interessant sein.

    Ich habe bei mir ein Import-Filter für MDF4 und ein Export-Filter für RPC3.


    Die Dateien per Hand oder mit FileLoad und dem MDF4-Format laden und die Variablen per Hand oder mit FileSave wieder speichern.

    Bei den File-Befehlen wird als Parameter das entsprechende Filter angegeben. -> Funktionsassistent oder Autovervollständigung nutzen.


    Welche FAMOS-Version nutzt du? Nur für den Fall, dass da noch eine 6 vor dem Punkt steht. ;-)

    Leider sehe ich in der Funktion "SetOption" keine Möglichkeit.


    Die Einstellung wird wohl in der Registry gespeichert. Zumindest finde ich da den Schalter und den Pfad wieder.

    Du müsstest somit eine *.reg Datei erstellen, die ausgeführt werden muss; wenn die IT das zulässt.
    Alternativ "Mini"-Programm schreiben, welches das tut und in Famos per "Execute" ausführen. Aber auch hier ist fraglich, wie das mit den Admin-Rechten ist.


    Reg-Pfad: HKCU\SOFTWARE\imc Measurement and Control\Default\Famos\Defaults\

    FileFilterSync

    FileFilterSyncFolder64

    Hallo Roland,


    welche Version von "imc FAMOS" benutzt du?

    Wie lange dauert es mit dem "FileLoad"-Befehl?

    Welche Optionen hast du beim "Import" ausgewählt? (z.B. im Datei-Öffnen-Dialog beim Laden von Variablen oder direkt in den Optionen bei den Importfiltern) -> ggf. macht hier "Vector CANape" etwas anders.


    Falls alles nicht gewinnbringend ist, kontaktiere die Hotline von imc Test&Measurement (hotline@imc-tm.de).

    Wird dann nur herausfordernd einen Beispieldatensatz zu übermitteln.

    Okay,

    na die Perioden haben doch eine feste Breite.

    Also kennst du doch die jeweiligen x-Werte


    Code
    i * periodWidth + x


    Bzw. kannst du dir mit dem "perio" Befehl ja auch die einzelnen Perioden holen.

    Und dann kannst du dort wiederum mit Value dir den x-Wert holen. Hier musst du nur auf den x-Offset aufpassen.

    Was genau meinst du mit "zwei Werte Spalten"?

    Dein Beispiel-Datensatz ist segmentiert und ich konnte die MatrixIPol-Funktion (technisch) darauf anwenden.

    Erweitert wurde die Matrix (bei meinen Einstellungen mit "1,1") nicht, sie hatte noch die gleiche Größe. Du hast aber Recht, verändert man hier die Faktoren, erhält man eine größere Matrix.


    ABER nun erkenne ich aber das Problem.

    Bei o.g. Interpolation sind für ihn die "0"-Werte ebenfalls Stützstellen. Und es wird versucht zwischen den Stellen zu interpolirieren.

    Das möchtest du ja aber nicht.

    Die Frage ist, woher soll ein PC das wissen, dass für dich die "0 Werte" nicht relevant sind? ;-)

    Es gibt ja leider kein "NaN", welches "ignoriert" werden könnte. Denn 0 ist ja ein Wert.


    Ansonsten hätte ich ja noch vorgeschlagen, via "FOREACH" jedes Segment einzeln zu interpolieren.


    Wie ist denn dieser Datensatz entstanden? Woher stammen die 0 Werte?
    Und was soll an den Rändern passieren? Die würden dann ja 0 bleiben, da der erste Wert "irgendwo" ist.


    Mir würde spontan nur einfallen jedes Segment einzeln zu nehmen.

    Das Segment dann in einen XY-Datensatz zu bringen und diesen zu interpolieren, zu resamplen und in eine Ergebnismatrix zurückzuschreiben.


    Das alles ergibt natürlich nur Sinn, wenn deine Interpolation segmentweise möglich ist.
    Es klang aber eher, dass du eine 2D-Interpolation möchtest, er also auch die "andere Richtung" berücksichtigen soll.


    Alles in allem ist mir die Deutung des Ergebnisses auch nicht klar - ich komme aber nicht aus der Mechanik-Ecke.


    Ansonsten kannst du natürlich dich auch an die hotline von imc wenden:
    Auf der Webseite http://www.imc-tm.de gibt es einen "Sofort-Kontakt" (Telefon/Mail)

    Manchmal haben die ja sowas auf Lager. Oder haben noch andere Ideen.
    Beschreibe da aber genau, was du machen willst. ;-)

    Es gibt die folgenden Funktionen speziell für Matritzen/segmentierte Daten:


    MatrixFromLine(,,,)

    MatrixIpol(,,,)


    Ansonsten kann natürlich auch jedes Segment mit den vorhandenen Interpolationsfunktionen verrechnet werden.

    ---

    Welche Famos-Version hast du?
    Ggf. sind o.g. Funktionen erst in neueren Versionen vorhanden.

    Ebenso die Funktionssuchfunktion mit der man leichter die Interpolationsfunktionen finden kann.

    t_sample= Xdel?(channel) ; Abtastzeit für normale Datensätze

    Diff wäre die Ableitung der Werte...


    Wenn du allerdings einen XY-Datensatz hast, wird es etwas tricky.

    Aber hier würde ich einfach die x-Komponente nehmen, von 1 bis N-1 ausschneiden und vom Ausschnitt 2 bis N abziehen.