Formelinterpreter 1 - Einführung

Mit dem Formelinterpreter können einer Messdatendatei (NC-Datei) zusätzliche Kanäle zugefügt werden (Rechenkanäle). Beispiel: Enthält eine Datei die Kanäle n_Motor und Md_Motor, kann mit Hilfe des Formelinterpreters der Kanal Leistung = (n_Motor * Md_Motor) / 9549.3 erzeugt werden.

Falls Messdaten der Kanäle n_Motor oder Md_Motor geändert werden, kann der Formelinterpreter die abhängigen Kanäle aktualisieren.

Bei MDF-, Famos- oder ASAM-ODS-Daten können innerhalb einer Formel Kanäle mit unterschiedlicher Anzahl Datenpunkte verwendet werden. In diesem Fall werden die Kanäle durch lineare Interpolation auf die Auflösung des ersten in der Formel auftretenden Kanal interpoliert. Der Ergebniskanal wird dann zur Zeitgruppe des Kanals zugefügt, der die höchste Anzahl an Datenpunkten besitzt. Falls in einer Formel ein Zeitkanal verwendet wird, z. B. integral(time, mstrom), wird automatisch der Zeitkanal der Zeitgruppe ausgewählt, zu dem der Kanal mstrom gehört. Der in der Formel angegebene Zeitkanal (z. B. time oder time21) muss in der Datendatei existieren.

Bei allen anderen Datendateien muss die Anzahl der Datenpunkte aller in der Formel genutzten Kanäle identisch sein. Das Ergebnis der Berechnung ist ein neuer Kanal in der NC-Datei mit einer Punktanzahl, die der Punktanzahl der Messkanäle entspricht. Innerhalb von Formeln können globale Attribute der NC-Datei verwendet werden, z. B. Hubvol = 2000. Falls eine Formel keine Messkanäle enthält, wird die Kanallänge auf die Länge des ersten Kanals in der NC-Datei gesetzt (Kanal mit der dimid = 0).

Wenn Formeln definiert sind, die als Operanden wieder Rechengrößen enthalten, kann die Abarbeitung der Formelliste nicht wahllos erfolgen. Der Formelinterpreter erzeugt bei jeder Ausführung zuerst eine sortierte Formelliste. Am Anfang der Liste befinden sich nur Formeln, die aus Messgrößen berechnet werden können. Dann folgen die Rechengrößen, die wiederum Rechengrößen als Eingangsgrößen enthalten können, die schon weiter oben in der Liste enthalten sind. Formeln, die Messgrößen oder andere Formeln enthalten, die nicht berechnet werden können, bzw. nicht gemessen wurden, werden ignoriert.

Falls die NC-Datei einen Kanal enthält, der auch in der Formelliste vorhanden ist, wird der Kanal als Rechengröße behandelt, auch wenn er gemessen wurde.

Der Formelinterpreter setzt die Werte alle Kanäle, die berechnet werden können auf den Wert Missing, bevor die Formeln ausgewertet werden.

Die Funktionsweise des Formelinterpreters soll anhand von einfachen Beispielen gezeigt werden.

Beispiel 1:

Die Messdatei enthält die Kanäle mit den Namen M1, M2 und M3.

M1 M2 M3
1 5 2
2 6 2
3 7 3
4 8 3

Der Formelinterpreter kennt die Formelkanäle F1 und F2, die wie folgt definiert sind:

F1 = M1 + M2
F2 = F1 * M3

F2 ist von F1 abhängig und kann erst berechnet werden, nachdem F1 berechnet worden ist.

Der Formelinterpreter berechnet zuerst die Formel F1 und dann die Formel F2. Das Ergebnis der Berechnung ist dann:

M1 M2 M3 F1 F2
1 5 2 6 12
2 6 2 8 16
3 7 3 10 30
4 8 3 12 36

Falls der Messkanal M1 in der NC-Datei fehlt, kann die Formel F1 nicht berechnet werden. Wenn F1 nicht berechnet werden kann, wird auch F2 nicht berechnet. Wenn die Formeln nicht berechnet werden können, werden auch keine Kanäle in der NC-Datei angelegt. Die NC-Datei würde in diesem Fall wie folgt aussehen:

M2 M3
5 2
6 2
7 3
8 3

Für einen Formelkanal können mehrere alternative Formeln definiert werden.

Beispiel:

F1 = M1+M2 (F1_a)
F1 = M1+M3 (F2_b)

