📄 counterform.frm
字号:
ptDevGetFeatures.buffer = DRV_GetAddress(ptDevFeatures)
ErrorNum = DRV_DeviceGetFeatures(DriverHandle, ptDevGetFeatures)
If CheckError(ErrorNum) <> 0 Then
DRV_DeviceClose (DriverHandle)
Exit Sub
End If
' check number of counter channels
If ptDevFeatures.usMaxTimerChl = 0 Then
MsgBox "No Counter Channel", vbInformation, "Driver Message"
DRV_DeviceClose (DriverHandle)
Exit Sub
End If
'count sourc
Select Case cmbCntSrc.ListIndex
Case 0
usCountSrc = PA_MODE_COUNT_SRC_OUT_N_M1
Case 1
usCountSrc = PA_MODE_COUNT_SRC_CLK_N
Case 2
usCountSrc = PA_MODE_COUNT_SRC_CLK_N_M1
Case 3
usCountSrc = PA_MODE_COUNT_SRC_FOUT_0
Case 4
usCountSrc = PA_MODE_COUNT_SRC_FOUT_1
Case 5
If (lBoardID = BD_PCM3780) Then
usCountSrc = PA_MODE_COUNT_SRC_GATE_N_M1
Else
usCountSrc = PA_MODE_COUNT_SRC_FOUT_2
End If
Case 6
usCountSrc = PA_MODE_COUNT_SRC_FOUT_3
Case 7
usCountSrc = PA_MODE_COUNT_SRC_GATE_N_M1
Case Else
usCountSrc = PA_MODE_COUNT_SRC_CLK_N
End Select
'count mode
Select Case cmbCntMode.ListIndex
Case 0
usMode = MODE_A
Case 1
usMode = MODE_B
Case 2
usMode = MODE_C
Case 3
usMode = MODE_D
Case 4
usMode = MODE_E
Case 5
usMode = MODE_F
Case 6
usMode = MODE_G
Case 7
usMode = MODE_H
Case 8
usMode = MODE_I
Case 9
usMode = MODE_J
Case 10
usMode = MODE_K
Case 11
usMode = MODE_L
Case 12
usMode = MODE_O
Case 13
usMode = MODE_R
Case 14
usMode = MODE_U
Case 15
usMode = MODE_X
Case Else
usMode = MODE_A
End Select
'channel
usChannel = Val(cmbChannel.Text)
'initial value
usInitValue = Val(txtIniVal.Text)
'counting edge
If (opRising.value = True) Then
usCntEdge = PA_MODE_COUNT_RISE_EDGE
Else
usCntEdge = PA_MODE_COUNT_FALL_EDGE
End If
'counting direction
If (opUp.value = True) Then
usCntDir = PA_MODE_COUNT_UP
Else
usCntDir = PA_MODE_COUNT_DOWN
End If
'output control
If (opEnable.value = True) Then
usOutputEnable = PA_MODE_ENABLE_OUTPUT
Select Case cmbOPMode.ListIndex
Case 0
usOutputMode = PA_MODE_ACT_HIGH_TC_PULSE
Case 1
usOutputMode = PA_MODE_ACT_LOW_TC_PULSE
Case 2
usOutputMode = PA_MODE_TC_TOGGLE_FROM_LOW
Case 3
usOutputMode = PA_MODE_TC_TOGGLE_FROM_HIGH
Case Else
usOutputMode = PA_MODE_ACT_HIGH_TC_PULSE
End Select
Else
usOutputEnable = PA_MODE_DISABLE_OUTPUT
usOutputMode = 0
End If
'Gate parameters
If (frmGateMode.Enabled = True) Then
bGateEnable = True
Select Case cmbGateSrc.ListIndex
Case 0
usGateSrc = PA_MODE_GATE_SRC_OUT_N_M1
Case 1
usGateSrc = PA_MODE_GATE_SRC_GATE_N
Case 2
usGateSrc = PA_MODE_GATE_SRC_GATE_N_M1
Case Else
usGateSrc = PA_MODE_GATE_SRC_GATE_N
End Select
If (opHiLv.value = True) Then
usGatePl = PA_MODE_GATE_POSITIVE
Else
usGatePl = PA_MODE_GATE_NEGATIVE
End If
Else
usGateSrc = PA_MODE_GATE_SRC_GATE_NO
usGatePl = 0
bGateEnable = False
End If
'start counter
ptCounterConfig.usCounter = usChannel
ptCounterConfig.usInitValue = usInitValue
ptCounterConfig.usCountMode = usMode
ptCounterConfig.usCountDirect = usCntDir
ptCounterConfig.usCountEdge = usCntEdge
ptCounterConfig.usOutputEnable = usOutputEnable
ptCounterConfig.usOutputMode = usOutputMode
ptCounterConfig.usClkSrc = usCountSrc
ptCounterConfig.usGateSrc = usGateSrc
ptCounterConfig.usGatePolarity = usGatePl
ErrorNum = DRV_CounterConfig(DriverHandle, ptCounterConfig)
If CheckError(ErrorNum) <> 0 Then
DRV_DeviceClose (DriverHandle)
Exit Sub
End If
ptCounterEventStart.counter = usChannel
ErrorNum = DRV_CounterEventStart(DriverHandle, ptCounterEventStart)
If CheckError(ErrorNum) <> 0 Then
DRV_DeviceClose (DriverHandle)
Exit Sub
End If
'enable event
If (opIntEnable.value = True) Then
ptEnableEvent.Enabled = 1
ptEnableEvent.Count = 1
Select Case usChannel
Case 0
ptEnableEvent.EventType = ADS_EVT_TERMINATE_CNT0
Case 1
ptEnableEvent.EventType = ADS_EVT_TERMINATE_CNT1
Case 2
ptEnableEvent.EventType = ADS_EVT_TERMINATE_CNT2
Case 3
ptEnableEvent.EventType = ADS_EVT_TERMINATE_CNT3
Case 4
ptEnableEvent.EventType = ADS_EVT_TERMINATE_CNT4
Case 5
ptEnableEvent.EventType = ADS_EVT_TERMINATE_CNT5
Case 6
ptEnableEvent.EventType = ADS_EVT_TERMINATE_CNT6
Case 7
ptEnableEvent.EventType = ADS_EVT_TERMINATE_CNT7
End Select
ErrorNum = DRV_EnableEvent(DriverHandle, ptEnableEvent)
If CheckError(ErrorNum) <> 0 Then
DRV_DeviceClose (DriverHandle)
Exit Sub
End If
EventTimer.Enabled = True
End If
ReadCntTimer.Enabled = True
cmdStart.Enabled = False
frmChannel.Enabled = False
frmCntMode.Enabled = False
frmCntSrc.Enabled = False
frmIniVal.Enabled = False
frmCntEdge.Enabled = False
frmCntDir.Enabled = False
frmOPCtrl.Enabled = False
frmOutput.Enabled = False
frmGateMode.Enabled = False
frmTcInt.Enabled = False
cmdStop.Enabled = True
cmdDevSelect.Enabled = False
End Sub
Private Sub cmdStop_Click()
Dim ReturnValue As Long
ReadCntTimer.Enabled = False
If (opIntEnable.value = True) Then
EventTimer.Enabled = False
ptEnableEvent.Enabled = False
ptEnableEvent.Count = 1
ErrorNum = DRV_EnableEvent(DriverHandle, ptEnableEvent)
CheckError (ErrorNum)
End If
ErrorNum = DRV_CounterReset(DriverHandle, usChannel)
CheckError (ErrorNum)
DRV_DeviceClose (DriverHandle)
bRun = False
cmdStart.Enabled = True
frmChannel.Enabled = True
frmCntMode.Enabled = True
frmCntSrc.Enabled = True
frmIniVal.Enabled = True
frmCntEdge.Enabled = True
frmCntDir.Enabled = True
frmOPCtrl.Enabled = True
If (opEnable.value = True) Then
frmOutput.Enabled = True
End If
If (bGateEnable = True) Then
frmGateMode.Enabled = True
End If
frmTcInt.Enabled = True
cmdStop.Enabled = False
cmdDevSelect.Enabled = True
End Sub
Private Sub EventTimer_Timer()
Dim usEventType As Integer
Dim response As Integer
usEventType = 0
'Dim ErrorNum As Long
Dim ptCheckEvent As PT_CheckEvent
ptCheckEvent.EventType = DRV_GetAddress(usEventType)
ptCheckEvent.Milliseconds = 1000
ErrorNum = DRV_CheckEvent(DriverHandle, ptCheckEvent)
If CheckError(ErrorNum) <> 0 Then
Exit Sub
End If
Select Case usEventType
Case ADS_EVT_TERMINATE_CNT0
reponse = MsgBox("Counter0 Terminal Event Occured!", vbOKOnly, "Interrupt Message")
Case ADS_EVT_TERMINATE_CNT1
reponse = MsgBox("Counter1 Terminal Event Occured!", vbOKOnly, "Interrupt Message")
Case ADS_EVT_TERMINATE_CNT2
reponse = MsgBox("Counter2 Terminal Event Occured!", vbOKOnly, "Interrupt Message")
Case ADS_EVT_TERMINATE_CNT3
reponse = MsgBox("Counter3 Terminal Event Occured!", vbOKOnly, "Interrupt Message")
Case ADS_EVT_TERMINATE_CNT4
reponse = MsgBox("Counter4 Terminal Event Occured!", vbOKOnly, "Interrupt Message")
Case ADS_EVT_TERMINATE_CNT5
reponse = MsgBox("Counter5 Terminal Event Occured!", vbOKOnly, "Interrupt Message")
Case ADS_EVT_TERMINATE_CNT6
reponse = MsgBox("Counter6 Terminal Event Occured!", vbOKOnly, "Interrupt Message")
Case ADS_EVT_TERMINATE_CNT7
reponse = MsgBox("Counter7 Terminal Event Occured!", vbOKOnly, "Interrupt Message")
End Select
End Sub
Private Sub Form_Load()
Dim Description As String
Dim i As Integer
Description = String(80, vbNullChar)
ErrorNum = DRV_SelectDevice(hWnd, False, DeviceNum, Description)
labDevName.Caption = Description
bRun = False
ErrorNum = DRV_DeviceOpen(DeviceNum, DriverHandle)
If CheckError(ErrorNum) <> 0 Then
Exit Sub
End If
ptDevGetFeatures.buffer = DRV_GetAddress(ptDevFeatures)
ErrorNum = DRV_DeviceGetFeatures(DriverHandle, ptDevGetFeatures)
If CheckError(ErrorNum) <> 0 Then
DRV_DeviceClose (DriverHandle)
Exit Sub
End If
lBoardID = ptDevFeatures.dwBoardID
usMaxCntNum = ptDevFeatures.usMaxTimerChl
DRV_DeviceClose (DriverHandle)
cmbChannel.Clear
i = 0
While (i < usMaxCntNum)
cmbChannel.AddItem (Str(i))
i = i + 1
Wend
cmbCntSrc.Clear
cmbCntSrc.AddItem ("OUT N-1")
cmbCntSrc.AddItem ("CLK N")
cmbCntSrc.AddItem ("CLK N-1")
cmbCntSrc.AddItem ("FOUT 0")
cmbCntSrc.AddItem ("FOUT 1")
If (lBoardID <> BD_PCM3780) Then
cmbCntSrc.AddItem ("FOUT 2")
cmbCntSrc.AddItem ("FOUT 3")
End If
cmbCntSrc.AddItem ("GATE N-1")
cmbChannel.ListIndex = 0
cmbCntMode.ListIndex = 0
cmbCntSrc.ListIndex = 1
txtIniVal.Text = "1"
cmbGateSrc.ListIndex = 1
cmbOPMode.ListIndex = 0
opRising.value = True
opUp.value = True
opEnable.value = True
opHiLv.value = True
opIntDisable.value = True
frmGateMode.Enabled = False
End Sub
Private Sub Form_Unload(Cancel As Integer)
If (bRun = True) Then
Call cmdStop_Click
End If
End Sub
Private Sub opDisable_Click()
If (opDisable.value = True) Then
frmOutput.Enabled = False
End If
End Sub
Private Sub opEnable_Click()
If (opEnable.value = True) Then
frmOutput.Enabled = True
End If
End Sub
Private Sub ReadCntTimer_Timer()
Dim ptCounterEventRead As PT_CounterEventRead
Dim gwOverflow As Long
Dim gdwReading As Long
ptCounterEventRead.counter = usChannel
ptCounterEventRead.overflow = DRV_GetAddress(gwOverflow)
ptCounterEventRead.Count = DRV_GetAddress(gdwReading)
ErrorNum = DRV_CounterEventRead(DriverHandle, ptCounterEventRead)
If CheckError(ErrorNum) <> 0 Then
Call cmdStop_Click
Exit Sub
End If
labResult.Caption = Str(gdwReading)
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -