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

📄 frmmain.frm

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 FRM
📖 第 1 页 / 共 2 页
字号:
        End If
        chkFreeRun.Enabled = True
        chkReset.Enabled = True
        opn00.Caption = "000000"
        opn80.Caption = "800000"
        chkDigFilter.Enabled = False
        cmbDigFilterClock.Enabled = False
        chkOverlock.Enabled = False
        chkUnderlock.Enabled = False
        chkIndexReset.Enabled = False
    End If
End Sub

Private Sub cmdExit_Click()
    Unload Me
End Sub

Private Sub cmdRun_Click()
    Static nFlag As Integer
    nFlag = Abs(nFlag - 1)
    If (nFlag = 1) Then
        bRun = True
        cmdExit.Enabled = False
        cmdRun.Caption = "&Stop"
        cmbSelectDevice.Enabled = False
        If (Not uRun()) Then
            cmdExit.Enabled = True
            cmdRun.Caption = "&Run"
            cmbSelectDevice.Enabled = True
            bRun = False
            nFlag = 0
        End If
        Timer1.Enabled = True
    Else
        Timer1.Enabled = False
        bRun = False
        cmdExit.Enabled = True
        cmdRun.Caption = "&Run"
        cmbSelectDevice.Enabled = True
        ErrCde = DRV_CounterReset(DeviceHandle, nChannel)
        If (ErrCde <> 0) Then
            uShowErrMsg
        End If
        ErrCde = DRV_DeviceClose(DeviceHandle)
        If (ErrCde <> 0) Then
            uShowErrMsg
        End If
    End If
End Sub

Private Sub Form_Load()
    Dim gnNumOfDevices As Integer
    Dim nOutEntries As Integer
    Dim i, ii As Integer
    Dim tt As Long
    Dim tempStr As String
    Dim lSize As Long
    
    Timer1.Enabled = False
    bRun = False
    DeviceHandle = vbNull
    bResetValue = 0
    
    'Add type of PC Card
    tt = DRV_GetAddress(devicelist(0))
    ErrCde = DRV_DeviceGetList(tt, MaxEntries, nOutEntries)
    If (ErrCde <> 0) Then
        uShowErrMsg
        Exit Sub
    End If
    
    ' Return the number of devices which you install in the system using
    ' Device Installation
    ErrCde = DRV_DeviceGetNumOfList(gnNumOfDevices)
    If (ErrCde <> 0) Then
        uShowErrMsg
        Exit Sub
    End If
    For i = 0 To (gnNumOfDevices - 1)
        tempStr = ""
        For ii = 0 To MaxDevNameLen
            tempStr = tempStr + Chr(devicelist(i).szDeviceName(ii))
        Next ii
        cmbSelectDevice.AddItem tempStr
    Next i
    If (gnNumOfDevices > 0) Then
        cmbSelectDevice.ListIndex = 0
    End If
    'set InputMode
    With cmbInputMode
        .AddItem "DISABLE    "
        .AddItem "AB PHASE X1"
        .AddItem "AB PHASE X2"
        .AddItem "AB PHASE X4"
        .AddItem " 2 PULSE IN"
        .AddItem " 1 PULSE IN"
        .ListIndex = 0
    End With
    'set Latch Source
    With cmbLatchSource
        .AddItem "S/W LATCH  "
        .AddItem "ZIN LATCH  "
        .AddItem "DI0 LATCH  "
        .AddItem "DI1 LATCH  "
        .AddItem "TIMER LATCH"
        .ListIndex = 0
    End With
    'set reset value
    opn00.value = True
    'set channel
    txtChannel.Text = 0
    'set digital filter clock
    With cmbDigFilterClock
        .AddItem "8 MHz"
        .AddItem "4 MHz"
        .AddItem "2 MHz"
        .AddItem "1 MHz"
        .ListIndex = 0
    End With
    
    'Device open and get boardID
    ErrCde = DRV_DeviceOpen(nDevice, DeviceHandle)
    If (ErrCde <> 0) Then
        uShowErrMsg
        Exit Sub
    End If
    ErrCde = DRV_DeviceGetProperty(DeviceHandle, CFG_BoardID, gdwBoardID, Len(gdwBoardID))
    
    If (gdwBoardID = BD_PCI1784) Then
        With cmbLatchSource
            .AddItem "DI2 LATCH"
            .AddItem "DI3 LATCH"
        End With
        chkFreeRun.Enabled = False
        chkReset.Enabled = False
        opn00.Caption = "00000000"
        opn80.Caption = "80000000"
    Else
        chkDigFilter.Enabled = False
        cmbDigFilterClock.Enabled = False
        chkOverlock.Enabled = False
        chkUnderlock.Enabled = False
        chkIndexReset.Enabled = False
    End If
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If (bRun) Then
        Cancel = 1
        MsgBox "Can't be terminater now!", vbOKOnly Or vbInformation, "Error"
    End If
End Sub

Private Sub opn00_Click()
    '********************************
    'NOTICE
    'not use TRUE or FALSE as parameter passed to DRV_XXXX
    'TRUE is -1 in VB, it maybe occurs error in some DRV_XXXX function written by C/C++
    'use 1(TRUE) or 0(FALSE)
    '********************************
    bResetValue = 0      'opn00.value
End Sub

Private Sub opn80_Click()
    bResetValue = 1     'opn80.value
End Sub

