我正在使用HID设备连接到CAN总线,并连接了几种不同类型的传感器。其中一些响应很快,另一些则有更多延迟。
我在C#中使用这个USB HID组件作为Visual Basic中的.dll,效果很好。 http://www.codeproject.com/KB/cs/USB_HID.aspx
我目前发送和接收命令的代码有点麻烦。有时命令和发送但收不到足够快。问题可能在于传感器,而不是实际的vb代码。我们希望程序继续监控其他传感器,而不是长时间挂起。
目前我正在使用事件处理程序和循环,但我想知道这是否可以通过线程更好地完成?或者如果我的惯例对这种情况最好。
代码段:
CANUSB_Class.vb
Public Sub DataReceivedHandler(ByVal sender As Object, ByVal dataReceived As DataRecievedEventArgs)
For Each byteReceived As Byte In dataReceived.data
rxDataStruct.dataPacket(rxDataStruct.InPacketLength) = byteReceived
rxDataStruct.InPacketLength += 1
Next
rxDataReady = True
MainParsingRoutine.vb
sendCommand = False
CANPort.rxDataReady = False
Try
Do
Tries += 1
If Tries > 4 Then
Exit Do
End If
CANTimer.Start()
CANPort.transmitPacket(OutCANPacket)
'Wait for Return Packet
Do Until CANPort.rxDataReady = True Or _
CANTimer.ElapsedMilliseconds > timeout
System.Threading.Thread.Sleep(0)
Loop
If CANPORT.rxDataReady = True Then
sendCommand = True
Loop Until sendCommand = True
答案 0 :(得分:0)
如果有人正在开发HID设备并且在这个页面上发现我最终使用了ManualResetEvent。
在CANUSB课程中,下一行是:
resetEvent.Set()
然后在MainParsingRoutine.vb中我改变了:
Do Until CANPort.rxDataReady = True Or _
CANTimer.ElapsedMilliseconds > timeout
System.Threading.Thread.Sleep(0)
Loop
If CANPORT.rxDataReady = True Then
sendCommand = True
为:
CANUSB.resetEvent.WaitOne(100)
在100ms后超时。
与我们的HID设备配合得非常好,比我们以前的FTDI usb串行设备要好得多。