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

📄 form1.frm

📁 多功能数据采集卡上位机完整代码
💻 FRM
📖 第 1 页 / 共 5 页
字号:
         Left            =   5985
         List            =   "Form1.frx":03E8
         Style           =   2  'Dropdown List
         TabIndex        =   14
         Top             =   862
         Width           =   2205
      End
      Begin VB.ComboBox cobADrange 
         Height          =   345
         ItemData        =   "Form1.frx":0408
         Left            =   2100
         List            =   "Form1.frx":0412
         Style           =   2  'Dropdown List
         TabIndex        =   7
         Top             =   405
         Width           =   2205
      End
      Begin VB.ComboBox cobShowMode 
         Height          =   345
         ItemData        =   "Form1.frx":042D
         Left            =   5985
         List            =   "Form1.frx":043D
         Style           =   2  'Dropdown List
         TabIndex        =   6
         Top             =   405
         Width           =   2205
      End
      Begin VB.ComboBox cobSFIFOsize 
         Height          =   345
         ItemData        =   "Form1.frx":0483
         Left            =   9780
         List            =   "Form1.frx":0490
         TabIndex        =   4
         Text            =   "cobSFIFOsize"
         Top             =   405
         Width           =   2205
      End
      Begin VB.ComboBox cobPsMode 
         Height          =   345
         ItemData        =   "Form1.frx":04AA
         Left            =   2100
         List            =   "Form1.frx":04B4
         Style           =   2  'Dropdown List
         TabIndex        =   3
         Top             =   1320
         Width           =   2205
      End
      Begin VB.ComboBox cobADfreq 
         Height          =   345
         ItemData        =   "Form1.frx":04DA
         Left            =   2100
         List            =   "Form1.frx":04DC
         TabIndex        =   5
         Text            =   "cobADfreq"
         Top             =   862
         Width           =   2205
      End
      Begin VB.Label lblPSNO 
         Alignment       =   1  'Right Justify
         Caption         =   "AD板通道号:"
         Height          =   225
         Left            =   4380
         TabIndex        =   81
         Top             =   1380
         Width           =   1485
      End
      Begin VB.Label lblStatic 
         AutoSize        =   -1  'True
         Caption         =   "板卡增益:"
         Height          =   225
         Index           =   0
         Left            =   4845
         TabIndex        =   13
         Top             =   915
         Width           =   1020
      End
      Begin VB.Label lblStatic 
         AutoSize        =   -1  'True
         Caption         =   "量程选择:"
         Height          =   225
         Index           =   2
         Left            =   960
         TabIndex        =   12
         Top             =   465
         Width           =   1020
      End
      Begin VB.Label lblStatic 
         AutoSize        =   -1  'True
         Caption         =   "显示方式:"
         Height          =   225
         Index           =   3
         Left            =   4860
         TabIndex        =   11
         Top             =   465
         Width           =   1020
      End
      Begin VB.Label lblStatic 
         AutoSize        =   -1  'True
         Caption         =   "AD板通道方式:"
         Height          =   225
         Index           =   4
         Left            =   495
         TabIndex        =   10
         Top             =   1380
         Width           =   1485
      End
      Begin VB.Label lblStatic 
         AutoSize        =   -1  'True
         Caption         =   "频率:"
         Height          =   225
         Index           =   5
         Left            =   1410
         TabIndex        =   9
         Top             =   945
         Width           =   570
      End
      Begin VB.Label lblStatic 
         AutoSize        =   -1  'True
         Caption         =   "SFIFO大小:"
         Height          =   225
         Index           =   6
         Left            =   8520
         TabIndex        =   8
         Top             =   465
         Width           =   1170
      End
   End
   Begin VB.Timer timerAD 
      Enabled         =   0   'False
      Interval        =   10
      Left            =   11430
      Top             =   165
   End
   Begin VB.Label lblBaseAddr 
      BorderStyle     =   1  'Fixed Single
      Caption         =   "板卡基地址"
      Height          =   360
      Left            =   1620
      TabIndex        =   1
      Top             =   120
      Width           =   1560
   End
   Begin VB.Label lblStatic 
      AutoSize        =   -1  'True
      Caption         =   "板卡基地址:"
      Height          =   225
      Index           =   1
      Left            =   255
      TabIndex        =   0
      Top             =   195
      Width           =   1245
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

Public m_timerADFinish As Boolean
Public m_timerCTFinish As Boolean
Public m_timerShowFinish As Boolean
Public m_timerDIFinish As Boolean

Dim m_amp As Long
Dim m_AIrange As Long '当前AD量程
Dim m_showMode As Long '显示方式

Const m_MaxADchCnt As Long = 8
Const m_MaxPSchCnt As Long = 16
Dim m_ADchNO As Long
Dim m_ADfreq As Long
Const m_timerCTNO As Long = 1
Const m_CTchCount As Long = 3 '计数通道数
Const m_DIchCount As Long = 16 'DI通道数
Const m_DOchCount As Long = 16 'DI通道数
Const m_PsDIchCount As Long = 4 'DI通道数
Const m_PsDOchCount As Long = 4 'DI通道数
Const m_cardInClock As Double = 2000000# '板卡内部时钟
Dim m_stop As Boolean

'Dim m_zeroVal As Single, m_fullVal As Single

Const DEF_BUFSIZE As Long = 1024000 '缓冲区大小
'Const DEF_WANTCNT_PERCH As Long = 10000 '每次每通道需要读出的数据个数
'Const DEF_CH_CNT As Long = 2 '通道数
'Dim m_readArr(DEF_WANTCNT_PERCH * DEF_CH_CNT - 1) As Integer '用于每次读数
Dim m_dataBuf(DEF_BUFSIZE - 1) As Single '申请足够大的缓冲区

Dim m_readPos As Long '缓冲区读指针,针对单通道
Dim m_writePos As Long '缓冲区写指针,针对单通道
Dim m_drawCnt As Long '每次画多少点


Private Sub DrawStr(ByRef picObj As PictureBox, _
                    ByRef rowDataStr() As String, _
                    ByVal cols As Long)
'写一行
With picObj
    If picObj Is Nothing Then MsgBox "对象不能为空": Exit Sub
    Dim arrSize As Long
    arrSize = UBound(rowDataStr) - LBound(rowDataStr) + 1
    If arrSize <= 0 Then MsgBox "数组不能为空": Exit Sub
    If cols <= 0 Then MsgBox "列数不能为0": Exit Sub
    .Cls '清屏
    .ForeColor = vbBlack
    Const DEF_ROWS As Long = 11 '18
    Const DEF_COLS As Long = 8
    
    Dim k As Long, i As Long
    'Static lastData(DEF_ROWS * DEF_COLS - 1) As Single
    Static lastArrSize  As Long
    Static lastData() As String
    If lastArrSize <> (DEF_ROWS * cols) Then
        lastArrSize = DEF_ROWS * cols
        ReDim lastData(lastArrSize - 1)
    End If
    
    '把后面向前移DEF_COLS个数
    For k = 0 To lastArrSize - cols - 1
        lastData(k) = lastData(k + cols)
    Next k
    For k = 0 To cols - 1
        lastData(k + lastArrSize - cols) = rowDataStr(k)
    Next k
    
'MsgBox Screen.TwipsPerPixelX & " , " & Screen.TwipsPerPixelY

For k = 0 To DEF_ROWS - 1
    For i = 0 To cols - 1
        '.CurrentX = (i) * 1100 + 200
        '.CurrentY = k * 200
        .CurrentX = (i) * 73 + 13
        .CurrentY = k * 15
        Dim tempStr As String
        tempStr = lastData(k * cols + i) 'Format(lastData(k * cols + i), "0.00")
        tempStr = Space(Len("+10000.00") - Len(tempStr)) & tempStr
        picObj.Print tempStr 'Format(lastData(k * 8 + i), "0.00") '"10000.00"
    Next i
Next k
End With

End Sub

Private Sub MakeADfreq(ByVal cardInClock As Long, _
                       ByVal minDivisor As Long, _
                       ByVal maxDivisor As Long)
'求所有整数的采样频率
'cardInClock 板卡内部时钟
'minDivisor 最小分频系数
'maxDivisor 最大分频系数

    cobADfreq.Clear
    Dim tempStr As String
    Dim i As Long
    For i = minDivisor To maxDivisor
        If (cardInClock / (i + 1)) = CLng(cardInClock / (i + 1)) Then
            tempStr = Format(cardInClock / (i + 1) / 1000, "0.###")
            tempStr = IIf(Right(tempStr, 1) = ".", Left(tempStr, Len(tempStr) - 1), tempStr)
            cobADfreq.AddItem tempStr & "KHz"
        End If
    Next i
End Sub

Private Sub cmdCT_Click(Index As Integer)
'停止或启动计数器
    '把initVal As Double,防止用户输入很大的数造成溢出
    Dim initVal As Double, CTMode As Long
    initVal = Val(txtInitCTval(Index).Text)
    CTMode = Val(Right(cobCTmode(Index).Text, 1))
    If initVal < 0 Or initVal > 65535 Then
        MsgBox "计数器初值不能 < 0 或 > 65535"
        Exit Sub
    End If
    If cmdCT(Index).Caption = "启动" Then
        '设置计数通道1工作方式及初值
        ZT8361_CTStart m_cardNO, Index + 1, CTMode, initVal
        m_timerCTFinish = True
        timerCT.Interval = 100
        timerCT.Enabled = True
        txtInitCTval(Index).Enabled = False
        cobCTmode(Index).Enabled = False
        cmdCT(Index).Caption = "停止"
    Else
        ZT8361_CTStop m_cardNO, Index + 1, 0
        txtInitCTval(Index).Enabled = True
        cobCTmode(Index).Enabled = True
        cmdCT(Index).Caption = "启动"
    End If
    Me.Caption = "PCI8361AN测试(错误号: " & ZT8361_GetLastErr & ")"  '返回函数执行的状态
End Sub

Private Sub cmdPStimerAD_Click()
'开始PS端子板定时采集
    If cmdPStimerAD.Caption Like "*开始PS端子*" Then
        If cobPsMode.ListIndex = 1 _
           And cobPSNO.ListIndex > 0 _
           And Val(cobADfreq.Text) > 100 Then
           MsgBox "多通道循环采集时,总采样速率应该小于等于50K。"
        End If
        '定时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)
        If ZT8361_GetSFifoSize(m_cardNO, 1) <> Val(cobSFIFOsize.Text) Then
            If ZT8361_SetSFifoSize(m_cardNO, 1, Val(cobSFIFOsize.Text)) <> Val(cobSFIFOsize.Text) Then
                MsgBox "未申请到足够的缓冲区"
                Exit Sub
            End If
        End If
    
    Dim chCnt As Long
    chCnt = Val(cobPSNO.Text)
    'Picture1.AutoRedraw = True
    If cobShowMode.ListIndex <> 3 Then
        Dim outStrArr(8 - 1) As String
        Dim k As Long
        For k = 0 To 8 - 1
            outStrArr(k) = "< CH" & k + 1 & " >" '-------"
        Next k
        DrawStr Picture1, outStrArr, chCnt
        'MsgBox ZT8361_GetLastErr '"r"
    End If
        
        '打开中断,注意HFIFO超过半满时打开中断会死机
        ZT8361_OpenIRQ m_cardNO, 0, 0, 0, 0, 0 '打开中断
        Dim ADfreq As Long, AIrange As Long
        ADfreq = m_cardInClock / (Val(cobADfreq.Text) * 1000) - 1
        
        AIrange = cobADrange.ItemData(cobADrange.ListIndex)
        Call ZT8361_InitIRQ(m_cardNO, 1)
        '每个通道有不同的增益
        Dim amp(8 - 1) As Long
        For k = 0 To 8 - 1
            amp(k) = cobAmp.ListIndex
        Next k
        Call ZT8361_AIinit(m_cardNO, cobPsMode.ListIndex, 1 * &H100 + Val(cobPSNO.Text), AIrange, amp(0), 5, ADfreq, 0, 0)
        Call ZT8361_EnableAD(m_cardNO) '允许定时AD
    m_readPos = 0
    m_writePos = 0
        
        m_timerADFinish = True
        timerAD.Interval = 100
        timerAD.Enabled = True
    
    m_timerShowFinish = True
    timerShowWave.Enabled = True
        
        cmdPStimerAD.Caption = "  停止PS端子    板定时采集"
    Else
        Call ZT8361_CloseIRQ(m_cardNO) '关闭中断
        timerAD.Enabled = False
    m_timerShowFinish = False
    timerShowWave.Enabled = False
        
        cmdPStimerAD.Caption = "  开始PS端子    板定时采集"
    End If
    If ZT8361_GetLastErr <> 0 Then Me.Caption = "PCI8361AN测试程序(错误号: " & ZT8361_GetLastErr & ")" '返回函数执行的状态
End Sub

Private Sub cobADfreq_Click()
'
    Dim tempVal As Double, tempStr As String
    tempVal =

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -