📄 2205dma.frm
字号:
ForeColor = &H0000FFFF&
Height = 255
Index = 1
Left = 45
TabIndex = 7
Top = 1020
Width = 600
End
Begin VB.Label labValue
Alignment = 1 'Right Justify
Appearance = 0 'Flat
BackColor = &H00C0C0C0&
Caption = "10.0"
ForeColor = &H0000FFFF&
Height = 255
Index = 0
Left = 45
TabIndex = 6
Top = 420
Width = 600
End
Begin VB.Label labVots
Appearance = 0 'Flat
BackColor = &H00C0C0C0&
Caption = "Volt"
ForeColor = &H0000FFFF&
Height = 255
Left = 180
TabIndex = 5
Top = 195
Width = 435
End
End
Begin VB.Label txtXfer
Alignment = 1 'Right Justify
ForeColor = &H00C00000&
Height = 375
Left = 5160
TabIndex = 34
Top = 6000
Width = 2115
End
Begin VB.Menu mnuExit
Caption = "E&xit!"
End
End
Attribute VB_Name = "dma2205"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Const DISP_COUNT = 1000
Dim gnADChn As Long
Dim gnCount As Long
Dim gnClkDiv As Integer
Dim trigLevel As Integer
Dim trigLLevel As Integer
Dim count1 As Long
Dim ch_cnt As Integer
Dim gnBuffer(400000) As Integer
Dim dma_size As Long
Dim bStop As Integer
Dim startPos As Long
'Dim Range As Integer
Private Sub btnStart_Click()
Dim result As Long
Dim status As Byte
Dim i As Long, k As Long
Dim ReTrgCnt As Integer, MCnt As Integer, PostCnt As Integer
Dim TimerSrc As Integer
PostCnt = CInt(txtPostCount.Text)
dma_size = CLng(cobDataSize.Text)
ch_cnt = CLng(cobChn.ListIndex)
ch_cnt = ch_cnt + 1
'Range = AD_B_10_V
btnStart.Enabled = False
For i = 0 To 3 Step 1
result = D2K_AI_CH_Config(card, ch_num(i), ch_range(i) Or (ch_ref(i) * 256))
Next
If cobTrigMode.ListIndex > 1 Then
result = D2K_AI_Config(card, 0, (CLng(cobTrigMode.ListIndex) * 8) Or CLng(cobTrigSrc.ListIndex), PostCnt, 0, 1, 1)
Else
result = D2K_AI_Config(card, 0, (CLng(cobTrigMode.ListIndex) * 8) Or CLng(cobTrigSrc.ListIndex) Or (CLng(cobTrigPol.ListIndex) * 4096), PostCnt, 0, 1, 1)
End If
result = D2K_AI_ContBufferSetup(card, gnBuffer(0), dma_size * ch_cnt, Id)
'If cobTrigSrc.ListIndex = 1 Then
'result = D2K_AIO_Config(card, cobClkSrc.ListIndex, Above_High_Level Or CH0ATRIG, CLng(cobTrigLevel.Text), CLng(cobTrigLevel.Text))
'End If
result = D2K_AIO_Config(card, cobClkSrc.ListIndex, (CLng(cobTrigPol.ListIndex) * 256) Or CH0ATRIG, CLng(cobTrigLevel.Text), CLng(cobTrigL_Level.Text))
status = 0
'result = D2K_AI_ContScanChannels(card, ch_cnt - 1, Id, dma_size, gnClkDiv * ch_cnt, gnClkDiv, ASYNCH_OP)
result = D2K_AI_ContReadMultiChannels(card, ch_cnt, ch_num(0), Id, dma_size, gnClkDiv * ch_cnt, gnClkDiv, ASYNCH_OP)
k = 0
bStop = 0
While status = 0 And bStop = 0
result = D2K_AI_AsyncCheck(card, status, count1)
If cobTrigMode.ListIndex > 1 Then
If CLng(cobTrigSrc.ListIndex) = 0 Then
k = k + 1
If k = 5000 Then
bStop = 1
End If
End If
End If
Wend
result = D2K_AI_AsyncClear(card, startPos, count1)
txtXfer.Caption = "Total xfer: " & CStr(count1)
scrollView.Value = 0
scrollView.Max = Fix((count1 - 1) / DISP_COUNT)
ShowData 0, Min(count1, DISP_COUNT)
btnStart.Enabled = True
End Sub
Private Sub btnStop_Click()
Dim result As Long
result = D2K_AI_AsyncClear(card, startPos, count1)
bStop = 1
End Sub
Private Sub cobRate_Click()
gnClkDiv = Val(cobRate.Text)
End Sub
'Private Sub cobTrigLevel_Click()
' DrawTrigLevel trigLevel, CInt(cobTrigLevel.Text)
'trigLevel = CInt(cobTrigLevel.Text)
'End Sub
Private Sub cobTrigLevel_Click()
If trigLLevel > CInt(cobTrigLevel.Text) Then
MsgBox "H_TrigLevel can't be smaller than L_TrigLevel."
cobTrigLevel.ListIndex = trigLevel / 8
'cobTrigLevel.Text = CStr(trigLevel)
Else
DrawTrigLevel trigLevel, CInt(cobTrigLevel.Text), trigLLevel, trigLLevel
trigLevel = CInt(cobTrigLevel.Text)
End If
End Sub
Private Sub cobTrigL_Level_Click()
If CInt(cobTrigL_Level.Text) > trigLevel Then
MsgBox "L_TrigLevel can't be larger than H_TrigLevel."
cobTrigL_Level.ListIndex = trigLLevel / 8
'cobTrigL_Level.Text = CStr(trigLLevel)
Else
DrawTrigLevel trigLevel, CInt(cobTrigLevel.Text), trigLLevel, CInt(cobTrigL_Level.Text)
trigLLevel = CInt(cobTrigL_Level.Text)
End If
End Sub
Private Sub cobTrigSrc_Click()
If cobTrigSrc.ListIndex = 0 Then
cobTrigPol.Enabled = False
cobTrigLevel.Enabled = False
cobTrigL_Level.Enabled = False
ElseIf cobTrigSrc.ListIndex = 1 Then
cobTrigPol.Enabled = True
cobTrigPol.Clear
cobTrigPol.AddItem "BelowLowlevel"
cobTrigPol.AddItem "AboveHighLevel"
cobTrigPol.AddItem "Inside_Region"
cobTrigPol.AddItem "High_Hysteresis"
cobTrigPol.AddItem "Low_Hysteresis"
cobTrigPol.ListIndex = 0
cobTrigLevel.Enabled = True
cobTrigL_Level.Enabled = True
ElseIf cobTrigSrc.ListIndex = 2 Then
cobTrigPol.Enabled = True
cobTrigPol.Clear
cobTrigPol.AddItem "Positive"
cobTrigPol.AddItem "Negative"
cobTrigPol.ListIndex = 0
cobTrigLevel.Enabled = False
cobTrigL_Level.Enabled = False
End If
End Sub
Private Sub Form_Load()
Dim result As Long
Dim i As Integer
SettingForm.Show 1
If card < 0 Then
Select Case card_type
Case DAQ_2205:
MsgBox "DAQ-2205 Register_Card Error"
Case DAQ_2206:
MsgBox "DAQ-2206 Register_Card Error"
Case DAQ_2213:
MsgBox "DAQ-2213 Register_Card Error"
Case DAQ_2214:
MsgBox "DAQ-2214 Register_Card Error"
End Select
End
End If
ChSettingForm.Show 1
cobDataSize.AddItem "2000"
cobDataSize.AddItem "4000"
cobDataSize.AddItem "8000"
cobDataSize.AddItem "20000"
cobDataSize.AddItem "40000"
cobDataSize.AddItem "80000"
cobDataSize.ListIndex = 0
cobChn.AddItem CStr(CStr(ch_num(0)))
cobChn.AddItem CStr(CStr(ch_num(0)) + "," + CStr(ch_num(1)))
cobChn.AddItem CStr(CStr(ch_num(0)) + "," + CStr(ch_num(1)) + "," + CStr(ch_num(2)))
cobChn.AddItem CStr(CStr(ch_num(0)) + "," + CStr(ch_num(1)) + "," + CStr(ch_num(2)) + "," + CStr(ch_num(3)))
cobChn.ListIndex = 0
txtPostCount.Text = 500
cobTrigMode.AddItem "Post-Trigger"
cobTrigMode.AddItem "Delay-Trigger"
cobTrigMode.AddItem "Pre-Trigger"
cobTrigMode.AddItem "Middle-Trigger"
cobTrigMode.ListIndex = 0
cobTrigSrc.AddItem "Software"
cobTrigSrc.AddItem "Analog CH0"
cobTrigSrc.AddItem "External Digital"
cobTrigSrc.ListIndex = 0
cobTrigPol.AddItem "Positive"
cobTrigPol.AddItem "Negative"
cobTrigPol.ListIndex = 0
For i = 0 To 31
cobTrigLevel.AddItem i * 8
Next
cobTrigLevel.AddItem 255
trigLevel = -1
cobTrigLevel.ListIndex = 16 '128, 0V
trigLevel = 128
For i = 0 To 31
cobTrigL_Level.AddItem i * 8
Next
cobTrigL_Level.AddItem 255
trigLLevel = -1
cobTrigL_Level.ListIndex = 16 '128, 0V
trigLLevel = 128
cobClkSrc.AddItem "Internal"
cobClkSrc.AddItem "External"
cobClkSrc.ListIndex = 0
If card_type = 0 Then
cobRate.AddItem "80"
cobRate.AddItem "100"
cobRate.AddItem "200"
cobRate.AddItem "400"
cobRate.AddItem "800"
cobRate.AddItem "1000"
cobRate.AddItem "2000"
cobRate.AddItem "4000"
cobRate.AddItem "5000"
cobRate.ListIndex = 0
gnClkDiv = 80
Else
cobRate.AddItem "160"
cobRate.AddItem "200"
cobRate.AddItem "400"
cobRate.AddItem "800"
cobRate.AddItem "1000"
cobRate.AddItem "2000"
cobRate.AddItem "4000"
cobRate.AddItem "5000"
cobRate.ListIndex = 0
gnClkDiv = 160
End If
bStop = 0
dma_size = 0
Label10(0).Caption = CStr(ch_num(0))
Label10(1).Caption = CStr(ch_num(1))
Label10(2).Caption = CStr(ch_num(2))
Label10(3).Caption = CStr(ch_num(3))
End Sub
Private Sub ShowData(ByVal startidx As Long, ByVal acq_count As Long)
Dim i As Long, k As Long, n As Long
Dim w As Long, h As Long
Dim X As Long, Y As Long
Dim last_x(3) As Long, last_y(3) As Long
Dim samp As Integer, trig_pos As Long
Dim Data As Double
picScreen.Cls
'DrawTrigLevel -1, trigLevel
DrawTrigLevel -1, trigLevel, -1, trigLLevel
lblLeft.Caption = CStr(CLng(scrollView.Value) * DISP_COUNT)
lblRight.Caption = CStr(CLng(lblLeft) + DISP_COUNT - 1)
w = picScreen.ScaleWidth
h = picScreen.ScaleHeight
For i = 0 To 3
last_x(i) = -1
last_y(i) = -1
Next
For i = 0 To acq_count - 1
k = (startidx + i) Mod ch_cnt
n = (startidx + i + startPos) Mod count1
X = (i * w) / (DISP_COUNT - 1)
samp = gnBuffer(n)
If ch_range(k) > 13 Then
Data = (samp + 32768) * h / 65536 / 2
Y = h / 2 - Data / (2 ^ (ch_range(k) - 15))
Else
Y = CInt((32767 - CLng(samp) / (2 ^ (ch_range(k) - 1))) * h / 65535)
End If
If last_y(k) <> -1 Then
picScreen.Line (last_x(k), last_y(k))-(X, Y), shpColor(k).BackColor
End If
last_x(k) = X
last_y(k) = Y
Next
'Set trigger position
Select Case cobTrigMode.ListIndex
Case DAQ2K_AI_TRGMOD_POST / 8
trig_pos = 0
Case DAQ2K_AI_TRGMOD_PRE / 8
trig_pos = count1 - 1
Case DAQ2K_AI_TRGMOD_DELAY / 8
trig_pos = -1
Case DAQ2K_AI_TRGMOD_MIDL / 8
trig_pos = count1 - CLng(txtPostCount.Text) * ch_cnt
End Select
If CLng(lblLeft) <= trig_pos And CLng(lblRight) >= trig_pos Then
TriggerPos.Visible = True
TriggerPos.Left = (picScreen.Left - 60) + ((trig_pos - CLng(lblLeft)) * w * Screen.TwipsPerPixelX) / (DISP_COUNT - 1)
Else
TriggerPos.Visible = False
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim result As Long
If card >= 0 Then
D2K_Release_Card (card)
End If
End Sub
Private Sub mnuExit_Click()
If card >= 0 Then D2K_Release_Card (card)
End
End Sub
Private Sub scrollView_Change()
Dim idx As Long
idx = CLng(scrollView.Value) * DISP_COUNT
'startPos = 0
ShowData idx Mod count1, Min(count1 - idx, DISP_COUNT)
End Sub
'Private Sub DrawTrigLevel(ByVal old_level As Integer, ByVal level As Integer)
' Dim w As Long, h As Long
' Dim Y As Long
' w = picScreen.ScaleWidth
'h = picScreen.ScaleHeight
'If old_level <> -1 Then
' Y = h * (255 - old_level) / 255
' picScreen.Line (0, Y)-(w, Y), &H0
'End If
'Y = h * (255 - level) / 255
'picScreen.Line (0, Y)-(w, Y), &H909090
'End Sub
Private Sub DrawTrigLevel(ByVal old_level As Integer, ByVal level As Integer, ByVal old_llevel As Integer, ByVal llevel As Integer)
Dim w As Long, h As Long
Dim Y As Long
w = picScreen.ScaleWidth
h = picScreen.ScaleHeight
If old_level <> -1 Then
Y = h * (255 - old_level) / 255
picScreen.Line (0, Y)-(w, Y), &H0
End If
If old_llevel <> -1 Then
Y = h * (255 - old_llevel) / 255
picScreen.Line (0, Y)-(w, Y), &H0
End If
Y = h * (255 - level) / 255
picScreen.Line (0, Y)-(w, Y), &H909090
Y = h * (255 - llevel) / 255
picScreen.Line (0, Y)-(w, Y), &HBBBBBB
End Sub
Private Function Min(ByVal v1 As Long, ByVal v2 As Long) As Long
If v1 < v2 Then
Min = v1
Else
Min = v2
End If
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -