以下程序從USB-2416連續(xù)獲取數(shù)據(jù)。在采集開始之前,它會(huì)進(jìn)一步檢查以確保 InstaCal 用于配置通道的溫度和電壓 - 請參閱代碼中的注釋。將設(shè)備字符串修改為 2408 該程序應(yīng)該可以與USB-2408 一起使用,因?yàn)樗哂邢嗤挠布O(shè)計(jì)。
要訪問 MccDaq API,請?zhí)砑訉?span> MccDaq 對象的引用。添加引用通常是通過右鍵單擊項(xiàng)目 [在項(xiàng)目瀏覽器下] 并選擇添加引用來完成的。完整的項(xiàng)目附在文章中,是使用 CSharp 使用 Visual Studio 2008 創(chuàng)建的。編譯和執(zhí)行速度很快,因?yàn)?span> Windows 開銷和相關(guān)代碼最少。要重新創(chuàng)建項(xiàng)目,請使用 Visual Studio 的 File->New Project,選擇 Visual C# 并選擇 Console Application。創(chuàng)建新項(xiàng)目并添加對 McDaq Dot Net 組件的引用。最簡單的方法是在 Project Explorer 中用鼠標(biāo)右鍵單擊該項(xiàng)目并選擇 Add Reference。從 NET 列表中選擇 McDaq。當(dāng)然,這假設(shè)您已經(jīng)安裝了 InstaCal 軟件。
雖然下面沒有顯示,但添加了一些方便的函數(shù),例如 IsError、GetBoardNum、DisplayData、CreateFileHeader 和 WaitForKey。要查看所有功能,請通過解壓縮底部的 zip 文件下載完整的 Visual Studio 2008 項(xiàng)目。
IsError 函數(shù)檢查 ErrorInfo 對象中的錯(cuò)誤編號,如果不是零則顯示錯(cuò)誤消息。GetBoardNum 函數(shù)搜索與標(biāo)識字符串匹配的設(shè)備。CreateFileHeader 將采集信息寫入輸出文件的開頭。顯示數(shù)據(jù)將數(shù)據(jù)寫入文件和控制臺(tái)屏幕。而 WaitForKey 就是這樣做的 - 等待某人按下空格鍵。
免責(zé)聲明:
隨附的代碼或示例按原樣提供。它尚未作為產(chǎn)品進(jìn)行測試或驗(yàn)證,未在部署的應(yīng)用程序或系統(tǒng)中使用,或在危險(xiǎn)環(huán)境中使用。您承擔(dān)使用代碼或示例的所有風(fēng)險(xiǎn)。
使用系統(tǒng);
使用 System.Runtime.InteropServices;
using MccDaq;//項(xiàng)目必須引用MccDaq
使用 System.IO;
命名空間溫度電壓讀取背景
{
課程計(jì)劃
{
公共常量 int CHANCOUNT = 4;
公共常量 int FIRSTCHANNEL = 0;
public const int LASTCHANNEL = 3;
公共常量 int 采樣率 = 1;
public const int BUFFERSIZE = CHANCOUNT * 100;
//此程序適用于USB-2408和USB-2416。取消注釋適當(dāng)?shù)淖址?/p>
public const string DEVICE = " USB-2416 ";
//public const string DEVICE = " USB-2408 ";
公共靜態(tài) StreamWriter fStream;
static void Main(string[] args)
{
//項(xiàng)目必須引用MccDaq
McDaq.ErrorInfo RetVal;
int BoardNum = 0;
整數(shù)率 = 采樣率;
BoardNum = GetBoardNum(DEVICE);
if (BoardNum == -1)
{
Console.WriteLine("未檢測到{0}!", DEVICE);
等待鍵();
返回;
}
MccBoard daq = 新 MccDaq.MccBoard(BoardNum);
IntPtr 緩沖區(qū) = MccService.ScaledWinBufAllocEx(BUFFERSIZE);
if (buffer == IntPtr.Zero)
{
Console.WriteLine("內(nèi)存句柄錯(cuò)誤");
等待鍵();
返回;
}
daq.AInputMode(AInputMode.Differential);
daq.BoardConfig.SetDetectOpenTc(1);
daq.BoardConfig.SetTempScale(TempScale.Fahrenheit);
//為K型配置TC通道
for (int Channel = 0; Channel < CHANCOUNT; Channel++)
{
daq.BoardConfig.SetAIChanType(Channel, AIChanType.Thermocople);
daq.BoardConfig.SetChanTcType(Channel, TcType.K);
//設(shè)置通道濾波器為60Hz
daq.BoardConfig.SetAdDataRate(Channel, 60);
}
//使用TC輸入時(shí)忽略范圍參數(shù)
RetVal = daq.AInScan(FIRSTCHANNEL,
上一個(gè)頻道,
緩沖區(qū)大小,
參考率,
Range.Bip10Volts,
緩沖,
ScanOptions.Background | ScanOptions.ScaleData | ScanOptions.Continuous
);
IsError(RetVal);
//創(chuàng)建數(shù)據(jù)文件
fStream = new StreamWriter(@"C:\Users\Public\Documents\DataFile.asc");
創(chuàng)建文件頭();//將基本信息寫入文件的開頭
整數(shù)計(jì)數(shù) = 0;
整數(shù)索引 = 0;
短數(shù)據(jù)狀態(tài);
double[] temps = new double[BUFFERSIZE];
int LastIndex = 0;
System.ConsoleKeyInfo cki = new System.ConsoleKeyInfo();
//循環(huán)直到按鍵
做
{
RetVal = daq.GetStatus(out daqStatus, out Count, out Index, FunctionType.AiFunction);
如果(索引 > 最后索引)
{
RetVal = MccService.ScaledWinBufToArray(buffer, temps, Index, CHANCOUNT);
DisplayData(temps, 1);
LastIndex = 索引;
}
} while (!Console.KeyAvailable);
cki = Console.ReadKey();
//將所有緩沖數(shù)據(jù)刷新到磁盤
fStream.Close();
//停止獲取
RetVal = daq.StopBackground(FunctionType.AiFunction);
//釋放內(nèi)存
MccService.WinBufFreeEx(buffer);
等待鍵();
}
/**************************************** 檢查錯(cuò)誤 *********** **************************************/
public static int IsError(ErrorInfo e)
{
如果 (e.Value != 0)
{
if (e.Value == ErrorInfo.ErrorCode.BadRate)
Console.WriteLine("糟糕的采樣率!運(yùn)行 InstaCal 并提高數(shù)據(jù)率或降低采樣率");
別的
Console.WriteLine(e.Message);
等待鍵();
返回 1;
}
返回0;
}
/************************************ 查找設(shè)備 *********** ************************************/
public static int GetBoardNum(string dev)
{
McDaq.DaqDeviceManager.IgnoreInstaCal();
MccDaq.DaqDeviceDescriptor[]inventory = MccDaq.DaqDeviceManager.GetDaqDeviceInventory(MccDaq.DaqDeviceInterface.Any);
int DevicesFound =inventory.Length;
如果(設(shè)備發(fā)現(xiàn) > 0)
{
for (int boardNum = 0; boardNum < DevicesFound; boardNum++)
{
嘗試
{
if (inventory[boardNum].ProductName.Contains(dev))
{
MccDaq.MccBoard daqBoard = MccDaq.DaqDeviceManager.CreateDaqDevice(boardNum,inventory[boardNum]);
Console.WriteLine("產(chǎn)品名稱:{0}",inventory[boardNum].ProductName);
Console.WriteLine("設(shè)備類型# : {0}",inventory[boardNum].ProductID);
Console.WriteLine("Serial # : {0}",inventory[boardNum].UniqueID);
返回板號;
}
}
捕獲(ULException ule)
{
Console.WriteLine("發(fā)生錯(cuò)誤:" + ule.Message);
}
}
}
返回-1;
}
/***************************** 等待空格鍵按鍵 **************** ********************/
public static void WaitForKey()
{
Console.WriteLine("\n按 <SpaceBar> 繼續(xù)...");
System.ConsoleKeyInfo cki;
做
{
cki = Console.ReadKey();
} while (cki.Key != ConsoleKey.Spacebar);
}
/************************************ 顯示數(shù)據(jù) *********** **************************************/
public static void DisplayData(double[] datArray, int rows)
{
//將數(shù)據(jù)寫入屏幕和文件
int i = 0;
for (int row = 0; row < rows; row++)
{
for (int c = 0; c < CHANCOUNT; c++)
{
Console.Write("{0}\t", datArray[i].ToString("0.0000").PadLeft(10));
fStream.Write("{0}\t", datArray[i].ToString("0.0000"));
我++;
}
Console.Write("\r\n");
fStream.Write("\r\n");
}
fStream.Flush();
}
/************************************ 創(chuàng)建文件頭********** ****************************************/
public static void CreateFileHeaders()
{
Console.WriteLine("此程序從 {1}\n 讀取通道 {0}", FIRSTCHANNEL, LASTCHANNEL);
//'''''''''''''''''''''創(chuàng)建文本文件頭字符串''''''''''''''''
字符串[] hdr = 新字符串[5];
hdr[0] = "錄制日期:{0}";
hdr[1] = "塊長度:{0}";
hdr[2] = "增量:{0} 秒。";
hdr[3] = "通道數(shù):{0}";
//'''''''''''''''''''''' 構(gòu)建列標(biāo)題字符串'''''''''''''''''''
for (int j = 0; j < CHANCOUNT; j++)
{
hdr[4] = hdr[4] + String.Format("In{0} [deg]", j);
hdr[4] = hdr[4] + "\t";
}
hdr[4].Trim('\t');
//'''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''
DateTime MyDate = DateTime.Now;
fStream.WriteLine(hdr[0], MyDate);
fStream.WriteLine(hdr[1], 1);
fStream.WriteLine(hdr[2], (1 / SAMPLERATE));
fStream.WriteLine(hdr[3], CHANCOUNT);
fStream.WriteLine(hdr[4]);
Console.WriteLine(hdr[0], MyDate);
Console.WriteLine(hdr[1], 1);
Console.WriteLine(hdr[2], (1 / SAMPLERATE));
Console.WriteLine(hdr[3], CHANCOUNT);
Console.WriteLine(hdr[4]);
}
/***************************************************** ********************************************/
}
}