以下示例演示了如何使用USB-CTR04或CTR-08測量頻率。此外,它還演示了CConfigScan(...)和CInScan(...)的用法。
要訪問API,請?zhí)砑訉?/span>MccDaq對象的引用。添加引用通常是通過右鍵單擊項目(在“項目資源管理器”下)并選擇“添加引用”來完成的。完整的項目附在文章后,并使用CSharp在Visual Studio 2008中創(chuàng)建。由于Windows開銷和相關(guān)代碼最少,因此編譯和執(zhí)行速度很快。
為了使代碼更具可讀性,添加了一些便利功能,例如IsError,GetBoardNum和WaitForKey。IsError函數(shù)檢查ErrorInfo對象中的錯誤號,如果不為零,則顯示錯誤消息。GetBoardNum函數(shù)開始從每個數(shù)字位置讀取設(shè)備字符串,并在找到包含標(biāo)識字符串的字符串后立即退出。WaitForKey就是這樣做的-等待某人按下一個鍵。要查看完整的程序項目,請下載以下附件。
免責(zé)聲明:
隨附的代碼或示例按原樣提供。它尚未經(jīng)過測試或驗證,不能作為產(chǎn)品,不能在已部署的應(yīng)用程序或系統(tǒng)中使用或在危險環(huán)境中使用。您承擔(dān)使用本準(zhǔn)則或示例的所有風(fēng)險。

public const int CHANCOUNT = 1;
public const int BUFFERSIZE = 2;
public const int HALFBUFFSIZE = BUFFERSIZE / 2;
公共常量字符串DEVICE =“ USB-CTR”;
public const int CounterNum = 0;
public const int OutTimerNum = 0;
public const CounterMode Mode = CounterMode.Period;
public const CounterDebounceTime DebounceTime = CounterDebounceTime.Debounce500ns;
公共常量CounterDebounceMode DebounceMode = CounterDebounceMode.TriggerAfterStable;
公共const CounterEdgeDetection EdgeDetection = CounterEdgeDetection.RisingEdge;
公共常量CounterTickSize TickSize = CounterTickSize.Tick20pt83ns; // 0等于20.833 nS ticksize
public const double tick = 0.000000020833f;
public const int MapCounter = 0;
公共靜態(tài)布爾ReadLower = true;
/ * /////////////////////////////////////////////////的方法/////////////////////////////////// * /
靜態(tài)void Main(string [] args)
{
int BoardNum = 0;
int速率= 1;
雙倍頻率= 1000.0f;
雙占空比= 0.50f;
double intDelay = 0;
簡短的daqStatus;
int Count;
int索引;
Console.WriteLine(“定位設(shè)備...請稍候\ n”);
BoardNum = GetBoardNum(DEVICE);
如果(BoardNum == -1)
{
Console.WriteLine(“未檢測到{0}!”,設(shè)備);
WaitForKey();
返回;
}
其他
{
MccBoard daq =新的MccDaq.MccBoard(BoardNum);
//分配緩沖區(qū)
IntPtr緩沖區(qū)= MccService.WinBufAlloc32Ex(BUFFERSIZE);
如果(緩沖區(qū)== IntPtr.Zero)
{
Console.WriteLine(“ Bad Handle”);
返回;
}
IsError(daq.CConfigScan(CounterNum,
模式,
去抖時間,
DebounceMode,
邊緣檢測
TickSize,
MapCounter));
//出于測試目的,將電線從計時器0跳到計數(shù)器0。
//使用定時器作為測試信號
IsError(daq.PulseOutStart(OutTimerNum,
參考頻率
參考值,0,
ref intDelay,
IdleState.Low,
PulseOutOptions.Default));
ScanOptions選項= ScanOptions.Default
| ScanOptions.Ctr64Bit
| ScanOptions.Continuous
| ScanOptions.Background;
IsError(daq.CInScan(CounterNum,
反數(shù)字
緩沖區(qū)大小,
參考率
緩沖,
選項));
System.ConsoleKeyInfo cki =新的System.ConsoleKeyInfo();
Console.WriteLine(“正在檢索數(shù)據(jù)\ n”);
Console.WriteLine(“按任意鍵退出... \ n”);
Int64 [] longArray =新的Int64 [BUFFERSIZE];
做
{
IsError(daq.GetStatus(out daqStatus,out Count,out Index,F(xiàn)unctionType.CtrFunction));;
if((Index> = HALFBUFFSIZE)&ReadLower)//檢查是否還有50%的數(shù)據(jù)
{
//獲取緩沖區(qū)的下半部分
IsError(MccService.WinBufToArray64(buffer,longArray,0,HALFBUFFSIZE));
DisplayData(longArray,HALFBUFFSIZE / CHANCOUNT);
ReadLower = false; //控制下一次讀取的標(biāo)志
}
否則如果((索引<HALFBUFFSIZE)&!ReadLower)
{
//獲取上半部分
IsError(MccService.WinBufToArray64(buffer,longArray,HALFBUFFSIZE,HALFBUFFSIZE));;
DisplayData(longArray,HALFBUFFSIZE / CHANCOUNT);
ReadLower = true; //控制下一次讀取的標(biāo)志
}
} while(!Console.KeyAvailable);
cki = Console.ReadKey();
//停止輸出定時器
daq.PulseOutStop(OutTimerNum);
IsError(daq.StopBackground(FunctionType.CtrFunction));
IsError(daq.PulseOutStop(OutTimerNum));
//釋放內(nèi)存
IsError(MccService.WinBufFreeEx(buffer));
WaitForKey();
}
}