form1.frm

来自「16 relay output channels and 16 isolated」· FRM 代码 · 共 269 行

FRM
269
字号
VERSION 5.00
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
Begin VB.Form Form1 
   Appearance      =   0  'Flat
   BackColor       =   &H80000004&
   BorderStyle     =   1  'Fixed Single
   Caption         =   "Advantech Diver Demo:DMA Data Transfer"
   ClientHeight    =   4155
   ClientLeft      =   150
   ClientTop       =   435
   ClientWidth     =   4725
   Icon            =   "Form1.frx":0000
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   4155
   ScaleWidth      =   4725
   StartUpPosition =   2  'CenterScreen
   Begin VB.Timer tmrChkStatus 
      Enabled         =   0   'False
      Left            =   3000
      Top             =   0
   End
   Begin MSComctlLib.ProgressBar prgbConv 
      Height          =   3375
      Left            =   3960
      TabIndex        =   3
      Top             =   600
      Width           =   495
      _ExtentX        =   873
      _ExtentY        =   5953
      _Version        =   393216
      Appearance      =   1
   End
   Begin VB.ListBox lstDataStatus 
      Height          =   3375
      Left            =   240
      TabIndex        =   2
      Top             =   600
      Width           =   3495
   End
   Begin VB.CommandButton cmdStatus 
      Caption         =   "Status"
      Enabled         =   0   'False
      BeginProperty Font 
         Name            =   "MS Sans Serif"
         Size            =   9.75
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Left            =   1815
      TabIndex        =   1
      Top             =   0
      Visible         =   0   'False
      Width           =   960
   End
   Begin VB.CommandButton cmdStop 
      Caption         =   "Stop"
      Enabled         =   0   'False
      BeginProperty Font 
         Name            =   "MS Sans Serif"
         Size            =   9.75
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Left            =   840
      TabIndex        =   0
      Top             =   0
      Width           =   970
   End
   Begin VB.Label Label1 
      Caption         =   "0%"
      Height          =   255
      Left            =   3960
      TabIndex        =   4
      Top             =   240
      Width           =   615
   End
   Begin VB.Menu mnuSetting 
      Caption         =   "&Setting"
   End
   Begin VB.Menu mnuDisplay 
      Caption         =   "&Display"
   End
   Begin VB.Menu mnuRun 
      Caption         =   "&Run"
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

Private Sub cmdStop_Click()
    Dim i As Long, lOverRun As Long
    Dim sTmp As String
    
    cmdStop.Enabled = False
    cmdStatus.Enabled = False
    tmrChkStatus.Enabled = False
    
    ErrCde = DRV_FAIStop(DeviceHandle)
    If ChkErr(ErrCde) <> 0 Then
        bThreadLoop = False
        Exit Sub
    End If
    gFAITransfer.ActiveBuf = 0
    gFAITransfer.DataType = gDevPar.iDataType
    gFAITransfer.start = 0
    gFAITransfer.Count = gDevPar.lConvNum
    gFAITransfer.Overrun = DRV_GetAddress(lOverRun)
    ErrCde = DRV_FAITransfer(DeviceHandle, gFAITransfer)
    If ChkErr(ErrCde) <> 0 Then
        bThreadLoop = False
        Exit Sub
    End If
    prgbConv.Enabled = False
    lstDataStatus.Enabled = True
    lstDataStatus.Clear
    For i = gDevPar.lStartPoint To gDevPar.lStopPoint
        If (gDevPar.iDataType = 1) Then         'voltage data
            sTmp = "Buffer[" & i & "] = " & Format(gTmpVolBuf(i), "#,###0.0000000")
        Else
            sTmp = "Buffer[" & i & "] = " & Hex(gTmpBuf(0))
        End If
        lstDataStatus.AddItem sTmp
    Next i
    DRV_FreeDMABuffer DeviceHandle, DRV_GetAddress(gDMABuffer)
    DRV_DeviceClose (DeviceHandle)
'    CloseHandle (ThreadHandle)
    mnuRun.Enabled = True
End Sub

Private Sub Form_Load()
    'initialize the parameter to default value
    gDevPar.bEvenEnable = 0         'disable event
    gDevPar.iCyclicMode = 0         'NonCyclicMode
    gDevPar.iDataType = 1           'Votage Data
    gDevPar.iTrigger = 0            'internal trigger
    gDevPar.lConvNum = 4000
    gDevPar.lDeviceNum = 0
    gDevPar.lPacerRate = 4000
    gDevPar.lScanChannel = 0
    gDevPar.lStartPoint = 0
    gDevPar.lStopPoint = 99
    gDevPar.lGainCode = 0
End Sub

Private Sub mnuDisplay_Click()
    frmDisp.Show vbModal
End Sub

