這是一個簡單的 32 位控制臺應用程序,演示設備發(fā)現(xiàn)、DInScan 和 DOutScan 功能。它是在 Visual Studio 2013 中創(chuàng)建的,因此在較新的環(huán)境中打開時,您將收到可以忽略的警告。如果您收到錯誤,請檢查項目參考以了解 MCCDAQ.DLL 參考中可能存在的錯誤。如果它被標記為問題,請將其刪除并重新添加。要添加它,請右鍵單擊該項目并選擇 Add->Reference。選擇擴展并選擇 McDaq。
下面是代碼,完整的項目作為 zip 文件附加。
'import 語句有助于減少行長和輸入
進口麥達克
進口 McDaq.Range
導入 McDaq.ScanOptions
導入 McDaq.FunctionType
導入 MccDaq.ErrorInfo.ErrorCode
導入 McDaq.MccService
模塊模塊1
Const PACKETSIZE 作為整數(shù) = 256
Const CHANNELCOUNT 作為整數(shù) = 4
將 LowChan 設置為整數(shù) = 0
將 HighChan 設為整數(shù) = 3
Const SAMPLERATE As Integer = 1000 '所需的采樣率
Const BUFFERSIZE As Integer = CHANNELCOUNT * PACKETSIZE '緩沖區(qū)的大小
const HALFBUFFER As Integer = BUFFERSIZE / 2 '半緩沖區(qū)的大小
'立即觸發(fā)選項
Dim Opts As McDaq.ScanOptions = 連續(xù) + 背景 + ScaleData
Dim CurrentCount As Integer = 0 '表示采樣總數(shù)
Dim CurrentIndex As Integer = 0 '指向最后一次掃描讀取
將狀態(tài)調暗為短 = 0
Dim DAQ As MccBoard '設備對象
Dim 緩沖區(qū)作為 IntPtr
Dim ret As ErrorInfo
Dim ReadLower As Boolean = True '防止重復緩沖區(qū)讀取的信號量標志
子主()
Dim ret As McDaq.ErrorInfo
Dim bNum As Integer = -1
Dim rate As Integer = SAMPLERATE
Dim DevStr As String = " USB-1608G "
bNum = GetBoardNum(DevStr)
如果 bNum = -1 那么
Console.WriteLine("未檢測到 {0}!", DevStr)
等待鍵()
結尾
萬一
數(shù)據(jù)采集 = 沒有
DAQ = New MccDaq.MccBoard(bNum) '獲取設備' 編程對象
如果 DAQ 什么都不是,那么
Console.WriteLine("未找到板")
等待鍵()
返回
萬一
DAQ.AInputMode(AInputMode.SingleEnded)
緩沖區(qū) = MccService.ScaledWinBufAllocEx(BUFFERSIZE)
ret = DAQ.AInScan(LowChan, HighChan, BUFFERSIZE, rate, Bip10Volts, buffer, Opts)
如果 ret.Value <> MccDaq.ErrorInfo.ErrorCode.NoErrors 然后停止
''''''''''''''''''''主循環(huán)''''''''''''''''''''''''''
做
ret = DAQ.GetStatus(Status, CurrentCount, CurrentIndex, McDaq.FunctionType.AiFunction)
如果 ret.Value <> MccDaq.ErrorInfo.ErrorCode.NoErrors 然后停止
'乒乓在下半部和上半部之間
If ((CurrentIndex >= HALFBUFFER) And (ReadLower = True)) Then
'讀取下半部分并將Upper標志設置為零,以便下一次讀取是上半部分
Dim data(BUFFERSIZE) As Double
ret = MccDaq.MccService.ScaledWinBufToArray(buffer, data, 0, HALFBUFFER)
如果 ret.Value <> MccDaq.ErrorInfo.ErrorCode.NoErrors 然后停止
ReadLower = 錯誤
顯示數(shù)據(jù)(數(shù)據(jù),1)
ElseIf ((CurrentIndex < HALFBUFFER) And (ReadLower = False)) 然后
'讀取上半部分并將Upper標志設置為1,以便下一次讀取下半部分
Dim data(BUFFERSIZE) As Double
ret = MccDaq.MccService.ScaledWinBufToArray(緩沖區(qū),數(shù)據(jù),HALFBUFFER,HALFBUFFER)
如果 ret.Value <> MccDaq.ErrorInfo.ErrorCode.NoErrors 然后停止
ReadLower = 真
顯示數(shù)據(jù)(數(shù)據(jù),1)
萬一
循環(huán)(不是 Console.KeyAvailable)
'''''''''''''''''''''''''''''''''''''''''''''''' ''''''''
DAQ.StopBackground(AiFunction)
等待鍵()
結束子
'此功能專用于將節(jié)目頻道打印到控制臺屏幕
'Helper 函數(shù)專門用于打印和寫入文件的數(shù)據(jù)
Sub DisplayData(ByRef data() As Double, ByVal rows As Integer)
Dim index As Integer = 0
Dim i As Integer = 0
將 j 調暗為整數(shù) = 0
Dim temp(CHANNELCOUNT) As Single
嘗試
對于 i = 0 到行 - 1
Dim str As String = ""
對于 j = 0 到 CHANNELCOUNT - 1
str = str + data(j).ToString("0.0000") + vbTab
指數(shù) += 1
下一個
str.Trim(vbTab)
Console.WriteLine(str)
接下來我
將 e 作為異常捕獲
MsgBox(e.Message)
結束嘗試
結束子
'等待任意鍵被按下的輔助函數(shù)
子 WaitForKey()
將 cki 調暗為 ConsoleKeyInfo
Console.WriteLine("按任意鍵繼續(xù)..." + vbCrLf)
做
System.Threading.Thread.Sleep(200)
循環(huán)直到 (Console.KeyAvailable)
cki = Console.ReadKey()
Console.WriteLine("")
結束子
'Helper 函數(shù)使用字符串標識符來定位設備板號。如果存在多個設備,則
'它返回與標識符匹配的第一個。
函數(shù) GetBoardNum(ByVal devString As String) 作為整數(shù)
McDaq.DaqDeviceManager.IgnoreInstaCal()
Dim inventory() As McDaq.DaqDeviceDescriptor
Dim BoardNum 作為整數(shù)
Dim NumOfDevices 作為整數(shù) = 0
庫存 = MccDaq.DaqDeviceManager.GetDaqDeviceInventory(DaqDeviceInterface.Any)
NumOfDevices = inventory.Length()
如果 NumOfDevices > 0 那么
對于 BoardNum = 0 到 NumOfDevices
如果庫存(BoardNum).ProductName.Contains(devString) 那么
Dim daqBoard As MccDaq.MccBoard = MccDaq.DaqDeviceManager.CreateDaqDevice(BoardNum,inventory(BoardNum))
Console.WriteLine("產(chǎn)品名稱:{0}",庫存(BoardNum).ProductName)
Console.WriteLine("設備類型#:{0}",庫存(BoardNum).ProductID)
Console.WriteLine("Serial # : {0}", inventory(BoardNum).UniqueID)
退貨板號
萬一
下一個板號
萬一
返回-1
結束函數(shù)
終端模塊