TDM/TDMS 是 NI 的資料儲存格式,兼顧速度與邏輯組織。NI 提供第三方庫,配置環境簡單(頭文件+動態庫),讀寫極便捷。
int WriteDDCFile(const char* filePath, int channelNum, int dataLen, const char* fileType = "TDM") {
DWORD begin = GetTickCount();
DDCFileHandle testFile;
DDC_CreateFile(filePath, fileType, "", "", "", "", &testFile);
DDCChannelGroupHandle group01;
DDC_AddChannelGroup(testFile, "group01", "", &group01);
DDCChannelHandle* channels = new DDCChannelHandle[channelNum];
double* channelData = CreateRandomData(dataLen);
for (int i = 0; i < channelNum; i++) {
char channelIdx[20]; itoa(i, channelIdx, 10);
DDC_AddChannel(group01, DDC_Double, channelIdx, "", "", &channels[i]);
DDC_SetDataValues(channels[i], channelData, dataLen);
}
DDC_SaveFile(testFile);
DWORD end = GetTickCount();
DDC_CloseFile(testFile);
delete[] channels; delete[] channelData;
return end - begin;
}
int ReadDDCFile(const char* filePath, const char* fileType = "TDM") {
DWORD begin = GetTickCount();
DDCFileHandle ddcFile;
DDC_OpenFile(filePath, fileType, &ddcFile);
unsigned int groupNum = 0;
DDC_GetNumChannelGroups(ddcFile, &groupNum);
DDCChannelGroupHandle* groups = new DDCChannelGroupHandle[groupNum];
for (int i = 0; i < groupNum; i++) {
unsigned int channelNum = 0;
DDC_GetNumChannels(groups[i], &channelNum);
DDCChannelHandle* channels = new DDCChannelHandle[channelNum];
for (int j = 0; j < channelNum; j++) {
unsigned __int64 dataLen = 0;
DDC_GetNumDataValues(channels[j], &dataLen);
double* data = new double[dataLen];
DDC_GetDataValuesDouble(channels[j], 0, dataLen, data);
// 處理 data...
delete[] data;
}
delete[] channels;
}
delete[] groups;
DDC_CloseFile(ddcFile);
DWORD end = GetTickCount();
return end - begin;
}
代碼下載:VS2008 專案
https://down.51cto.com/data/919272 或 百度網盤