📄 form1.vb
字号:
Public Class Form1
Dim m_cardNO As Int32
Const m_cardInClock As Int32 = 2400000
Const m_MaxADchCnt As Int32 = 8
Dim m_bTimerADFinish As Boolean
Dim m_floatData(819200) As Single '申请足够大的缓冲区,应该是4096的整数倍,并且缓冲区大小至少大于4096
Dim m_TextBoxes(8) As TextBox
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
'关闭设备
ZT8361_ClearLastErr()
If ZT8361_CloseDevice(m_cardNO) <> 0 Then
'MsgBox "关闭设备失败 " & ZT8361_GetLastErr
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'窗体居中
'Me.StartPosition = FormStartPosition.CenterScreen
Dim ScreenHeight = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height
Dim ScreenWidth = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width
Me.Left = (ScreenWidth - Me.Width) / 2
Me.Top = (ScreenHeight - Me.Height) / 3
Dim ctrl As Control
For Each ctrl In Me.GroupBox1.Controls
'For Each ctrl In Me.Panel1.Controls
If ctrl.ToString().IndexOf("TextBox") > 0 Then
'得到索引号
Dim index As Int32
index = index.Parse(ctrl.Name.Substring(7)) - 1
m_TextBoxes(index) = ctrl
ctrl.Text = "通道" + (index + 1).ToString()
End If
Next ctrl
'打开设备
m_cardNO = 1
If ZT8361_OpenDevice(m_cardNO) <> 0 Then
MsgBox("打开设备失败,找不到指定的板卡。")
End
End If
Me.Text = "PCI8361BN测试程序(错误号: " & ZT8361_GetLastErr.ToString & ")" '显示当前错误号
End Sub
Private Sub cmdStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStart.Click
'开始AD
'定时AD准备工作
Call ZT8361_CloseIRQ(m_cardNO) '关闭中断
Call ZT8361_DisableAD(m_cardNO) '停止定时AD
Call ZT8361_ClearHFifo(m_cardNO, 1) '清空硬件FIFO(HFIFO)
Call ZT8361_ClearSFifo(m_cardNO, 1) '清空AD软件FIFO(SFIFO)
ZT8361_OpenIRQ(m_cardNO, 0, 0, 0, 0, 0) '打开中断
Call ZT8361_InitIRQ(m_cardNO, 1)
'每个通道有不同的增益
Dim amp(8 - 1) As Int32
Dim k As Int32
For k = 0 To 8 - 1
amp(k) = 0
Next k
Dim ADfreq As Int32, AIrange As Int32
AIrange = AI.Range_0__10000mV
ADfreq = m_cardInClock / (50000) - 1
Call ZT8361_AIinit(m_cardNO, 1, 1 * &H100 + 8, AIrange, amp(0), 5, ADfreq, 0, 0)
Call ZT8361_EnableAD(m_cardNO) '允许定时AD
m_bTimerADFinish = True
Timer1.Interval = 100
Timer1.Enabled = True
If ZT8361_GetLastErr <> 0 Then Me.Text = "PCI8361BN测试程序(错误号: " & ZT8361_GetLastErr.ToString & ")" '返回当前错误号
End Sub
Private Sub cmdStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStop.Click
'停止AD
Call ZT8361_CloseIRQ(m_cardNO) '关闭中断
m_bTimerADFinish = False
Timer1.Enabled = False
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
'用于定时启动AD方式,成批读数
If m_bTimerADFinish = False Then Exit Sub
m_bTimerADFinish = False
Dim retCount As Int32, currCount As Int32, countPerCh As Int32, AIrange As Int32
Dim sum(m_MaxADchCnt - 1) As Double
Dim wantCount As Int32, k As Int32, i As Int32
wantCount = 40960 '200000
AIrange = AI.Range_0__10000mV
currCount = ZT8361_GetSFifoDataCount(m_cardNO, 1)
If currCount >= wantCount Then
'
retCount = ZT8361_AISFifo(m_cardNO, 0, m_floatData(0), wantCount)
If retCount <> wantCount Then MsgBox("读取数据错误") : Exit Sub
'取一部分求平均值显示,不带通道号
For k = 0 To 8 - 1
sum(k) = 0
For i = 0 To 100 - 1
sum(k) = sum(k) + m_floatData(i * 8 + k)
Next i
m_TextBoxes(k).Text = Format(sum(k) / 100.0#, "0.00")
Next k
End If
'显示当前SFIFO中的数据个数
If ZT8361_GetLastErr = 0 Then
GroupBox1.Text = "当前SFIFO中数据个数: " & currCount.ToString
Else
If ZT8361_GetLastErr <> 0 Then Me.Text = "PCI8361BN测试程序(错误号: " & ZT8361_GetLastErr.ToString & ")" '返回当前错误号
End If
m_bTimerADFinish = True
End Sub
End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -