VB6用定时器查询的方式实现与USB设备通讯慢,怎么解决
VB6用定时器查询的方式实现与USB设备通讯慢,如何解决?
借鉴了别人的程序,调用了API来实现与下位机USB通讯。
我现在是用VB中tmr定时器,以1ms的速度(VB6定时间最小1ms)去查询USB设备,但是调试到一条指令下发至返回有64ms!!!!!!一直找不到哪里花去了这么多时间。注:USB设备是STM32F103,以PLL/1.5的速度来描述USB速度,可以说肯定可以保证VB6中1ms的速度。
------解决方案--------------------
这个得研究一二。
------解决方案--------------------
是 HID 设备?
不需要都用延时。
如果接收返回错误,可能是下位机来不及应答,此时再延时后重复接收。
另外,我一般是用下面一组 API:
Public Declare Function ConnectToUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal vid As Integer, ByVal pid As Integer, ByVal version As Integer) As Long
Public Declare Sub CloseUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal hDev As Long)
Public Declare Function SetFeatureToUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal hDev As Long, ByRef buff As Byte, ByVal datalength As Long) As Long
Public Declare Function GetFeatureFromUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal hDev As Long, ByRef buff As Byte, ByVal datalength As Long) As Long
Public Declare Function GetFeatureLength Lib "HS32U2_HID.dll" (ByVal hDev As Long) As Long
SetFeature 相当于 WriteReport;GetFeature 相当于 ReadReport。
------解决方案--------------------
是 HID 设备?
不需要都用延时。
如果接收返回错误,可能是下位机来不及应答,此时再延时后重复接收。
另外,我一般是用下面一组 API:
Public Declare Function ConnectToUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal vid As Integer, ByVal pid As Integer, ByVal version As Integer) As Long
Public Declare Sub CloseUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal hDev As Long)
Public Declare Function SetFeatureToUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal hDev As Long, ByRef buff As Byte, ByVal datalength As Long) As Long
Public Declare Function GetFeatureFromUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal hDev As Long, ByRef buff As Byte, ByVal datalength As Long) As Long
Public Declare Function GetFeatureLength Lib "HS32U2_HID.dll" (ByVal hDev As Long) As Long
SetFeature 相当于 WriteReport;GetFeature 相当于 ReadReport。
- VB code
Public Sub WriteReport() result = WriteFile(HidDevice, SendBuffer(0), 65, 0, 0) End Sub Public Sub tmrDelay_Timer() Timeout = True SetHosMsg.tmrDelay = False End Sub Public Sub ReadReport() result = ReadFile(HidDevice, ReadBuffer(0), 65, 0, 0) End Sub Public Sub VBtoUSB() Call WriteReport '发送 Timeout = False SetHosMsg.tmrDelay.Interval = 5 SetHosMsg.tmrDelay.Enabled = True Do DoEvents Loop While Timeout = True Call ReadReport '接收 End Sub
借鉴了别人的程序,调用了API来实现与下位机USB通讯。
我现在是用VB中tmr定时器,以1ms的速度(VB6定时间最小1ms)去查询USB设备,但是调试到一条指令下发至返回有64ms!!!!!!一直找不到哪里花去了这么多时间。注:USB设备是STM32F103,以PLL/1.5的速度来描述USB速度,可以说肯定可以保证VB6中1ms的速度。
------解决方案--------------------
这个得研究一二。
------解决方案--------------------
是 HID 设备?
不需要都用延时。
如果接收返回错误,可能是下位机来不及应答,此时再延时后重复接收。
另外,我一般是用下面一组 API:
Public Declare Function ConnectToUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal vid As Integer, ByVal pid As Integer, ByVal version As Integer) As Long
Public Declare Sub CloseUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal hDev As Long)
Public Declare Function SetFeatureToUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal hDev As Long, ByRef buff As Byte, ByVal datalength As Long) As Long
Public Declare Function GetFeatureFromUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal hDev As Long, ByRef buff As Byte, ByVal datalength As Long) As Long
Public Declare Function GetFeatureLength Lib "HS32U2_HID.dll" (ByVal hDev As Long) As Long
SetFeature 相当于 WriteReport;GetFeature 相当于 ReadReport。
------解决方案--------------------
是 HID 设备?
不需要都用延时。
如果接收返回错误,可能是下位机来不及应答,此时再延时后重复接收。
另外,我一般是用下面一组 API:
Public Declare Function ConnectToUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal vid As Integer, ByVal pid As Integer, ByVal version As Integer) As Long
Public Declare Sub CloseUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal hDev As Long)
Public Declare Function SetFeatureToUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal hDev As Long, ByRef buff As Byte, ByVal datalength As Long) As Long
Public Declare Function GetFeatureFromUSBHIDDevice Lib "HS32U2_HID.dll" (ByVal hDev As Long, ByRef buff As Byte, ByVal datalength As Long) As Long
Public Declare Function GetFeatureLength Lib "HS32U2_HID.dll" (ByVal hDev As Long) As Long
SetFeature 相当于 WriteReport;GetFeature 相当于 ReadReport。