⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.vb

📁 多功能数据采集卡上位机完整代码
💻 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 + -