以下示例演示如何使用計數器輸出引腳輸出兩個信號。計數器門輸入用于啟動/停止輸出。
這是一個使用 MCCDAQ dot net API 的 CSharp 程序。本文隨附了完整的 Visual Studio 2008 項目。
要訪問 API,請添加對 McDaq 對象的引用。添加引用通常是通過右鍵單擊項目 [在項目瀏覽器下] 并選擇添加引用來完成的。完整的項目附在文章中,是使用 CSharp 使用 Visual Studio 2008 創建的。編譯和執行速度很快,因為 Windows 開銷和相關代碼最少。
為了使代碼更具可讀性,添加了一些方便的函數,例如 IsError、GetBoardNum 和 WaitForKey。IsError 函數檢查 ErrorInfo 對象中的錯誤編號,如果不是零則顯示錯誤消息。GetBoardNum 函數開始從每個數字位置讀取設備字符串,一旦找到包含標識字符串的設備字符串,它就會退出。WaitForKey 就是這樣做的 - 等待某人按下某個鍵。要查看完整的程序項目,請下載下面的附件。
免責聲明:
隨附的代碼或示例按原樣提供。它尚未作為產品進行測試或驗證,未在部署的應用程序或系統中使用,或在危險環境中使用。您承擔使用代碼或示例的所有風險。
-------------------------------------------------- -------------------------------------------------- --------------
使用系統;
使用麥達克;// 同時,向項目添加對 McDaq 的引用
命名空間周期模式
{
課程計劃
{
public const string DEVICE = "USB-CTR"; //適用于USB-CTR04或USB-CTR08
public const int OutTimerNum = 0; //頻率源 - 連接到計數器輸入 0 & 1
public const CounterMode Mode = CounterMode.RangeLimitOn|
CounterMode.OutputInitialStateLow|
CounterMode.OutputOn|
CounterMode.GatingOn;
/*//////////////////////////////////////////////// ///////////////////////////////////////
static void Main(string[] args)
{
int BoardNum = 0;
雙頻 = 1000000.0f; //1MHz
雙任務 = 0.50f;
雙intDelay = 0;
int CounterNum = 0;
int MapCounter = 0;
Console.WriteLine("正在定位設備...請稍候\n");
BoardNum = GetBoardNum(DEVICE);
if (BoardNum == -1)
{
Console.WriteLine("未檢測到{0}!", DEVICE);
WaitForKey("按任意鍵退出\n");
返回;
}
別的
{
MccBoard daq = 新 MccDaq.MccBoard(BoardNum);
//數字位D0控制啟用計數器的計數器門
IsError(daq.DConfigPort(DigitalPortType.AuxPort,DigitalPortDirection.DigitalOut));
//將D0設置為低以禁用計數
IsError(daq.DOut(DigitalPortType.AuxPort, 0));
//指示計數器計數到1000,每次達到100
//輸出一個高電平直到計數為200
計數器編號 = 0;
IsError(daq.CConfigScan(CounterNum,
模式,
CounterDebounceTime.Debounce500ns,
CounterDebounceMode.TriggerAfterStable,
CounterEdgeDetection.RisingEdge,
CounterTickSize.Tick20pt83ns,
地圖計數器));
IsError(daq.CLoad32(CounterRegister.MinLimitReg0, 0));//從0計數到999或1000uS
IsError(daq.CLoad32(CounterRegister.MaxLimitReg0, 999));
IsError(daq.CLoad32(CounterRegister.OutputVal0Reg0, 1)); //設置為1,以便初始狀態為低
IsError(daq.CLoad32(CounterRegister.OutputVal1Reg0, 100));//啟動后100uS設置計數器輸出低
//指示計數器計數到1000,每次達到800
//輸出一個高電平直到計數為900
計數器編號 = 1;
IsError(daq.CConfigScan(CounterNum,
模式,
CounterDebounceTime.Debounce500ns,
CounterDebounceMode.TriggerAfterStable,
CounterEdgeDetection.RisingEdge,
CounterTickSize.Tick20pt83ns,
地圖計數器));
IsError(daq.CLoad32(CounterRegister.MinLimitReg1, 0)); //從 0 到 999 或 1000uS 計數
IsError(daq.CLoad32(CounterRegister.MaxLimitReg1, 999));
IsError(daq.CLoad32(CounterRegister.OutputVal0Reg1, 401));//在401uS設置計數器輸出高
IsError(daq.CLoad32(CounterRegister.OutputVal1Reg1, 500));//100uS 后置低
//將定時器輸出 0 連接到計數器輸入 0 和 1,以便計數器可以計數
IsError(daq.PulseOutStart(OutTimerNum,
參考頻率,
參考值,0,
參考 intDelay,
空閑狀態。低,
PulseOutOptions.Default));
WaitForKey("按任意鍵開始輸出\n");
//將D0設置為高以啟用計數
IsError(daq.DOut(DigitalPortType.AuxPort, 1));
WaitForKey("按任意鍵退出\n");
IsError(daq.DOut(DigitalPortType.AuxPort, 0)); //設置D0回低
IsError(daq.PulseOutStop(OutTimerNum)); //禁用頻率源
IsError(daq.CClear(0));//清除計數器0
IsError(daq.CClear(1));//清除計數器1
}
}
/*//////////////////////////////////////////////// ///////////////////////////////////////
public static int GetBoardNum(string dev)
{
for (int BoardNum = 0; BoardNum < 99; BoardNum++)
{
MccDaq.MccBoard daq = 新 MccDaq.MccBoard(BoardNum);
if (daq.BoardName.Contains(dev))
{
Console.WriteLine("板號 = {0}\n",BoardNum.ToString());
返回 BoardNum;
}
}
返回-1;
}
/*//////////////////////////////////////////////// ///////////////////////////////////////
public static void WaitForKey(string s)
{
Console.WriteLine(s);
做
{ //空閑循環
System.Threading.Thread.Sleep(10);
} while (!Console.KeyAvailable);
Console.ReadKey();
}
/*//////////////////////////////////////////////// ///////////////////////////////////////
public static int IsError(ErrorInfo e)
{
如果 (e.Value != 0)
{
Console.WriteLine(e.Message);
WaitForKey("按任意鍵繼續\n");
返回 1;
}
返回0;
}
/*//////////////////////////////////////////////// ///////////////////////////////////////
}
}