Private Function uRun() As Boolean
    Dim pBuffer(5) As Long
    Dim pBufClock(5) As Single
    Dim Size As Long
    
    uRun = True
    If (Not IsNumeric(txtChannel.Text)) Then
        MsgBox "Please input numeric.", vbOKOnly Or vbInformation, "Error"
        uRun = False
        txtChannel.SetFocus
        Exit Function
    End If
    If (nDevice = -1) Then
        MsgBox "Please select a device to run.", vbOKOnly Or vbInformation, "Error"
        uRun = False
        Exit Function
    End If
    nChannel = CInt(txtChannel.Text)
    'open device
    ErrCde = DRV_DeviceOpen(nDevice, DeviceHandle)
    If (ErrCde <> 0) Then
        uShowErrMsg
        uRun = False
        Exit Function
    End If
    
    ' set property
    If (gdwBoardID = BD_PCI1784) Then
        'digital filter enable
        Size = Len(pBuffer(0)) * 5
        ErrCde = DRV_DeviceGetProperty(DeviceHandle, CFG_CntrDigitalFilter, pBuffer(0), Size)
        If (chkDigFilter.value = 1) Then
            pBuffer(nChannel) = 1
        Else
            pBuffer(nChannel) = 0
        End If
        ErrCde = DRV_DeviceSetProperty(DeviceHandle, CFG_CntrDigitalFilter, pBuffer(0), Size)
        
        'digital filter clock
        Size = Len(pBufClock(0)) * 5
        ErrCde = DRV_DeviceGetProperty(DeviceHandle, CFG_CntrClockFrequency, pBufClock(0), Size)
        Select Case cmbDigFilterClock.ListIndex
        Case 0
            pBufClock(0) = 8000000
        Case 1
            pBufClock(0) = 4000000
        Case 2
            pBufClock(0) = 2000000
        Case 3
            pBufClock(0) = 1000000
        End Select
        ErrCde = DRV_DeviceSetProperty(DeviceHandle, CFG_CntrClockFrequency, pBufClock(0), Size)
        
        'lock
        Size = Len(pBuffer(0)) * 5
        ErrCde = DRV_DeviceGetProperty(DeviceHandle, CFG_CntrCounterLockControl, pBuffer(0), Size)
        pBuffer(nChannel) = 0
        If (chkOverlock.value = 1) Then
            pBuffer(nChannel) = 1
        End If
        If (chkUnderlock.value = 1) Then
            pBuffer(nChannel) = 2
        End If
        If ((chkOverlock.value = 1) And (chkUnderlock.value = 1)) Then
            pBuffer(nChannel) = 3
        End If
        ErrCde = DRV_DeviceSetProperty(DeviceHandle, CFG_CntrCounterLockControl, pBuffer(0), Size)
        
        'index reset
        ErrCde = DRV_DeviceGetProperty(DeviceHandle, CFG_CntrIndexReset, pBuffer(0), Size)
        If (chkIndexReset.value = 1) Then
            pBuffer(0) = pBuffer(0) Or (2 ^ nChannel)
        Else
            pBuffer(0) = pBuffer(0) And Not (2 ^ nChannel)
        End If
        ErrCde = DRV_DeviceSetProperty(DeviceHandle, CFG_CntrIndexReset, pBuffer(0), Size)
        
    End If
    
    'counter config
    ptQCounterConfig.LatchSrc = nLatchSource
    ptQCounterConfig.ResetValue = Abs(bResetValue)
    ptQCounterConfig.counter = nChannel
    ptQCounterConfig.LatchOverflow = bFreeRun
    ptQCounterConfig.ResetOnLatch = bResetAfterlatch
    ErrCde = DRV_QCounterConfig(DeviceHandle, ptQCounterConfig)
    If (ErrCde <> 0) Then
        uShowErrMsg
        uRun = False
        Exit Function
    End If
    'counter start
    ptQCounterStart.counter = nChannel
    ptQCounterStart.InputMode = nInputMode
    ErrCde = DRV_QCounterStart(DeviceHandle, ptQCounterStart)
    If (ErrCde <> 0) Then
        uShowErrMsg
        uRun = False
        Exit Function
    End If
    'read count
    ptQCounterRead.counter = nChannel
    ptQCounterRead.HiCount = DRV_GetAddress(nHiCount)
    ptQCounterRead.LoCount = DRV_GetAddress(nLoCount)
    ptQCounterRead.overflow = DRV_GetAddress(nOverFlow)
    ErrCde = DRV_QCounterRead(DeviceHandle, ptQCounterRead)
    If (ErrCde <> 0) Then
        uShowErrMsg
        uRun = False
        Exit Function
    End If
    txtCountStatus.Text = "LoCNT=" & nLoCount & vbCrLf & "HiCNT=" & _
             nHiCount & vbCrLf & nOverFlow
End Function

Private Sub Timer1_Timer()

    'read count
    ptQCounterRead.counter = nChannel
    ptQCounterRead.HiCount = DRV_GetAddress(nHiCount)
    ptQCounterRead.LoCount = DRV_GetAddress(nLoCount)
    ptQCounterRead.overflow = DRV_GetAddress(nOverFlow)
    ErrCde = DRV_QCounterRead(DeviceHandle, ptQCounterRead)
    
    txtCountStatus.Text = "LoCNT=" & nLoCount & vbCrLf & "HiCNT=" & _
             nHiCount & vbCrLf & nOverFlow
End Sub

⌨️ 快捷键说明

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