Bei dieser Art von Formeln wird genau eine Formel ausgewertet, um den Formelkanal zu berechnen. Welche der alternativen Formeln ausgewertet wird, hängt von der Priorität der Formel ab. Der Formelname, beispielsweise F1_a für die Formel F1 bestimmt die Priorität, da die Formeln alphabetisch sortiert werden. F1_a steht in der Formelliste deshalb vor F1_b und hat damit die höhere Priorität. Wenn beide Formeln berechnet werden können, wird die Formel F1_a ausgewertet und F1_b wird ignoriert. Falls F1 mit der Formel F1_a nicht berechnet werden kann, beispielsweise weil der Kanal M2 nicht vorhanden ist, wird F1 über die Formel F1_b berechnet. Für eine Rechengröße können mehrere alternative Formeln definiert werden. Siehe auch Alternative Formeln.

Es können auch alternative Formeln definiert werden, die rekordbasiert arbeiten. Dazu wird vor den Namen der Formel noch ein Dollar-Zeichen gesetzt. Bei diesem Formeltyp werden alle Formeln nacheinander ausgewertet. Die Formel mit der höchsten Priorität wird als erste Formel ausgewertet. Falls das Formelergebnis nach der Anwendung der Formel noch Missing-Werte enthält, wird die nächste Formel auf die noch nicht berechneten Records angewendet. Das wird mit allen alternativen Formeln wiederholt, bis alle Werte berechnet sind, bzw. bis alle alternativen Formeln abgearbeitet sind.

Beispiel für rekordbasierte alternative Formeln:

F1 = M1+M2 ($F1_a)
F1 = M1+M3 ($F2_b)

Beispiel-Daten:

M1 M2 M3
1 5 2
2 6 2
3 7 3
4 8 3

Ergebnis-Daten:

M1 M2 M3 F1
1 5 2 6
2 Missing 2 4
3 7 3 10
4 8 3 12

Bei diesem Beispiel werden die Formeln wie folgt ausgewertet. Die Formel F1_a berechnet die Rekords 1, 3, 4. Rekord 2 kann nicht berechnet werden, da M2[2] den Wert Missing enthält. Die Formel F1_b berechnet die Werte für F1 und trägt das Ergebnis für die Rekords in die Datei ein, die noch den Wert Missing enthalten. F1_b berechnet für den Wert F1[2] den Wert 4 und trägt das Ergebnis in die NC-Datei ein.

Alternative Formeln können nicht mit dem Formeleditor erzeugt werden. Sie können über eine Formeltabelle mit Hilfe von Excel definiert werden oder als UniScript-Datei erzeugt werden.

Ein Beispiel

  • Importieren Sie die Datei test1.xls aus dem Verzeichnis c:\Programme\UniPlot\Samples. Klicken Sie die Schaltfläche >>, um folgende Darstellung zu erhalten:

    ../../_images/nc-data-browser1-de.png
  • Klicken Sie mit der rechten Maustaste einen Kanalnamen an. In dem folgenden Menü wählen Sie den Befehl Formelkanal zufügen. Sie erhalten folgendes Dialogfeld:

    ../../_images/dateneditor-formula-dlg.png

    Geben Sie im Formel-Textfeld die folgende Formel ein:

    Power = (EngSpd * SAETrq)/9550

    Die Formel erzeugt den Kanal Power, der die Leistung berechnet.

  • Drücken Sie OK.

    Wenn Sie den neuen Kanal Power markieren und dann nochmal den Befehl Formelkanal zufügen wählen, können Sie die Formel ändern.

Beschreibung des Formel-Eingabe Dialogfelds

../../_images/dateneditor-formula-dlg.png
Gesicherte Formeln
Dieses Kombinationsfeld zeigt die letzten 128 Formeln an, die Sie eingegeben haben. Über die Schaltfläche Zufügen können Sie den Text in das Editierfeld übertragen und dort ändern.
Funktion

Zeigt die innerhalb von Formeln zulässigen Funktionen an. Um eine Funktion auszuwählen öffnen Sie die Liste und klicken auf die gewünschte Funktion. Die Funktion wird an der Cursorposition in den Formeltext eingefügt.

Eine Liste der vordefinierten Funktionen finden Sie im Kapitel Funktionen in Formeltabellen. Hier wird auch beschrieben, wie Sie neue Funktionen definieren können.

Kanäle

Zeigt die Kanäle der aktiven NC-Datei an. Wenn Sie aus der Liste einen Kanalnamen auswählen, wird der Name an der Cursorposition in den Formeltext angehängt.

Globale Attribute werden mit der Vorsilbe Attribut: sowie ihrem Wert an die Liste der Kanäle angehängt.

Falls Konstante definiert sind, werden sie am Ende der Kanalliste angezeigt.

Operatoren
In einer Formel können die Operatoren +, -, *, / verwendet werden. Klicken Sie auf die entsprechende Schaltfläche um den Operator an der Cursorposition in den Formeltext einzufügen.
Großes Editierfeld

Hier kann die Formel in der Form:

NeuerKanalName = Ausdruck

eingegeben werden. Die Formel beginnt mit dem zu erzeugenden Kanalnamen. Dem Namen folgt ein Gleichheitszeichen. Daran anschließend folgt der Formelausdruck. Leerzeichen innerhalb einer Formel werden ignoriert.

Falls der neue Kanalname mit einem Kanalnamen in der NC-Datei übereinstimmt, wird der Kanal in der NC-Datei überschrieben.

Weitere Informationen über Formeln finden Sie im Kapitel Definition von Formeln

SI-Einheit
Wenn die Option markiert ist, werden alle in der Formel verwendeten Kanäle vor der Berechnung in SI-Einheiten konvertiert. Das Formelergebnis wird in die im Element Einheit angegebene Einheit konvertiert. Dei verwendeten Einheiten müssen in der Einheitentabelle eingetragten werden, siehe Einheiten-Umrechnung.
Formel nur berechnen wenn
Es können Bedingungen definiert werden, die in diesem Kombinationsfeld angezeigt werden. Z. B. Diesel, Saug, TurboDiesel, TurboSaug. Falls die Bedingung nicht erfüllt ist, wird die Formel nicht berechnet. Siehe Definition einer Bedingung.
Missing-Value Behandlung
Nur bei bestimmten Sonderfällen sollten Sie diese Option abschalten. Beispielsweise, wenn Sie die Funktion replace_missing() verwenden möchten.
Einheit
Geben Sie den Einheiten-Text für den Kanal ein: (kW, 1/min,…). Die Einheit dient nur zur Information, Sie wird bei der Berechnung nicht berücksichtigt.
Kommastellen
Geben Sie die Anzahl der Nachkommastellen ein, mit der der Kanal angezeigt werden soll.
Beschreibung
Hier können Sie eine Beschreibung der Formel eingeben. Die Beschreibung erscheint in der Formelliste (Extras=>Formelliste).
Kommentar
Hier können sie einen Kommentar eingeben.
Formel registrieren

Wenn Sie diese Option nicht einschalten, wird die eingegebene Formel nur einmal ausgeführt. Die Formel wird im erzeugten Formelkanal in der NC-Datei gespeichert. Zum Bearbeiten der Formel markieren Sie den Formelkanal mit der rechten Maustaste und wählen im folgenden Menü den Befehl Formelkanal zufügen aus.

Wenn Sie diese Option einschalten, wird die Formel in die Formelliste eingetragen. Für die Formel wird im Formel-Verzeichnis eine Skript-Datei erzeugt. Die Datei hat den Namen der Formel mit dem Vorsilbe _fi_, gefolgt von dem Formelnamen, gefolgt von der Namenserweiterung .ic, z. B. _fi_Power.ic.

Die Datei wird im ersten Verzeichnis gespeichert, das im Dialogfeld Formel-Konfiguration eingetragen ist.

Alle Formeln aus einem Verzeichnis werden ab UniPlot R2016 in einer Librarydatei gespeichert. Die Datei hat den Namen formula.icl9. Die Library wird im Formelverzeichnis gespeichert.

OK
Mit OK wird die eingegebene Formel überprüft und die Berechnung ausgeführt. Falls die Formel einen Fehler enthält oder ein Kanalname unbekannt ist, wird eine Fehlermeldung ausgegeben. Korrigieren Sie dann den Fehler und drücken erneut OK.

Definition von Formeln

Eine Formel darf die folgenden Elemente enthalten:

  • Klammern (). Die Anzahl der Klammerebenen ist nicht begrenzt.

  • Die Operatoren +, -, *, /, **, also die 4 Grundrechenarten und Potenzierung. Als Potenzoperator kann anstatt ** auch das Zeichen ^ verwendet werden. Achtung: Anstatt ** oder ^ sollten Sie besser die Funktion pow() (siehe Funktionen in Formeltabellen) verwenden.

  • Zahlen der Form 1.23, 1e12, -13. Als Dezimaltrennzeichen ist nur der Punkt erlaubt (kein Komma).

  • Namen von gemessenen Kanälen bzw. anderen Formeln. Die Namen müssen mit einem Unterstrich oder Buchstaben (nur a-z und A-Z, keine Umlaute, kein ß) beginnen. Dem ersten Zeichen können Buchstaben, Ziffern und Unterstriche folgen. Groß- und Kleinbuchstaben werden unterschieden.

    Ab UniPlot R2013.11 können Formeln definiert werden, die für mehrere gleiche Kanäle verwendet werden können.

    Beispiel: Für jeden Zylinder eines Motors wird ein Drucksignal p_cyl_1 bis p_cyl_4 gemessen. Anstatt nun vier Formeln für jeden Ergebniskanal definieren zu müssen, kann nun eine Formel definiert werden die die Messstellen 1 bis 4 in der Form <c> im Variablennamen enthält. Der Name für die Druckkanäle ist dann beispielsweise p_cyl_<c>. Der Messstellenbezeichner <c> muss im Ergebniskanal ebenfalls vorhanden sein, beispielsweise: p_cyl<c>_smooth.

    p_cyl<c>_smooth = smooth(p_cyl_<c>)
    

    Es können Formeln mit bis zu drei Messstellenbezeichnern definiert werden. Ein Messstellenbezeichner beginnt mit einem Winkel < gefolgt von einem bis drei Kleinbuchstaben (a bis z), gefolgt von einem Winkel >. Messstellenbezeichner mit einem Buchstaben stehen für die Werte 1 bis 9. Zwei Buchstaben stehen für die Werte 01 bis 99. Drei Buchstaben stehen für die Werte 001 bis 999. Falls ein Kanalname mehrere Messstellenbezeichner enthält, sollten diese durch einen Buchstaben oder einen Unterstrich getrennt sein. Beispiel: Abgastemperatur eines Motor mit zwei Bänken: T<c>_b<b>. c könnte die Zylindernummer sein und b die Banknummer.

    Die in einer Formel auf der rechten Seite vom Gleichheitszeichen definierten Messstellenbezeichner müssen im Ergebniskanal ebenfalls auftreten:

    p_<c>_<i> = T<i> * X<c>
    

    Kanalnamen mit Messstellenbezeichnern können in der Einheitentabelle ebenfalls verwendet werden. Siehe Kanal Tabelle.

  • Funktionsaufrufe wie z. B. abs() (siehe Funktionen in Formeltabellen).

  • Innerhalb einer Formel können Konstanten verwendet werden, die in der Konstanten-Tabelle vorhanden sind (siehe Die Konstantentabelle).

Gültige Formeln sind z. B.

a = B_20 * F_ko_EWG
a = B_20 * Rho_20 * 1000 / P_EWG
a = c_Anteil / 100
a = pow(5.9 + 23.333 * ( rho_15 - 0.72 ) + 111.111 * ( rho_15 - 0.72 ), 2)

während die folgenden Formeln ungültig sind:

a = (n_Motor * Md_Motor) / 9550,0

Das Dezimaltrennzeichen ist der Punkt. Die Zahl 9550,0 ist nicht erlaubt.

a = 100 * B_20 / V-ACT

Das Zeichen "-" im Kanalnamen ist nicht erlaubt.

  • Ab R2013.12 können auch Formeln mit Zwischenergebnissen eingegeben werden:

    a1 = M1+M2
    a2 = M1+M3
    M_Result = a1 * a2
    

    Die Formel erzeugt den Kanal M_Result. Für die Zwischenergebnisse a1 und a2 wird kein Kanal erzeugt. In diesem Beispiel steht jede Berechnung in einer Zeile.

    Falls die Berechnung eines Zwischenergebnisses mehrere Zeilen benötigt, muss die Berechnung mit einem Semikolon beendet werden. In diesem Fall muss aber jede Berechnung mit einem Semikolon abgeschlossen werden. Beispiel:

    a1 = M1+
      M2;
    a2 = M1+M3;
    M_Result = a1 *
    a2;
    

Alternative Formeln

Falls es für die Berechnung einer Formel unterschiedliche Berechnungswege, z. B. wegen unterschiedlicher Messtechnik am Prüfstand, können alternative Formeln definiert werden.

Um zwei oder mehr alternative Formeln zu erzeugen, gehen Sie wie folgt vor:

Erzeugen Sie zuerst mit Hilfe des Formeleditors Beschreibung des Formel-Eingabe Dialogfelds die entsprechen Formeln, wobei Sie z. B. den Namen des Ergebniskanals mit _a, _b, etc. erweitern (Beispiel: Tcalc_a, Tcalc_b, Tcalc_c). Wenn Sie die Formeln erstellt haben, öffnen Sie mit UniPlot die UniScript-Dateien im Formelverzeichnis, z. B. _fi_Tcalc_a.ic und ändern den Namen des Formelergebnisses von Tcalc_a in Tcalc und von Tcalc_b in Tcalc, etc.

