以下示例演示如何將數(shù)據(jù)數(shù)組輸出到模擬輸出引腳。 要訪問 API,請(qǐng)?zhí)砑訉?duì) MccDaq 對(duì)象的引用。添加引用通常通過右鍵單擊項(xiàng)目 [在項(xiàng)目資源管理器下] 并選擇添加引用來完成。本文附有完整的 Visual Studio 9.0 項(xiàng)目。
為了使代碼更具可讀性,添加了一些便利函數(shù),例如 IsError、GetBoardNum、DisplayData 和 WaitForKey。 IsError 函數(shù)檢查 ErrorInfo 對(duì)象中的錯(cuò)誤號(hào),如果不為零則顯示錯(cuò)誤消息。GetBoardNum 函數(shù)開始 從每個(gè)數(shù)字位置讀取 設(shè)備字符串,一旦找到包含標(biāo)識(shí)字符串的位置,它就會(huì)退出。顯示數(shù)據(jù)僅以列形式顯示數(shù)據(jù),WaitForKey 就是這樣做的 - 等待有人按下空格鍵。
功能相當(dāng)簡(jiǎn)單,一個(gè)通道設(shè)置為模擬輸出信號(hào)的輸入。從 AOUT 0 連接到 AIN 0 的導(dǎo)線將允許程序測(cè)量輸出正弦波。該程序計(jì)算一個(gè)完整的正弦波周期,將每個(gè)點(diǎn)存儲(chǔ)在一個(gè)數(shù)組中。數(shù)據(jù)發(fā)送到 AOUT 引腳后,程序立即讀取 AIN0 以捕獲波形。
免責(zé)聲明:
隨附的代碼或 示例 按原樣提供。它尚未作為產(chǎn)品進(jìn)行測(cè)試或驗(yàn)證,用于已部署的應(yīng)用程序或系統(tǒng),或用于危險(xiǎn)環(huán)境。您承擔(dān)使用代碼或 示例的所有風(fēng)險(xiǎn)。

使用系統(tǒng);
使用麥克達(dá)克;
命名空間模擬輸出掃描
{
課堂節(jié)目
{
公共常量 int BLOCKSIZE = 50;
公共常量 int CHANCOUNT = 1;
公共常量 int FIRSTCHANNEL = 0;
公共常量 int LASTCHANNEL = 0;
公共常量 int 頻率 = 100;
公共常量 int BUFFERSIZE = BLOCKSIZE * CHANCOUNT;
公共常量字符串設(shè)備=“1608G”;
靜態(tài)無效主要(字符串 [] 參數(shù))
{
MccDaq.ErrorInfo RetVal;
整數(shù)速率 = 頻率;
int BoardNum = GetBoardNum(DEVICE);
如果 (BoardNum == -1)
Console.WriteLine("未檢測(cè)到 USB-{0}!", DEVICE);
別的
{
MccBoard daq = new MccDaq.MccBoard(BoardNum);
IntPtr OutBuf = MccService.ScaledWinBufAllocEx(BUFFERSIZE);
IntPtr 緩沖區(qū) = MccService.ScaledWinBufAllocEx(BUFFERSIZE);
if( (OutBuf == IntPtr.Zero) || (buffer == IntPtr.Zero) )
{
Console.WriteLine("內(nèi)存不足");
返回;
}
雙角 = 6.28318 / BUFFERSIZE;
雙倍價(jià)值;
整數(shù)索引 = 0;
ushort[] dataArray = new ushort[BUFFERSIZE];
for (int j = 0; j < CHANCOUNT; j++)
{
for (int i = 0; i < BUFFERSIZE; i++)
{
值 = (System.Math.Sin(角度 * i) +1 ) * 32767;
dataArray[index++] = System.Convert.ToUInt16(value);
}
}
MccService.WinArrayToBuf(dataArray, OutBuf, 0, BUFERSIZE);
Console.WriteLine("\n將模擬輸出 0 連接到模擬輸入 0...");
等待鍵();
RetVal = daq.AOutScan(0,
0,
塊尺寸,
參考率,
Range.Bip10Volts,
輸出緩沖區(qū),
ScanOptions.Background
);
錯(cuò)誤(RetVal);
RetVal = daq.AInScan( FIRSTCHANNEL,
最后頻道,
緩沖區(qū)大小,
參考率,
Range.Bip10Volts,
緩沖,
ScanOptions.ScaleData
);
錯(cuò)誤(RetVal);
double[] theArray = new double[BUFFERSIZE];
RetVal = MccService.ScaledWinBufToArray(buffer, theArray, 0, BUFFERSIZE);
RetVal = daq.StopBackground(FunctionType.AiFunction);
錯(cuò)誤(RetVal);
RetVal = daq.StopBackground(FunctionType.AoFunction);
錯(cuò)誤(RetVal);
MccService.WinBufFreeEx(緩沖區(qū));
MccService.WinBufFreeEx(OutBuf);
顯示數(shù)據(jù)(數(shù)組,緩沖區(qū)大小);
等待鍵();
}
}
公共靜態(tài) int GetBoardNum(字符串開發(fā))
{
for (int BoardNum = 0; BoardNum < 99; BoardNum++)
{
MccDaq.MccBoard 數(shù)據(jù) = 新 MccDaq.MccBoard(BoardNum);
if (daq.BoardName.Contains(dev))
{
Console.WriteLine("USB-{0} 板號(hào) = {1}", dev, BoardNum.ToString());
daq.FlashLED();
返回板號(hào);
}
}
返回-1;
}
公共靜態(tài)無效 WaitForKey()
{
Console.WriteLine("\n按 <空格鍵> 繼續(xù)...");
System.ConsoleKeyInfo cki;
做
{
cki = Console.ReadKey();
} 而 (cki.Key != ConsoleKey.Spacebar);
}
公共靜態(tài) int IsError(ErrorInfo e)
{
if (e.Value != 0)
{
Console.WriteLine(e.Message);
返回 1;
}
返回0;
}
公共靜態(tài) void DisplayData(double[] datArray, int Count)
{
詮釋 i = 0;
for (int row = 0; row < Count / CHANCOUNT; row++)
{
for (int c = 0; c < CHANCOUNT; c++)
Console.Write("{0}\t", datArray[i++].ToString("0.0000").PadLeft(10));
Console.Write("\r\n");
}
}
}
}