NC_Interpolation¶
NC_Interpolation erzeugt eine NC-Datei mit interpolierten Daten. Mit der Funktion können Dateien, die einen Zeitkanal enthalten, auf einen andere Abtastrate interpoliert werden, oder MDF-Dateien, die Daten mit mehreren unterschiedliche Abtastraten enthalten, können auf eine gemeinsame Abtastrate interpoliert werden.
- bool = NC_Interpolation(ssNCFile, ssNewNCName, ssTimeName)
- bool = NC_Interpolation(ssNCFile, ssNewNCName, ssTimeName, svChannelList)
- bool = NC_Interpolation(ssNCFile, ssNewNCName, ssTimeName, svChannelList, rvTimeDef)
- bool = NC_Interpolation(ncid, ssNewNCName, ssTimeName)
- bool = NC_Interpolation(ncid, ssNewNCName, ssTimeName, svChannelList)
- bool = NC_Interpolation(ncid, ssNewNCName, ssTimeName, svChannelList, rvTimeDef)
Returnwert
Ist TRUE (1), wenn die Datei erzugt werden konnte oder FALSE (0).
Parameter
- ssNCFile
ssNCFile ist der Name einer NC-Datei die interpoliert werden soll.
- ncid
ncid ist die Zugriffsnummer einer NC-Datei, die von einem erfolgreichen Aufruf der Funktionen nc_create oder nc_open geliefert wurde.
- ssNewNCName
ssNewNCName ist der NC-Dateiname für die Ergebnisdatei.
- ssTimeName
ssTimeName: Ist der Name eines Zeitkanals auf den Interpoliert werden soll. Wird der Parameter rvTimeDef angegeben, kann der Zeitkanal frei definiert werden.
- svChannelList
svChannelList ist ein Vektor mit Kanalnamen. Falls ein leerer String übergeben wird, werden alle Kanäle interpoliert. Wird der Parameter nicht angegeben, werden alle Kanäle interpoliert.
- rvTimeDef
Ist ein Vektor mit einem oder drei Elementen.
Wird nur ein Wert übergeben, ist das der Abtastrate, z. B. 0.1 Sekunde. Der Zeitbereich wird vom Kanal ssTimeName übernommen.
Wird ein Vektor mit drei Elemente übergeben, kann der Startwert, der Endwert und die Abtastrate angeben werden
[rsStart, rsEnde, rsDelta]
.Beipiel:
[0,10,0.1]
erzeugt einen Zeitkanl von o bis 10s mit einer Abtastrate von 0.1 s (10 Hz).Wird der Parameter nicht angegeben, werde die Daten auf den Zeitkanal ssTimeName interpoliert.
Kommentar
Es werden nur Kanäle mit mindestens 2 Punkten interpoliert.
Bei MDF-Dateien müssen die Gerätenamen berücksichtigt werden. Der Gruppenname wird ignoriert.
Es wird keine Extrapolation durchgeführt. Fehlende Daten werden auf missing gesetzt.
Die Daten werden linear interpoliert.
Behandlung von Bit-Kanälen
Sollen bestimmte Kanäle nicht linear interpoliert werden, können die Kanäle
mit Ihrem Namen in eine Ini-Datei geschrieben werden. Die Namen müssen gültige
Namen sein. In der Ini-Datei kann die Interpolationsart festgelegt werden, siehe
Kommentar im folgenden Beispiel. Die Datei muss im Benutzerverzeichnis von
UniPlot gespeichert werden. Der Dateiname ist Bit_Channel_Interpolation.ini
.
Beispieldatei:
; Used be NC_Interpolation, NC_SycchronizeTime, NC_TimeInterpolation
; Channelname = interpolation type (nType)
; nType == 1: prev
; Previous neighbor interpolation. The interpolated value at a query point is
; the value at the previous sample grid point.
; nType == 2: nearest (default)
; Nearest neighbor interpolation. The interpolated value at a query point is the
; value at the nearest sample grid point.
; nType == 3: next
; Next neighbor interpolation. The interpolated value at a query point is the
; value at the next sample grid point.
[Interpolation]
Bit_Kanal1 = 1
Bit.Channel2 = 2
vKwz1 = 1
Beispiel
def TestInterpolation()
{
ssDatFile = "u:/nc_daten2/080226_P5736R3_Startversuch.dat"
ssNCFile = auto_ImportData(ssDatFile);
ssNewTimeName = "time"
svChannel = ["AirCtl_dvolIndAir_r32_ETKC_1", "PthSet_trqInrSet_ETKC_1", "AirCtl_mDesVal_ETKC_1"]
// Erzeuge neuen Namen:
svPath = SplitPath(ssNCFile);
ssOutputName = svPath[1] + svPath[2] + svPath[3] + "_interpol" + svPath[4];
NC_Interpolation(ssNCFile, ssOutputName, ssNewTimeName, svChannel); // Time wie erste Kanal
//NC_Interpolation (ssNCFile, ssOutputName, ssNewTimeName, svChannel, [0.01]) // Delta 0.1s von Range 1. Kanal
//NC_Interpolation (ssNCFile, ssOutputName, ssNewTimeName, svChannel, [0,12,0.01]) // Time von 0s bis 12s in 0.01s
}
Das folgende Beispiel liesst MDF Dateien ein und interpoliert die Daten auf den Zeitkanals The following example reads MDF file and interpolates the data to the time of the first channel found in the channel list svSearchName. The data is exported as a Excel XLSX file:
RegisterCommand("File: MDF-Export", "_MDF_To_Excel", "MDF->Excel...", "", "", "MSExcel.BMP");
UserBar_Add("_MDF_To_Excel");
def _MDF_Find_TimeChannel(ncid, svSearch)
{
nSearch = len(svSearch);
for (i in 1:nSearch) {
VaridTime = _NC_get_time_channel_id(ncid, svSearch[i]);
if (VaridTime != -1) {
return VaridTime;
}
}
return -1;
}
def _MDF_To_Excel()
{
// Channelname for interpolation.
// The time is used from the first found defined channel
svSearchName = ["Input_2", "time1", "time2"];
WriteProfileInt("Settings", "MDF_StripDeviceName", 1)
WriteProfileInt("Settings", "MDF_StripGroupName", 1)
ssDir = GetProfileString("settings", "last_mdf_to_excel_dir");
svFiles = GetOpenFileName_Data(ssDir, TRUE, TRUE, FALSE);
if (svFiles[1] == "") {
return;
}
smPath = SplitPath(svFiles);
WriteProfileString("settings", "last_mdf_to_excel_dir", smPath[1;1] + smPath[1;2]);
nFiles = len(svFiles);
for (i in 1:nFiles) {
ssNCName = auto_ImportData(svFiles[i]);
ncid = nc_open(ssNCName, NC_NOWRITE);
if (ncid == -1) {
MessageBoxError("Cannot open file: %s", ssNCName);
continue;
}
if (_QV_IsVS100(ncid) == FALSE) {
nc_close(ncid);
continue;
}
varid = _MDF_Find_TimeChannel(ncid, svSearchName);
if (varid == -1) {
// USe first time channel
dimid = 0;
nVars = nc_inquire_nvars(ncid);
if (nVars <= 0) {
nc_close(ncid);
continue;
}
rvVarid = _QV_FindGroupChannelsVS100(ncid, nVars, dimid);
if (rvVarid[1] == -1) {
Event_Error(_s("MDF LoadDataset", "Cannot find Time Channel"));
}
varid = rvVarid[1];
}
ssTimeName = nc_varinq_name(ncid, varid);
ssNewNCName = sum(smPath[i; 1,2, 3]) + "_tran.nc2";
ncid2 = NC_TimeInterpolation(ncid, ssNewNCName, ssTimeName);
nc_close(ncid);
if (ncid2 == -1) {
Event_Error("MDF-Export", "Failed to create file");
continue;
}
nc_close(ncid2);
obj = [.]
ssType = "XLSX-NOHEADER" // "XLSX";
// obj.ssOutDir = "d:/";
obj.ssMissing = "missing";
// obj.bOverwrite = TRUE;
// obj.svChannel = ["Lst", "EngPwr", "Speed", "PME"];
NC_ExportData(ssNewNCName, "XLSX-NOHEADER", obj);
}
}
History
Version |
Beschreibung |
---|---|
R2022.4 |
Die _nc_enum informationen werden bei der Interpolation beibehalten. |
5.15.1 |
Neu. |
Siehe auch
Überblick UniPlot-Datendateien, NC_ExportData, Dateneditor=>Kanal-Interpolation, nc_create, auto_ImportData,
id-540769