mainform.frm

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

FRM
596
字号
        End If
        lstItem.SubItems(1) = strTemp
     Next i
    
End Sub
Private Sub SetListFilter()
 
    Dim lstItem As ListItem
      Dim lTemp As Long
  For i = 0 To m_DIChanNum - 1
    If (i Mod 32) = 31 Then
     lTemp = -(2 ^ 31)
     Else
     lTemp = 2 ^ (i Mod 32)
     End If
   Set lstItem = InterruptList.ListItems(i + 1)
        If (DIFilterEnable(i \ 32) And lTemp) Then
           lstItem.SubItems(2) = "Yes"
         Else
             lstItem.SubItems(2) = "No"
        End If
    Next i
    
    
    
End Sub


Private Sub cmdEnableFilter_Click()
 Dim settingFrm As New SettingForm
For i = 0 To 3
   DISetting(i) = DIFilterEnable(i)
  Next i
 settingFrm.txtInfo.Caption = "Enable or disable Filter for every DI channel:"
settingFrm.Show (vbModal)
If settingFrm.Ok = True Then
    For i = 0 To 3
      DIFilterEnable(i) = DISetting(i)
    Next i
    SetListFilter
End If
Unload settingFrm
    ulDataLength = Len(DIFilterEnable(0)) * 4

m_FilterCounter = txtFilterCounter.Text
    m_ErrCde = DRV_DeviceSetProperty(m_DriverHandle, CFG_DiFilterEnableForAll, DIFilterEnable(0), ulDataLength)
    ulDataLength = Len(m_FilterCounter)
       'Get the DI filter counter: Timer = Counter * 0.0001 * 2( 10M clock)
   m_ErrCde = DRV_DeviceSetProperty(m_DriverHandle, CFG_DiFilterIntervalCounter, m_FilterCounter, ulDataLength)

End Sub

Private Sub cmdExit_Click()
    If (ThreadHandle <> 0) Then
       GetExitCodeThread ThreadHandle, ExitCode
       
       If (ExitCode = STILL_ACTIVE) Then
          TerminateThread ThreadHandle, ExitCode
       End If
    End If

Unload Me
End Sub


Private Sub cmdFalling_Click()
 Dim settingFrm As New SettingForm
For i = 0 To 3
   DISetting(i) = DIFallingTrigger(i)
  Next i
 settingFrm.txtInfo.Caption = "Enable or disable Falling trigger for every DI channel:"
settingFrm.Show (vbModal)
If settingFrm.Ok = True Then
    For i = 0 To 3
      DIFallingTrigger(i) = DISetting(i)
    Next i
    SetListTrigger
End If

 Unload settingFrm
    ulDataLength = Len(DIFallingTrigger(0)) * 4
      'Get the DI Rising Trigger interrupt
    m_ErrCde = DRV_DeviceSetProperty(m_DriverHandle, CFG_DiTriggerEnableFallingForAll, DIFallingTrigger(0), ulDataLength)



End Sub

Private Sub cmdRising_Click()
 Dim settingFrm As New SettingForm
For i = 0 To 3
   DISetting(i) = DIRisingTrigger(i)
  Next i
 settingFrm.txtInfo.Caption = "Enable or disable Rising trigger for every DI channel:"
settingFrm.Show (vbModal)
If settingFrm.Ok = True Then
    For i = 0 To 3
      DIRisingTrigger(i) = DISetting(i)
    Next i
    SetListTrigger
End If
    Unload settingFrm
       ulDataLength = Len(DIRisingTrigger(0)) * 4
      'Get the DI Rising Trigger interrupt
  m_ErrCde = DRV_DeviceSetProperty(m_DriverHandle, CFG_DiTriggerEnableRisingForAll, DIRisingTrigger(0), ulDataLength)
 
End Sub

Private Sub cmdSelect_Click()
    Dim DeviceName As String * 50
    Dim ptGetFeatures As PT_DeviceGetFeatures
    Dim lpDevFeatures As DEVFEATURES
    Dim i As Integer
    Dim strTemp As String
    
    m_bThreadFlag = False
    
    cmbPort.Clear
    InterruptList.ListItems.Clear
    
    If (m_DriverHandle <> 0) Then
        DRV_DeviceClose (m_DriverHandle)
    End If
      'Select the Device
  DRV_SelectDevice Me.hWnd, 0, m_ulDevNum, DeviceName
    txtDeviceName.Caption = DeviceName
      'Open the Device
  m_ErrCde = DRV_DeviceOpen(m_ulDevNum, m_DriverHandle)
    If m_ErrCde <> 0 Then
    MsgBox ("The Device error")
    Exit Sub
    End If
       'Get the feature of the device
 ptGetFeatures.buffer = DRV_GetAddress(lpDevFeatures)
    m_ErrCde = DRV_DeviceGetFeatures(m_DriverHandle, ptGetFeatures)
    m_DIChanNum = lpDevFeatures.usMaxDIChl
    ulDataLength = Len(DIRisingTrigger(0)) * 4
      'Get the DI Rising Trigger interrupt
  m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_DiTriggerEnableRisingForAll, DIRisingTrigger(0), ulDataLength)
      'Get the DI Falling Trigger  interrupt
    m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_DiTriggerEnableFallingForAll, DIFallingTrigger(0), ulDataLength)
    m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_DiFilterEnableForAll, DIFilterEnable(0), ulDataLength)
    ulDataLength = Len(m_FilterCounter)
       'Get the DI filter counter: Timer = Counter * 0.0001 * 2( 10M clock)
   m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_DiFilterIntervalCounter, m_FilterCounter, ulDataLength)
    If m_FilterCounter > 0 Then
       txtFilterCounter.Text = Str(m_FilterCounter)
    Else
      txtFilterFreq.Caption = ""
    End If
    
    Dim SubItem As ListItem
    For i = 0 To m_DIChanNum - 1
     Set SubItem = InterruptList.ListItems.Add(, , "Port" & Hex(i \ 8) & "_" & Str(i Mod 8))
    Next i
    For i = 0 To m_DIChanNum \ 8 - 1
     cmbPort.AddItem ("Port" & Hex(i))
    Next i
    cmbPort.ListIndex = 0
    SetListFilter
    SetListTrigger

End Sub



Private Sub cmdStart_Click()
 ScanTimer.Enabled = True
 cmdStart.Enabled = False
 cmdStop.Enabled = True
 
 
End Sub

Private Sub cmdStop_Click()
 ScanTimer.Enabled = False
 cmdStart.Enabled = True
 cmdStop.Enabled = False

End Sub

Private Sub cmdStopAll_Click()

    For i = 0 To m_DIChanNum - 1
    
       If (InterruptList.ListItems(i + 1).Checked) Then
            InterruptList.ListItems(i + 1).Checked = False
        End If
    Next i

    If (ThreadHandle <> 0) Then
       GetExitCodeThread ThreadHandle, ExitCode
       
       If (ExitCode = STILL_ACTIVE) Then
          TerminateThread ThreadHandle, ExitCode
       End If
    End If
    m_bThreadFlag = False
    IntTimer.Enabled = False

End Sub

Private Sub Form_Load()
cmdSelect_Click
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If (m_DriverHandle <> 0) Then
        DRV_DeviceClose (m_DriverHandle)
    End If
  Call TerminateProcess(GetCurrentProcess, ByVal 0&)
End Sub

Private Sub InterruptList_ItemCheck(ByVal Item As MSComctlLib.ListItem)
Dim Response As Long
    Dim EventSetting As PT_EnableEvent

   If Item.Checked Then
      EventSetting.Enabled = 1
Else
      EventSetting.Enabled = 0
End If
    EventSetting.Count = 1
    EventSetting.EventType = ADS_EVT_INTERRUPT_DI0 + Item.Index - 1
    
    m_ErrCde = DRV_EnableEvent(m_DriverHandle, EventSetting)
    If (m_ErrCde <> 0) Then
        DRV_GetErrorMessage m_ErrCde, m_szErrMsg
        MsgBox m_szErrMsg, vbOKOnly, "Driver Message"
        Exit Sub
    End If



 If (m_bThreadFlag = False) Then
        '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(m_DriverHandle)
            Exit Sub
        End If
    
      'Set thread priority
       ' Using THREAD_PRIORITY_TIME_CRITICAL for interrupt event handling routine,
       ' you can get about 20 KHz response ratio by using PENTIUM 200 MMX PC.
        Response = SetThreadPriority(ThreadHandle, THREAD_PRIORITY_NORMAL)
    
       'Awake thread
       Response = ResumeThread(ThreadHandle)
       IntTimer.Enabled = True
       m_bThreadFlag = True
    End If
End Sub

Private Sub IntTimer_Timer()
Dim Ratio As Single
Dim strRatio(0 To 127) As String

    dwCurrentTime = GetTickCount()
        dwTime = dwCurrentTime - dwStartTime
        If (dwTime >= 1000) Then
            dwStartTime = dwCurrentTime
            For i = 0 To m_DIChanNum - 1
                strRatio(i) = Format(CLng(lEventCount(i)) / CSng(dwTime) * 1000#, "0")
                lEventCount(i) = 0
            Next i
            For i = 0 To m_DIChanNum - 1
            InterruptList.ListItems(i + 1).SubItems(3) = strRatio(i)
                
            Next i

            
        End If
End Sub

Private Sub ScanTimer_Timer()
    Dim DIValue As Integer
    Dim ptDioReadPortByte As PT_DioReadPortByte
    ptDioReadPortByte.Port = cmbPort.ListIndex
    ptDioReadPortByte.value = DRV_GetAddress(DIValue)
    m_ErrCde = DRV_DioReadPortByte(m_DriverHandle, ptDioReadPortByte)
    txtPortValue.Caption = Hex(DIValue)
End Sub

Private Sub txtFilterCounter_Change()
m_FilterCounter = CLng(txtFilterCounter.Text)
    If m_FilterCounter > 0 Then
       txtFilterFreq.Caption = Str(10000# / (CSng(m_FilterCounter) * 2#))
           ulDataLength = Len(m_FilterCounter)
       'Get the DI filter counter: Timer = Counter * 0.0001 * 2( 10M clock)
   m_ErrCde = DRV_DeviceSetProperty(m_DriverHandle, CFG_DiFilterIntervalCounter, m_FilterCounter, ulDataLength)
    Else
    txtFilterFreq.Caption = ""
    End If

End Sub

⌨️ 快捷键说明

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