addmabm.frm

来自「16 relay output channels and 16 isolated」· FRM 代码 · 共 608 行 · 第 1/2 页

FRM
608
字号
    

    ErrCde = DRV_FAIDmaExStart(DriverHandle, ptFAIDmaExStart)
    If ErrCde <> 0 Then
        GlobalUnlock (hUserBuf)
        GlobalUnlock (hDisplayBuf)
        GlobalFree (UserBuf)
        DRV_GetErrorMessage ErrCde, ErrMsg
        MsgBox ErrMsg, vbOKOnly, "Driver Message"
        DRV_FreeDMABuffer DriverHandle, pBuffer
        DRV_DeviceClose DriverHandle
        SetState (STATE_Ready)
        Exit Sub
    Else
    
        ptFAICheck.ActiveBuf = DRV_GetAddress(ActiveBuf)
        ptFAICheck.HalfReady = DRV_GetAddress(HalfReady)
        ptFAICheck.Overrun = DRV_GetAddress(Overrun)
        ptFAICheck.retrieved = DRV_GetAddress(retrieved)
        ptFAICheck.Stopped = DRV_GetAddress(Stopped)
        ptFAITransfer.ActiveBuf = 0  ' single buffer
        ptFAITransfer.DataType = DataType
        ptFAITransfer.Count = DispNum
        ptFAITransfer.Overrun = DRV_GetAddress(Overrun)

        BufchangeCounter = 0
        OverrunCounter = 0
        TerminateCounter = 0
        InterruptCounter = 0
       lbBufChangeCnt.Caption = 0
        lbOverrunCnt.Caption = 0
        lbInterruptCnt.Caption = 0
        lbReadyBuf.Caption = ""
        gbStopThread = False
        
       ' Create Interrupt Event handler thread and suspend it
        ThreadHandle = CreateThread(0, 0, AddressOf EventThread, vbNullString, CREATE_SUSPENDED, ThreadID)
        If (ThreadHandle = 0) Then
            Response = MsgBox("Create Thread Failed!", vbOKOnly, "Error!!")
            Response = DRV_DeviceClose(DeviceHandle)
            Exit Sub
        End If
    
    'Set thread priority
       Response = SetThreadPriority(ThreadHandle, THREAD_PRIORITY_NORMAL)
    
    
    'Awake thread
    Response = ResumeThread(ThreadHandle)
        ' Set suitable Interval value to make sure the program
        ' doesn't lose every buffer change event.

        Timer1.Interval = 200
        Timer1.Enabled = True
    End If

End Sub

Private Sub btSetting_Click()
    SetState (STATE_Setting)
    frmMain.Hide
    Setting.Show

    ' Step 1: Open Device
    ErrCde = DRV_DeviceOpen(DeviceNum, DriverHandle)
    If ErrCde <> SUCCESS Then
        DRV_GetErrorMessage ErrCde, ErrMsg
        MsgBox ErrMsg, vbOKOnly, "Driver Message"
        GainList.Hide
        Setting.Show
        Exit Sub
    End If
    ' Step 2: Get device features
    ptDevFeatures.buffer = DRV_GetAddress(DevFeat)
    ptDevFeatures.size = Len(DevFeat)
    ErrCde = DRV_DeviceGetFeatures(DriverHandle, ptDevFeatures)
    If ErrCde <> SUCCESS Then
        DRV_GetErrorMessage ErrCde, ErrMsg
        MsgBox ErrMsg, vbOKOnly, "Driver Message"
        DRV_DeviceClose DriverHandle
        GainList.Hide
        Setting.Show
        Exit Sub
    End If
    ' Step 3: Initialize Input Range List Combobox with device features
    Setting.ComboxInputRange.Clear

    For j = 0 To DevFeat.usNumGain - 1
        Setting.ComboxInputRange.AddItem StrConv(DevFeat.glGainList(j).szGainStr, vbUnicode)
    Next j
    
    ' Step 4: Close device
    DRV_DeviceClose DriverHandle

    PacerRate1 = PacerRate
    Conv1 = Conv
    CyclicMode1 = CyclicMode
    TriggerSource1 = TriggerSource
    EventMode1 = EventMode
    DelayCount1 = DelayCount
    StartChannel1 = StartChannel
    ChannelNum1 = ChannelNum
    ClockSource1 = ClockSource
    TriggerEdge1 = TriggerEdge
    TriggerType1 = TriggerType
    TriggerVoltage1 = TriggerVoltage
    TriggerMode1 = TriggerMode
    InputRange1 = InputRange
    GainOption1 = GainOption
    DataType1 = DataType
    OverrunTime1 = OverrunTime

Setting.EditStartChannel.Text = Str(StartChannel)
Setting.EditChannelNum.Text = Str(ChannelNum)
Setting.EditPacerRate.Text = Str(PacerRate)
Setting.EditConv.Text = Str(Conv)
Setting.EditDelayCount.Text = Str(DelayCount)
Setting.EditTriggerVoltage = Str(TriggerVoltage)

If TriggerMode = MODE_PacerTrigger Then
    Setting.OpPacer.value = True
Else
If TriggerMode = MODE_PostTrigger Then
    Setting.OpPost.value = True
Else
If TriggerMode = MODE_DelayTrigger Then
    Setting.OpDelay.value = True
Else
    Setting.OpAbout = True
End If
End If
End If

If CyclicMode = MODE_Cyclic Then
    Setting.OpCyclic.value = True
Else
    Setting.OpNoncyclic.value = True
End If

If TriggerSource = MODE_InternalTrigger Then
    Setting.OpInternalTrigger.value = True
Else
    Setting.OpExternalTrigger.value = True
End If

If ClockSource = MODE_InternalClock Then
    Setting.OpInternalClock.value = True
Else
    Setting.OpExternalClock.value = True
End If

If EventMode = MODE_EventEnable Then
    Setting.OpEnable.value = True
Else
    Setting.OpDisable.value = True
End If

'If TriggerEdge = MODE_RisingTrigger Then
'    Setting.OpRising.value = True
'Else
'    Setting.OpFalling.value = True
'End If

If TriggerType = MODE_DigitalTrigger Then
    Setting.OpDigital.value = True
End If
If TriggerType = 1 Then
    Setting.OpAnalog0.value = True
End If
If TriggerType = 2 Then
    Setting.OpAnalog1.value = True
End If
If TriggerType = 3 Then
    Setting.OpAnalog2.value = True
End If
If TriggerType = 4 Then
    Setting.OpAnalog3.value = True
End If

If DataType = MODE_RawData Then
    Setting.OpRawData.value = True
Else
    Setting.OpVoltageData.value = True
End If

If GainOption = MODE_OverallGain Then
    Setting.OpOverall.value = True
    Setting.btGainList.Enabled = False
Else
    Setting.OpGainList.value = True
    Setting.btGainList.Enabled = True
End If

Setting.ComboxInputRange.ListIndex = InputRange

End Sub

Private Sub btStop_Click()
    ' Step  Stop A/D conversion for high speed
    ErrCde = DRV_FAITerminate(DriverHandle)
    If ErrCde <> 0 Then
        DRV_GetErrorMessage ErrCde, ErrMsg
        MsgBox ErrMsg, vbOKOnly, "Driver Message"
        DRV_FreeDMABuffer DriverHandle, pBuffer
        GlobalUnlock (hUserBuf)
        GlobalFree (UserBuf)
        DRV_DeviceClose DriverHandle
        SetState (STATE_Ready)
        Exit Sub
    End If
    
End Sub

Private Sub Combo1_Click()
    If state = STATE_Begin Then
        SetState (STATE_Ready)
    End If
    DeviceNum = devicelist(Combo1.ListIndex).dwDeviceNum
End Sub


Private Sub Form_Load()
    
  SetState (STATE_Begin)
  RemoveX Me.hwnd
   
  PacerRate = 250000
  Conv = 40000
  CyclicMode = MODE_Noncyclic
  TriggerSource = MODE_InternalTrigger
  EventMode = MODE_EventEnable
  DelayCount = 2
  StartChannel = 0
  ChannelNum = 1
  ClockSource = MODE_InternalClock
  TriggerEdge = MODE_RisingTrigger
  TriggerType = MODE_DigitalTrigger
  TriggerVoltage = 1
  TriggerMode = MODE_PacerTrigger
  InputRange = 0
  GainOption = MODE_OverallGain
  DataType = MODE_VoltageData
  OverrunTime = 0
  
  Dim tt As Long
  Dim tempStr As String
  Dim gnNumOfDevices As Integer
  Dim Response As Long
  tt = DRV_GetAddress(devicelist(0))
  ErrCde = DRV_DeviceGetList(tt, 255, 0)
  If (ErrCde <> 0) Then
    DRV_GetErrorMessage ErrCde, ErrMsg
    MsgBox ErrMsg, vbOKOnly, "Error!!"
    Exit Sub
  End If

  ErrCde = DRV_DeviceGetNumOfList(gnNumOfDevices)
  If (ErrCde <> 0) Then
    DRV_GetErrorMessage ErrCde, ErrMsg
    Response = MsgBox(ErrMsg, vbOKOnly, "Error!!")
    Exit Sub
  End If

  For i = 0 To (gnNumOfDevices - 1)
    tempStr = ""
    For ii = 0 To 49
      tempStr = tempStr + Chr(devicelist(i).szDeviceName(ii))
    Next ii
      frmMain.Combo1.AddItem tempStr
  Next i

  ErrMsg = String(255, 0)
  szBuffer = String(255, 0)
  szDescript = String(255, 0)
  For i = 0 To MaxChannels
    gain(i) = 0
  Next i

End Sub

Private Sub Form_Terminate()
    If state <> STATE_Run Then
        End
    End If
End Sub



Private Sub Timer1_Timer()
   
    LstStatus.Clear
    For i = 0 To DispNum - 1
    If (DataType = 1) Then
            LstStatus.AddItem "Buf[" + Str(i) + "]= " + Format(DisplayBuf(i), "0.0000000")
    Else
            LstStatus.AddItem "Buf[" + Str(i) + "]= " + Hex(DisplayRawBuf(i)) + " H"
   End If
     
            
    Next i

End Sub

⌨️ 快捷键说明

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