以下示例演示如何使用USB-CTR04或 CTR-08測量頻率。此外,它還演示了 CConfigScan(...) 和 CInScan(...) 的使用。
要訪問 API,請添加對 McDaq 對象的引用。添加引用通常是通過右鍵單擊項目 [在項目瀏覽器下] 并選擇添加引用來完成的。完整的項目附在文章中,是使用 CSharp 使用 Visual Studio 2008 創建的。編譯和執行速度很快,因為 Windows 開銷和相關代碼最少。
為了使代碼更具可讀性,添加了一些方便的函數,例如 IsError、GetBoardNum 和 WaitForKey。IsError 函數檢查 ErrorInfo 對象中的錯誤編號,如果不是零則顯示錯誤消息。GetBoardNum 函數開始從每個數字位置讀取設備字符串,一旦找到包含標識字符串的設備字符串,它就會退出。WaitForKey 就是這樣做的 - 等待某人按下某個鍵。要查看完整的程序項目,請下載下面的附件。
免責聲明:
隨附的代碼或示例按原樣提供。它尚未作為產品進行測試或驗證,未在部署的應用程序或系統中使用,或在危險環境中使用。您承擔使用代碼或示例的所有風險。

公共常量 int CHANCOUNT = 1;
公共常量 int BUFFERSIZE = 2;
public const int HALFBUFFSIZE = BUFFERSIZE / 2;
public const string 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;
public const CounterDebounceMode DebounceMode = CounterDebounceMode.TriggerAfterStable;
public const CounterEdgeDetection EdgeDetection = CounterEdgeDetection.RisingEdge;
public const CounterTickSize TickSize = CounterTickSize.Tick20pt83ns; // 0 等于 20.833 nS 刻度大小
公共常量雙刻度 = 0.000000020833f;
public const int MapCounter = 0;
public static bool ReadLower = true;
/*//////////////////////////////////////////////// ///////////////////////////////////////
static void Main(string[] args)
{
int BoardNum = 0;
整數率 = 1;
雙頻 = 1000.0f;
雙任務 = 0.50f;
雙intDelay = 0;
短數據狀態;
整數計數;
整數索引;
Console.WriteLine("正在定位設備...請稍候\n");
BoardNum = GetBoardNum(DEVICE);
if (BoardNum == -1)
{
Console.WriteLine("未檢測到{0}!", DEVICE);
等待鍵();
返回;
}
別的
{
MccBoard daq = 新 MccDaq.MccBoard(BoardNum);
//分配緩沖區
IntPtr 緩沖區 = MccService.WinBufAlloc32Ex(BUFFERSIZE);
if (buffer == IntPtr.Zero)
{
Console.WriteLine("壞句柄");
返回;
}
IsError(daq.CConfigScan(CounterNum,
模式,
去抖時間,
去抖模式,
邊緣檢測,
刻度尺寸,
地圖計數器));
//出于測試目的,將一根電線從計時器零跳到零計數器。
//使用定時器作為測試信號
IsError(daq.PulseOutStart(OutTimerNum,
參考頻率,
參考值,0,
參考 intDelay,
空閑狀態。低,
PulseOutOptions.Default));
ScanOptions 選項 = ScanOptions.Default
| ScanOptions.Ctr64Bit
| ScanOptions.Continuous
| ScanOptions.Background;
IsError(daq.CInScan(CounterNum,
計數器編號,
緩沖區大小,
參考率,
緩沖,
選項));
System.ConsoleKeyInfo cki = new System.ConsoleKeyInfo();
Console.WriteLine("正在檢索數據\n");
Console.WriteLine("按任意鍵退出...\n");
Int64[] longArray = new Int64[BUFFERSIZE];
做
{
IsError(daq.GetStatus(out daqStatus, out Count, out Index, FunctionType.CtrFunction));
if ((Index >= HALFBUFFSIZE) & ReadLower) //檢查 50% 以上的數據
{
//獲取緩沖區的下半部分
IsError(MccService.WinBufToArray64(buffer, longArray, 0, HALFBUFFSIZE));
DisplayData(longArray, HALFBUFFSIZE / CHANCOUNT);
ReadLower = 假;//控制下一次讀取的標志
}
否則 if ((Index < HALFBUFFSIZE) & !ReadLower)
{
//獲取上半部分
IsError(MccService.WinBufToArray64(buffer, longArray, HALFBUFFSIZE, HALFBUFFSIZE));
DisplayData(longArray, HALFBUFFSIZE / CHANCOUNT);
ReadLower = true;//控制下一次讀取的標志
}
} while (!Console.KeyAvailable);
cki = Console.ReadKey();
//停止輸出定時器
daq.PulseOutStop(OutTimerNum);
IsError(daq.StopBackground(FunctionType.CtrFunction));
IsError(daq.PulseOutStop(OutTimerNum));
//釋放內存
IsError(MccService.WinBufFreeEx(buffer));
等待鍵();
}
}