set_ch

set_ch setzt die Daten eines Kanals.

Die Funktion sollte nur innerhalb von Funktionen für den Formelinterpreter verwendet werden. Die Funktion greift über die globale Variable _fi_ncid auf die zum Schreiben geöffnete UniPlot Datendatei zu.

bool = set_ch(ssChannelName, values)
bool = set_ch(ssChannelName, values, ssDepChannels)
bool = set_ch(ssChannelName, values, ssDepChannels, bSIUnits)

Returnwert

bool ist TRUE (1) wenn die Funktion erfolgreich war und FALSE (0) bei Auftreten eines Fehlers.

Parameter

ssChannelName

ssChannelName ist der Name des Kanals der erzeugt werden soll.

values

values ist ein Vektor mit den Werten des Kanals.

ssDepChannels

ssDepChannels ist ein String mit den Namen der abhängigen Kanäle, durch Komma getrennt oder ein leerer String. Falls der String leer ist, werden die Werte missing_value im values-Parameter nicht berücksichtigt. Die Funkion ch liefert als missing_value den Wert infinite (1.#inf). Ob ein Wert infinite ist, kann mit der Funktion finite geprüft werden. Siehe Beispiel.

bSIUnits

bSIUnits muss TRUE (1) sein, wenn values in SI-Einheiten vorliegt und das units-Attribut keine SI-Einheit ist. Es wird dann eine Einheitenrechnung durchgeführt. Falls bSIUnits FALSE (0) ist oder der Parameter nicht angegeben wird, wird keine Einheitenumrechnung durchgeführt.

Beispiel

// Leistung in kW
// M*2*PI*n
// Drehzahl n in 1/min
// Moment m in Nm
def _fi_Power(bInfo)
{
    ssChannels = "n_Motor, Md_Motor";
    if (bInfo) {
        return ["Power"; ..
            "kW"; ..
            "Leistung"; ..
            ssChannels;
            "0"];
    }
    n_Motor = ch("n_Motor");
    Md_Motor = ch("Md_Motor");
    Power = (n_Motor .* Md_Motor) ./ 9549.3;
    set_ch("Power", Power, ssChannels);
}
// Leistung in kW
// M*2*PI*n
// Drehzahl n in 1/s
// Moment m in Nm
def _fi_Power(bInfo)
{
    bSIUnits = 1;
    ssUnit = "kW";
    ssChannels = "n_Motor, Md_Motor";
    if (bInfo) {
        return ["Power"; ..
            ssUnit; ..
            "Leistung"; ..
            ssChannels;
            "1"];
    }
    n_Motor = ch("n_Motor", "", bSIUnits);
    Md_Motor = ch("Md_Motor", "", bSIUnits);
    Power = (n_Motor .* Md_Motor) .* (2*PI);
    set_ch("Power", Power, ssChannels, bSIUnits);
}

Beispiel für eine Integralberechnung, bei der ungültige Werte auf 0 gesetzt werden:

def _fi_qm(bInfo)
{
    ssChannels = "time, m_flow";
    if (bInfo) {
        return ["qm"; ..
            "kg"; ..
            "Leistung"; ..
            ssChannels;
            "1"];
    }
    rvTime = ch("time");
    rvMFlow = ch("m_flow");

    idx = find(finite(rvMFlow) == FALSE);
    if (idx[1] != 0) {
          rvMFlow[idx] = 0;
    }
    // we ignore the error that the triangle before and after
    // the missing values is added to the integral value.

    rvQm = integral(rvTime, rvMFlow);
    // Third parameter = "": missings will not set set:
    // Only the second column is the integral
    set_ch("qm", rvQm[;2], "", FALSE);
}

History

Version Beschreibung
R2013.11 Einheiten-Umrechnung.
R2012.0 Neu dokumentiert.
5.7 Neu.

id-875561