這是一個(gè)簡(jiǎn)單的 32 位控制臺(tái)應(yīng)用程序,演示設(shè)備發(fā)現(xiàn)、DInScan 和 DOutScan 功能。它是在 Visual Studio 2008 中創(chuàng)建的,因此在較新的環(huán)境中打開時(shí),您將收到可以忽略的警告。如果您收到錯(cuò)誤,請(qǐng)檢查項(xiàng)目參考以了解 MCCDAQ.DLL 參考中可能存在的錯(cuò)誤。如果它被標(biāo)記為問題,請(qǐng)將其刪除并重新添加。
下面是代碼,完整的項(xiàng)目作為 zip 文件附加。
'import 語句有助于減少行長和輸入
進(jìn)口麥達(dá)克
導(dǎo)入 McDaq.ScanOptions
導(dǎo)入 McDaq.ChannelType
進(jìn)口 McDaq.Range
導(dǎo)入 McDaq.DigitalPortType
導(dǎo)入 McDaq.FunctionType
導(dǎo)入 MccDaq.ErrorInfo.ErrorCode
導(dǎo)入 McDaq.MccService
進(jìn)口系統(tǒng)
導(dǎo)入 System.Convert
導(dǎo)入 System.Threading.Thread
導(dǎo)入 System.Timers
進(jìn)口系統(tǒng).IO
模塊模塊1
Const BLOCKSIZE As Integer = 5000 '每通道采樣數(shù)
Const SAMPLERATE As Integer = 1000 '所需的采樣率
'因?yàn)閴K大小是采樣率的 5 倍 - 輸入輸出掃描時(shí)間為 5 秒
Dim CurrentCount As Integer = 0 '表示采樣總數(shù)
Dim CurrentIndex As Integer = 0 '指向最后一次掃描讀取
將狀態(tài)調(diào)暗為短 = 0
Dim DaqBoard As MccBoard '設(shè)備對(duì)象
Dim memHandle As IntPtr
Dim ret As ErrorInfo
子主()
Dim ret As McDaq.ErrorInfo
Dim str As String = " USB-DIO32HS "
Dim cki As ConsoleKeyInfo = 新的 ConsoleKeyInfo
MccService.ErrHandling(ErrorReporting.DontPrint, ErrorHandling.DontStop)
McDaq.DaqDeviceManager.IgnoreInstaCal()
Dim bNum As Integer = -1
Dim BoardNum As Integer = 0
'獲取設(shè)備清單以發(fā)現(xiàn)設(shè)備
'這樣做你不需要運(yùn)行 InstCal 但你確實(shí)需要安裝它
將庫存調(diào)暗為 MccDaq.DaqDeviceDescriptor() = MccDaq.DaqDeviceManager.GetDaqDeviceInventory(DaqDeviceInterface.Any)
Dim numDevDiscovered As Integer = inventory.Length
如果 numDevDiscovered > 0 那么
對(duì)于 BoardNum = 0 到 numDevDiscovered - 1
Dim daq As MccDaq.MccBoard = DaqDeviceManager.CreateDaqDevice(BoardNum,inventory(BoardNum))
如果 daq.BoardName = " USB-DIO32HS " 那么
bNum = BoardNum
萬一
退出
下一個(gè)
萬一
如果 (bNum > -1) 那么
DaqBoard = New MccBoard(bNum) '獲取設(shè)備對(duì)象
別的
停止
萬一
'設(shè)置數(shù)字端口0為輸出
ret = DaqBoard.DConfigPort(AuxPort0, DigitalPortDirection.DigitalOut)
如果 ret.Value <> MccDaq.ErrorInfo.ErrorCode.NoErrors 那么
停止
萬一
'設(shè)置數(shù)字端口1為輸入
ret = DaqBoard.DConfigPort(AuxPort1, MccDaq.DigitalPortDirection.DigitalIn)
如果 ret.Value <> MccDaq.ErrorInfo.ErrorCode.NoErrors 那么
停止
萬一
'分配驅(qū)動(dòng)程序內(nèi)存
memHandle = MccService.WinBufAllocEx(BLOCKSIZE)
Dim rate As Integer = SAMPLERATE
'從端口1讀取數(shù)據(jù)
Console.WriteLine("讀取端口 1...需要 5 秒")
ret = DaqBoard.DInScan(AuxPort1, BLOCKSIZE, rate, memHandle, Background)
如果 ret.Value <> MccDaq.ErrorInfo.ErrorCode.NoErrors 然后停止
做
ret = DaqBoard.GetStatus(Status, CurrentCount, CurrentIndex, McDaq.FunctionType.DiFunction)
Threading.Thread.Sleep(1)
循環(huán)直到(狀態(tài) = 0)
DaqBoard.StopBackground(DiFunction)
'將數(shù)據(jù)傳輸?shù)奖镜鼐彌_區(qū)
Dim data(BLOCKSIZE) As UShort
ret = MccService.WinBufToArray(memHandle, data, 0, BLOCKSIZE)
如果 ret.Value <> MccDaq.ErrorInfo.ErrorCode.NoErrors 然后停止
Dim i 作為整數(shù)
'打印幾個(gè)點(diǎn)
Console.WriteLine("打印 256 個(gè)值")
對(duì)于 i = 0 到 256
Console.Write("{0},", data(i))
下一個(gè)
Console.WriteLine(vbCrLf)
'制作一些數(shù)據(jù)輸出
將角度調(diào)暗為 Double = 6.28318 / BLOCKSIZE
將值調(diào)暗為雙倍
對(duì)于 i = 0 到 BLOCKSIZE
值 = (System.Math.Sin(angle * i) + 1) * 65535 / 2
數(shù)據(jù)(i) = System.Convert.ToUInt16(value)
下一個(gè)
'將數(shù)據(jù)寫入驅(qū)動(dòng)程序
ret = MccService.WinArrayToBuf(data, memHandle, 0, BLOCKSIZE)
如果 ret.Value <> MccDaq.ErrorInfo.ErrorCode.NoErrors 然后停止
Console.WriteLine("從端口 0 發(fā)送緩沖區(qū)...需要 5 秒")
'從端口0發(fā)送數(shù)據(jù)
ret = DaqBoard.DOutScan(AuxPort0, BLOCKSIZE, rate, memHandle, Background)
如果 ret.Value <> MccDaq.ErrorInfo.ErrorCode.NoErrors 然后停止
做
ret = DaqBoard.GetStatus(狀態(tài),CurrentCount,CurrentIndex,MccDaq.FunctionType.DoFunction)
Threading.Thread.Sleep(1)
循環(huán)直到(狀態(tài) = 0)
DaqBoard.StopBackground(DoFunction)
Console.WriteLine("完成...按鍵退出。")
cki = Console.ReadKey()
如果 Console.KeyAvailable = True 那么
cki = Console.ReadKey()
萬一
結(jié)束子