Sie finden die zu ändernden Namen im return-Wert sowie in der letzten Zeile der Funktion (erster Parameter von set_ch. Hier wurde der Name schon von Tcalc_a in Tcalc geändert:

def _fi_Tcalc_a(bInfo)
{
   ssChannels = "TOEL1, SB";
   if (bInfo) {
      return ["Tcalc"; ..                      // <----
              "°C"; ..
              ""; ..
              ssChannels; ..
              ""; ..
              "%.2lf"];
   }
   _fich_Tcalc_a = ch("TOEL1", "TOEL1");
   _fich_SB = ch("SB", "TOEL1");
   _fich_T_Calc = _fich_Tcalc_a .* _fich_SB;

   set_ch("Tcalc", _fich_Tcalc_a, ssChannels);       // <----
}

Speichern Sie die Änderungen der Dateien und wählen danach das Kommando Extras=>Aktualisiere Formelliste.

Funktionen in Formeltabellen

In Formeln der Formeltabelle können Funktionsaufrufe durchgeführt werden. Z. B. berechnet die Formel sqrt( 98.15 / (T_Ansaug + 273.15) ) die Wurzel aus 98.15 / (T_Ansaug + 273.15).

In den folgenden Funktionsbeschreibungen stehen die Parameternamen c, c1, c2 für Kanalnamen und der Parametername value für eine einzelne Zahl, z. B. 1.23.

abs(c)

Berechnet die Beträge der Elemente von c.

atan(c)

Berechnet den Arkustangens c.

atan2(c_y, c_x)

Berechnet die Zwei-Argumenten-Version des Arkustangens. Die Vorzeichen von c_y und c_x werden benutzt um einen Hauptwert im dazugehörigen Quadranten zu berechnen.

cos(c)

Berechnet den cosinus von c.

counter()

Erzeugt eine Zahlenreihe 1, 2, 3, ... für die erste Dimension.

counter(Kanalname)

Erzeugt eine Zahlenreihe 1, 2, 3, ... für die Dimension, zu der der Kanal mit dem angegebenen Namen gehört.

fft_filter(time, c, rsFreqCutOffBelow, rsFreqCutOffAbove)

Der Zeitkanal time muss in Sekunden definiert sein.

Falls time nicht mit konstanter Abtastfrequenz erfasst wurde, werden die Daten neu interpoliert und die Abtastfrequenz bestimmt. Von den Daten wird eine FFT berechnet. Die Frequenzen, die größer und kleiner als die Grenzen sind, werden auf 0 gesetzt. Für das Ergebnis wird die inverse FFT berechnet. Falls die Daten neu interpoliert wurden (Schritt 1), wird das Ergebnis wieder auf die Original-Abtastung interpoliert.

tan(c)

Berechnet den Tangens von c.

log(c)

log berechnet den natürlichen Logarithmus von c.

log10(c)

log10 berechnet den dekadischen (Basis 10) Logarithmus von c.

exp(c)

Berechnet e^c.

int(c)

Schneidet die Nachkommastellen von c ab.

find_plateau(ctime, cData, dy_tolerance, min_len, max_len, y_min_threshold, y_max_threshold)

Findet horizontale Abschnitte (Plateaus) in Daten.

Ein Plateau wird gefunden, wenn die Daten sich innerhalb der angegebenen Toleranz befinden und das Plateau mindestens die Länge min_len besitzt. Maximal ist das Plateau max_len lang. Es werden nur Plateaus gefunden, die im Bereich von y_min_threshold bis y_max_threshold liegen. Die Rampen zwischen den Plateaus werden auf 0 gesetzt. Plateaus enthalten keine missing-Werte. Jedes Plateau wird mit einem konstanten Wert markiert, beginnend mit 1, Inkrement 1.

Parameter:

Name Description
ctime Name des Zeitkanals.
cData Name des Y-Kanals.
dy_tolerance Toleranz in der Einheit von cData.
min_len Minimum-Länge eines Plateaus in der Einheit von ctime.
max_len Maximum-Länge eines Plateaus in der Einheit von ctime.
y_min_threshold Es werden nur Plateaus gefunden die größer als dieser Grenzwert sind.
y_max_threshold Es werden nur Plateaus gefunden die kleiner als dieser Grenzwert sind.

Beispiel: Findet im Drehzahl-Kanal speed die Bereiche mit konstanter Drehzahl mit einer Toleranz von 30 1/min. Findet nur Bereiche die zwischen 92 und 97 Sekunden lang sind und deren Drehzahl zwischen 800 und 10000 1/min liegt.

index = find_plateau(time, speed, 30, 92, 97, 800, 10000)

get_val_at(c, i)

Liefert den Wert des i-ten Elementes des Kanals c. i = 1 liefert den ersten Wert. i = -1 liefert den letzten Wert.

Beispiel: SZ2 = get_val_at(SZ, -1)

len(c)

Liefert als Wert die Anzahl der Elemente des Kanals c.

Beispiel: mean = sum(c)/len(c).

max(c)

Liefert den größten Wert von Kanal c.

max(c1, c2), max(c1, c2, …, c5)

Liefert einen Kanal mit dem Maximum von bis zu fünf Kanälen.

Beispiel: r[i] = max(c1[i], c2[i]).

max(c1, r)

Liefert einen Kanal dessen Elemente r[i] = max(c1[i], r) sind.

min(c)

Siehe max(c).

min(c1, c2), min(c1, c2, …, c5)

Siehe max(c1, c2), max(c1, c2, …, c5).

min(c1, r)

Siehe max(c1, r).

mean(c)

Liefert den Mittelwert von Kanal c.

pow(c, value)

Berechnet c^value.

PI()

Liefert die Zahl PI (3.1415926535897931).

quantile(c1, q)

Liefert das Quantile des Kanals c1. Der Quantilwert q muss im Intervall 0 bis 1 liegen. Für q = 0.5 liefert die Funktion den Median. Für q = 1 das Maximum.

rand()

Erzeugt Zufallszahlen im Bereich 0 bis 1.0. Beispiel: r = (time-time) + srand(99) * rand().

replace_missings(c1, c2)

Ersetzt „Missing Values“ des Kanals c1 durch die entsprechenden Werte des Kanals c2. Um diese Funktion anwenden zu können, muss im Eingabedialog die Option Missing-Value Behandlung abgeschaltet sein (siehe Beschreibung des Formel-Eingabe Dialogfelds).

replace_missings(c1, value)

Ersetzt „Missing Values“ des Kanals c1 durch den Wert value.

shift_points(c, nPoints, rsMissing)

Verschiebt die Werte des Kanals c um nPoints. Ein positiver Wert verschiebt nach rechts und ein negativer Wert nach links. Die fehlenden Werte werden auf rsMissing gesetzt.

Beispiel: c = [1, 2, 3, 4, 5] gibt für nPoints = -2 und rsMissing = 0 den Vektor [3, 4, 5, 0, 0] zurück.

std(c)

Berechnet die Standardabweichung des Kanals c.

sin(c)

Berechnet den Sinus von c.

sqrt(c)

Berechnet die Quadratwurzel des Kanals c. Falls der Kanal Werte kleiner als 0 enthält, werden Missing-Value-Werte eingetragen.

srand(r)

Setzt den Zufallszahlengenerator auf einen definierten Wert, siehe auch rand().

sum(c)

Liefert als Wert die Summe der Elemente des Kanals c.

cumsum(c)

Liefert als Wert die kumulierte Summe der Elemente des Kanals c.

diff(c)

Berechnet für einen Kanal c die folgenden Differenzen: [c[2] - c[1], c[3] - c[2], ... , c[n] - c[n-1]].

if_than_else(expr, than_exp, else_exp)

Liefert in Abhänigkeit von expr entweder than_exp oder else_exp. Die Parameter können Skalare oder Vektoren sein. Die Vektoren müssen alle gleich lang sein. Beispiel: be2 = if_than_else(compare_less(torque, 3), 500, be)

compare_less(c1, c2)

c1 kleiner c2 Vergleich. Wird hauptsächlich in Verbindung mit der if_than_else(expr, than_exp, else_exp) Funktion verwendet.

compare_lessequal(c1, c2)

c1 kleiner gleich (c2) Vergleich. Wird hauptsächlich in Verbindung mit der if_than_else(expr, than_exp, else_exp) Funktion verwendet.

compare_notequal(c1, c2)

c1 nicht gleich c2 Vergleich. Wird hauptsächlich in Verbindung mit der if_than_else(expr, than_exp, else_exp) Funktion verwendet.

compare_equal(c1, c2)

c1 gleich c2 Vergleich. Wird hauptsächlich in Verbindung mit der if_than_else(expr, than_exp, else_exp) Funktion verwendet.

compare_greater(c1, c2)

c1 größer c2 Vergleich. Wird hauptsächlich in Verbindung mit der if_than_else(expr, than_exp, else_exp) Funktion verwendet.

compare_greaterequal(c1, c2)

c1 größer gleich c2 Vergleich. Wird hauptsächlich in Verbindung mit der if_than_else(expr, than_exp, else_exp) Funktion verwendet.

and(c1, c2)

Logische AND Verknüpfung von c1 und c2. Wird hauptsächlich in Verbindung mit der if_than_else(expr, than_exp, else_exp) Funktion verwendet.

or(c1, c2)

Logische OR Verknüpfung von c1 und c2. Wird hauptsächlich in Verbindung mit der if_than_else(expr, than_exp, else_exp) Funktion verwendet.

not(c)

Logisch NOT von c. Wird hauptsächlich in Verbindung mit der if_than_else(expr, than_exp, else_exp) Funktion verwendet.

between(c, lower, upper)

Kanal c größer gleich lower und c kleiner gleich upper Vergleich. Wird hauptsächlich in Verbindung mit der if_than_else(expr, than_exp, else_exp) Funktion verwendet. Liefert 0 und 1.

PT1(rvT, rvY, T_const)

PT1 Glied: z = (y - max) * (1 - exp("t-1" - t / T)) + "Z-1".

section_points(time, c, Threshold, min_section_len_time, add_time_before, add_time_after, bEnumSection)

Die Funktion findet die Abschnitte, in denen die Daten (Kanalname c), die größer sind, als der Schwellwert Threshold und eine Mindestlänge haben, die größer sind, als min_section_len_time.

Die Parameter add_time_before, add_time_after, bEnumSection sind optional. Die Funktion kann mit 4 oder 7 Parameter aufgerufen werden. Falls add_time_before größer als 0 ist, werden zusätzliche Punkte an den Anfang eines Abschnitts markiert. Eine negative Zeit entspricht einem Verzug. Der Parameter wird in der Einheit des Zeitkanals definiert. Wenn add_time_after negativ eingegeben wird, entspricht das einer Verkürzung des Abschnitts. Falls bEnumSection gleich 1 ist, werden die Abschnitte durchnummeriert, wobei der erste Abschnitt den Wert 1 erhält. Default Werte: add_time_before = 0, add_time_after = 0, bEnumSection = 0.

Beispiel: index = section_points(time, speed, 3000, 10)

Beispiel für Verwendung des Zeilenfilter-Kanals: index = section_points(time, __filter__, 0.5, 6.5)

Beispiel bei dem 15 Sekunden am Anfang eines Abschnitts zugefügt werden: index = section_points(time, speed, 3000, 10, 15, 0, 1)

Beispiel: Abschnitt soll erst 3.5 Sekunden nach dem Ereignis markiert werden soll. Alle Abschnitte werden mit 1 markiert: index = section_points(time, speed, 3000, 10, -3.5, 0, 0)

Die Funktion erzeugt einen Kanal, der den Wert 1 enthält, wenn die Bedingung erfüllt ist und ansonsten den Wert 0. Falls bEnumSection = 1 ist, werden die Abschnitte durchnummeriert.

Um einen 2D-Datensatz zu erzeugen, der nur die Datenpunkte enthält, wo index den Wert 1 hat, wählen Sie den Datensatz-Typ 2D: x/y/Zyklus-Index aus. Es werden dann alle Datenpunkte geladen, bei denen der Kanal index den Wert 1 enthält.

smooth(c, width)

Gleitender Mittelwert. Width ist die halbe Fensterbreite. Die Fensterbreite wird in Anzahl der Datenpunkte angegeben. Verwendet die Funktion moving_average. Beispiel: NOx = smooth(NOx, 50)

smooth_time(c, TimeChannel, TimeWindow)

Gleitender Mittelwert. TimeWindow ist die halbe Fensterbreite. Mit der Funktion kann die Fenstergröße unabhängig von der Abtastrate festgelegt werden. TimeChannel ist der Name des zugehörigen Zeitkanals. c ist der Name des zu glättenden Kanals. Beispiel: NOx_s = smooth_time(NOx, time, 1.7)

Funktion moving_average.

smooth_median(c, nNeighbor)

Gleitender Median. nNeighbor ist die Fensterbreite im Bereich 3 bis 1025. Gerade Zahlen werden auf die nächste ungerade Zahl aufgerundet. Verwendet die Funktion moving_median.

Beispiel: ATL_speed_s = smooth_median(ATL_speed, 5)

5 aufeinander folgende Punkte aufsteigend sortiert und der dritte Wert wird nach ATL_speed_s geschrieben. Bei einer Fensterbreite von 5 Punkten werden die ersten zwei Punkte und die letzten zwei Punkte unverändert in den Ergebnisvektor geschrieben.

Gegeben: ATL_speed  =  [5, 7, 6, 4, 27, 8, 4, 5]

Ergebnis: ATL_speed_s = [5, 7, 6, 7, 6,  8, 4, 5]

bit(c, nBit)

Liefert das n-te Bit von c. nBit beginnt bei 1.

derivative(x, y)

Berechnet die Ableitung.

integral(x, y)

Berechnet den Verlauf des Integrals. Der letzte Wert ist die Fläche unter der Kurve.

integral_withreset(x, y, rsYResetThreshold or idx_vector, bEndValueOnly)

Berechnet den Verlauf des Integrals. Der Integralverlauf beginnt wieder bei 0, wenn der y-Wert die Schwellwertlinie rsYRestThreshold von unten kommend schneidet.

Falls idx_vector ein Vektor mit ganzen Zahlen ist (z. B. 1,1,1,1,2,2,2,3,3,3) wird für jeden konstanten Vektorwert ein Integral gebildet. Für das Beispiel werden dann drei Integrale gebildet, z. B.: 0,12,13,14,0,3,5,0,4,5.

integral_withreset2(x, y, bool_channel_01, bEndValueOnly)

Berechnet den Verlauf des Integrals. Der Integralverlauf beginnt wieder bei 0, wenn der Wert des Kanals bool_channel_01 kleiner als 0.5 ist.

Falls bEndValueOnly auf 1 gesetzt wird, wird Endwert des Integrals im gesamten Verlauf angezeigt. Falls der Wert auf 0 gesetzt wird, wird der Integralverlauf, beginnend mit 0, berechnet.

integral_withreset_thd(x, y, Threshold)

Berechnet die Integralkurve. Wenn der Wert des Integrals von Y über X den Schwellenwert überschreitet, wird der Integralwert auf 0 zurückgesetzt.

extract(c, minval, maxval)

Setzt alle Werte des Kanals c außerhalb des Bereichs minval bis maxval auf missing_value.

Beispiel, wie das Integral von pChan über der Zeit für einen Zeitabschnitt von 1 bis 2 Sekunden berechnet werden kann:

int =  integral(extract(time, 1, 2),  pChan)

exclude(c, minval, maxval)

Setzt alle Werte des Kanals c im Bereich minval bis maxval auf missing_value.

findfirst(cx, cy, posx)

Sucht in Kanal cx die Position posx und liefert einen Vektor mit dem konstanten Wert von Kanal cy an dieser Stelle. cx muss monoton aufsteigend sein.

root_mean_square(c, n)

Berechnet das quadratische Mittel als gleitenden Wert (RMS= root mean square). c ist der Name eines Kanals und n ist die Fensterbreite als Anzahl der Datenpunkte. Das Ergebnis wird an die Position i geschrieben. Am Anfang und Ende werden entsprechend weniger Punkte in die Berechnung ein.

\mathrm{rms}= \sqrt{\frac1n \sum_{i=1}^n{x_i^2}}

Der Abschnitt Funktionen für Formeln beschreibt, wie solche Funktionen definiert werden.

Kanäle mit Missing Values

In der folgenden Tabelle hat der Messpunkt 6 des Kanals EngSpd keinen gültigen Wert. An dieser Stelle steht das Wort "Missing".

../../_images/missing1.png

Da der Kanal P=f(EngSpd, SAETrq) vom Kanal EngSpd abhängig ist, enthält auch P an dieser Stelle den Wert "Missing".

Bei Kanälen, die den Datentyp double oder float haben (64bit- bzw. 32bit-Realzahl), werden Werte mit dem Zahlenwert 1e10 als "Missing" aufgefasst.

Bei Kanälen mit den Datentypen byte (8bit-Integer), short (16bit-Integer), long (32bit-Integer) gibt es keine festen Missing-Value-Werte. Diese Kanäle können aber ein Attribut missing_value haben, das den Wert festlegt.

Beim Import von Daten werden Betriebspunkte mit Missing-Values ignoriert.

Definition von Formeln in einer Tabelle

Neue Formeln können in eine Excel-Datei eingegeben werden. Ein Beispiel finden Sie im Verzeichnis UniPlot\samples. Die Datei hat den Namen formula.xls.

../../_images/formel-excel-tabelle.png

Die Tabelle enthält 8 Spalten. Die Spalten haben die folgende Bedeutung:

  1. Spalte - FunctionName: In der ersten Spalte steht der Name der Formel.
  2. Spalte - Description: Beschreibung der Formel.
  3. Spalte - Unit: Einheit der Formel. Der Formelinterpreter konvertiert die Einheiten nur, falls in Spalte 9 eine 1 steht (SI-Einheiten). Andernfalls wird die Einheit als Einheitentext im Kanal gespeichert. In diesem Fall muss die Formeln einheitenrichtig definiert sein. Es findet keine Konvertierung der Einheiten statt.
  4. Spalte - ChannelName: Name des Ausgabekanals der erzeugt werden soll.
  5. Spalte - Formula: Die Formel. Beispiel: (EngSpd * SAETrq) / 9549.3. Weitere Informationen über Formeln finden Sie im Kapitel Definition von Formeln. Zu Beachten ist, wenn Zwischenergebnisse genutzt werden sollen, dass die letzte Formel einen Ergebniskanal enthält. Der Ergebnisname ist in Spalte 4 definiert.
  6. Spalte - OnlyIf: Name einer Bedingung.
  7. Spalte - Numberformat: Formatbescheibung, z. B. %g oder %.4lf.
  8. Spalte - SI-Units: Falls der Wert auf 1 gesetzt wird, werden die Variablen in SI-Einheiten konvertiert, bevor die Formel ausgewertet wird. Das Ergebnis der Formel wird in die angegebene Einheit (Spalte 3) konvertiert.
  9. Spalte - Comment: In dieser Spalte kann ein Kommentar eingetragen werden. Bis UniPllot 2013.11 stand der Kommentar in Spalte 8.

Die erste Zelle (A1) der Excel-Tabelle muss die Zeichenkette "UniPlotFormulaTable" oder "UniPlotFormelTabelle" enthalten.

Die zweite Zeile enthält die Spaltennamen.

Ausführlich wird im Kapitel Formelinterpreter 2 - Erstellung der Formeltabelle beschrieben, wie neue Formeln mit der Formeltabelle definiert werden.

id-202804