📄 frmmain.frm
字号:
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 + -