Private Sub mnuRun_Click()
    Dim lActBufSize As Long
    Dim ptDevGetFeatures As PT_DeviceGetFeatures
    Dim DevFeature As DEVFEATURES
    Dim ptAllocDMABuf As PT_AllocateDMABuffer
    Dim ptEnableEvent As PT_EnableEvent
    Dim ptFAIDMAStart As PT_FAIDmaStart
    
    'open device
    ErrCde = DRV_DeviceOpen(gDevPar.lDeviceNum, DeviceHandle)
    If (ChkErr(ErrCde) <> 0) Then
        Exit Sub
    End If
    
    'get device feature
    ptDevGetFeatures.buffer = DRV_GetAddress(DevFeature)
    ErrCde = DRV_DeviceGetFeatures(DeviceHandle, ptDevGetFeatures)
    If (ChkErr(ErrCde) <> 0) Then
        DRV_DeviceClose DeviceHandle
        Exit Sub
    End If
    
    'Allocate DMA buffer for DMA transfer
    ptAllocDMABuf.CyclicMode = gDevPar.iCyclicMode
    ptAllocDMABuf.RequestBufSize = gDevPar.lConvNum * 2
    ptAllocDMABuf.ActualBufSize = DRV_GetAddress(lActBufSize)
    ptAllocDMABuf.buffer = DRV_GetAddress(gDMABuffer)
    ErrCde = DRV_AllocateDMABuffer(DeviceHandle, ptAllocDMABuf)
    If ChkErr(ErrCde) <> 0 Then
        DRV_DeviceClose DeviceHandle
        Exit Sub
    End If
    
    'Allocate memory for Voltage data or Raw data
    If (gDevPar.iDataType = 1) Then         'is voltage value data
        ReDim gTmpVolBuf(0 To gDevPar.lConvNum)
        gFAITransfer.DataBuffer = DRV_GetAddress(gTmpVolBuf(0))
    Else                                    'raw data
        ReDim gTmpBuf(0 To gDevPar.lConvNum)
        gFAITransfer.DataBuffer = DRV_GetAddress(gTmpBuf(0))
    End If
    
    'Enable event feature
    ptEnableEvent.EventType = ADS_EVT_INTERRUPT Or ADS_EVT_BUFCHANGE Or ADS_EVT_TERMINATED Or ADS_EVT_OVERRUN
    ptEnableEvent.Enabled = gDevPar.bEvenEnable
    ptEnableEvent.Count = 512
    ErrCde = DRV_EnableEvent(DeviceHandle, ptEnableEvent)
    If ChkErr(ErrCde) <> 0 Then
        DRV_FreeDMABuffer DeviceHandle, DRV_GetAddress(gDMABuffer)
        DRV_DeviceClose (DeviceHandle)
        Exit Sub
    End If
    
    'Start DMA transfer
    ptFAIDMAStart.TrigSrc = gDevPar.iTrigger
    ptFAIDMAStart.SampleRate = gDevPar.lPacerRate
    ptFAIDMAStart.chan = gDevPar.lScanChannel
    ptFAIDMAStart.Count = gDevPar.lConvNum
    ptFAIDMAStart.buffer = gDMABuffer
    ptFAIDMAStart.gain = DevFeature.glGainList(gDevPar.lGainCode).usGainCde
    ErrCde = DRV_FAIDmaStart(DeviceHandle, ptFAIDMAStart)
    If ChkErr(ErrCde) <> 0 Then
        DRV_FreeDMABuffer DeviceHandle, DRV_GetAddress(gDMABuffer)
        DRV_DeviceClose (DeviceHandle)
        Exit Sub
    End If
        
    tmrChkStatus.Interval = 50
    tmrChkStatus.Enabled = True
    mnuRun.Enabled = False
    cmdStop.Enabled = True
    'cmdStatus.Enabled = True
    prgbConv.Max = gDevPar.lConvNum
    prgbConv.Enabled = True
End Sub

Private Sub mnuSetting_Click()
    frmSetting.Show vbModal
End Sub

Private Sub tmrChkStatus_Timer()
    Dim lActiveBuf As Long, lStopped As Long, iRetrieved As Integer
    Dim lOverRun As Long, lHalfReady As Long
    Dim ptFAICheck As PT_FAICheck
    
    ptFAICheck.ActiveBuf = DRV_GetAddress(lActiveBuf)
    ptFAICheck.stopped = DRV_GetAddress(lStopped)
    ptFAICheck.retrieved = DRV_GetAddress(iRetrieved)
    ptFAICheck.Overrun = DRV_GetAddress(lOverRun)
    ptFAICheck.HalfReady = DRV_GetAddress(lHalfReady)
    ErrCde = DRV_FAICheck(DeviceHandle, ptFAICheck)
    If ChkErr(ErrCde) <> 0 Then
        Exit Sub
    End If
    
    If (iRetrieved = 0) Then
        iRetrieved = 1
    End If
    prgbConv.value = iRetrieved
    If (iRetrieved = gDevPar.lConvNum) Then
        Label1.Caption = "100%"
        cmdStop_Click
        Exit Sub
    End If
    Label1.Caption = Str(Format((prgbConv.value * 100 / prgbConv.Max), 0)) & "%"
End Sub

⌨️ 快捷键说明

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