以下示例演示了如何使用外部TTL輸入觸發。一旦觸發,程序將連續獲取要緩沖的數據。
要訪問API,請添加對MccDaq對象的引用。添加引用通常是通過右鍵單擊“項目”(在“項目資源管理器”下)并選擇“添加引用”。完整的項目附在文章后,并使用CSharp與Visual Studio 2008一起創建。由于Windows開銷和相關代碼最少,因此編譯和執行速度很快。
盡管未在下面顯示,但添加了一些便利功能,例如IsError,GetBoardNum,DisplayData,CreateFileHeader和WaitForKey。要查看所有功能,請通過解壓縮底部的zip文件來下載完整的Visual Studio 2008項目。
IsError函數檢查ErrorInfo對象中的錯誤號,如果不為零,則顯示錯誤消息。GetBoardNum函數搜索與標識字符串匹配的設備,找到后退出并返回InstaCal分配的板號。板號用于獲取具有AInScan功能的控制設備對象。CreateFileHeader將獲取信息寫入輸出文件的開頭。顯示數據將數據寫入文件和控制臺屏幕。而WaitForKey就是這樣做的-等待某人按下空格鍵。
該功能非常簡單,采集等待一個上升沿TTL信號出現在外部觸發輸入上,并且在接收到它時就連續將數據放入緩沖區。要命令API查看外部觸發器輸入,請使用“掃描選項”枚舉ExtTrigger。一旦檢測到,程序將在讀取下半部分和上半部分之間進行一次ping響應,以嘗試跟進輸入數據,從而一次檢索一半緩沖區。以高速率采樣時,應注意不要覆蓋未讀取的數據。
免責聲明:
隨附的代碼或 示例 按原樣提供。它尚未經過測試或驗證,不能作為產品,不能在已部署的應用程序或系統中使用或在危險環境中使用。您承擔使用本代碼或示例的所有風險 。
/////////////////////////////////////////////////////
使用系統;
使用MccDaq;
使用System.IO;
命名空間AnalogInDigitalTrigger
{
班級計劃
{
public const int BLOCKSIZE = 50;
public const int CHANCOUNT = 4;
public const int FIRSTCHANNEL = 0;
public const int LASTCHANNEL = 3;
public const int FREQ = 100;
public const int BUFFERSIZE = BLOCKSIZE * CHANCOUNT;
public const int HALFBUFFSIZE = BUFFERSIZE / 2;
公共常量字符串DEVICE =“ 1608G”;
公共靜態StreamWriter fStream;
靜態void Main(string [] args)
{
MccDaq.ErrorInfo RetVal;
int BoardNum = 0;
int DeviceChannels = 0;
int費率= FREQ;
BoardNum = GetBoardNum(DEVICE);
如果(BoardNum == -1)
Console.WriteLine(“未檢測到USB- {0}!”,DEVICE);
別的
{
MccBoard daq =新的MccDaq.MccBoard(BoardNum);
daq.BoardConfig.GetNumAdChans(out DeviceChannels);
如果(DeviceChannels> 8)
Console.WriteLine(“單端通道”);
別的
Console.WriteLine(“差分結束的通道”);
IntPtr緩沖區= MccService.ScaledWinBufAllocEx(BUFFERSIZE);
如果(緩沖區== IntPtr.Zero)
{
Console.WriteLine(“ Bad Handle”);
返回;
}
short [] chArray = new short [CHANCOUNT];
Range [] chRange =新的Range [CHANCOUNT];
chArray [0] = 0;
chArray [1] = 1;
chArray [2] = 2;
chArray [3] = 3;
chRange [0] = Range.Bip10Volts;
chRange [1] = Range.Bip10Volts;
chRange [2] = Range.Bip10Volts;
chRange [3] = Range.Bip10Volts;
RetVal = daq.ALoadQueue(chArray,chRange,CHANCOUNT);
IsError(RetVal);
//指定ScanOptions.ExtTrigger使用TRIG輸入
ScanOptions MyScanOptions = ScanOptions.Background |
ScanOptions.ScaleData |
ScanOptions.ExtTrigger |
ScanOptions.Continuous;
//設置獲取
RetVal = daq.AInScan(FIRSTCHANNEL,
LASTCHANNEL,
緩沖區大小,
參考率
Range.Bip10Volts,
緩沖,
MyScanOptions
);
IsError(RetVal);
int Count = 0;
int索引= 0;
簡短的daqStatus;
bool ReadLower = true;
double [] theArray = new double [BUFFERSIZE];
fStream =新的StreamWriter(@“ C:\ Users \ Public \ Documents \ DataFile1608G.asc”);
CreateFileHeaders(chArray); //將基本信息寫入文件的開頭
Console.WriteLine(“正在等待外部TTL觸發...按任意鍵退出循環。”);
//循環直到按鍵
做
{
RetVal = daq.GetStatus(out daqStatus,out Count,out Index,FunctionType.AiFunction);
if((Index> = HALFBUFFSIZE)&ReadLower)//檢查是否還有50%的數據
{
//獲取緩沖區的下半部分-ScaledWinBufToArray返回工程單位
RetVal = MccService.ScaledWinBufToArray(buffer,theArray,0,HALFBUFFSIZE);
IsError(RetVal);
DisplayData(theArray,HALFBUFFSIZE / CHANCOUNT);
ReadLower = false; //控制下一次讀取的標志
}
否則如果((索引<HALFBUFFSIZE)&!ReadLower)
{
//獲取上半部分-ScaledWinBufToArray返回工程單位
RetVal = MccService.ScaledWinBufToArray(buffer,theArray,HALFBUFFSIZE,HALFBUFFSIZE);
IsError(RetVal);
DisplayData(theArray,HALFBUFFSIZE / CHANCOUNT);
ReadLower = true; //控制下一次讀取的標志
}
} while(!Console.KeyAvailable);
RetVal = daq.StopBackground(FunctionType.AiFunction);
IsError(RetVal);
MccService.WinBufFreeEx(buffer);
WaitForKey();
}
}