OnComm 事件示例 下例说明如何处理通讯错误和事件。可以在相关的 Case 语句之后插入代码来处理特定的错误或事件。Private Sub MSComm_OnComm () Select Case MSComm1.CommEvent ' Handle each event or error by placing ' code below each case statement' 错误 Case comEventBreak ' 收到 Break。 Case comEventCDTO ' CD (RLSD) 超时。 Case comEventCTSTO ' CTS Timeout。 Case comEventDSRTO ' DSR Timeout。 Case comEventFrame ' Framing Error Case comEventOverrun '数据丢失。 Case comEventRxOver'接收缓冲区溢出。 Case comEventRxParity' Parity 错误。 Case comEventTxFull '传输缓冲区已满。 Case comEventDCB '获取 DCB] 时意外错误 ' 事件 Case comEvCD ' CD 线状态变化。 Case comEvCTS ' CTS 线状态变化。 Case comEvDSR ' DSR 线状态变化。 Case comEvRing ' Ring Indicator 变化。 Case comEvReceive ' 收到 RThreshold # of chars. Case comEvSend ' 传输缓冲区有 Sthreshold 个字符 ' ' Case comEvEof ' 输入数据流中发现 EOF 字符 ' End Select End Sub
下面这个简单的例子演示了用调制解调器进行基本的串行通讯:Private Sub Form_Load ()
' 保存输入子串的缓冲区
Dim Instring As String
' 使用 COM1。
MSComm1.CommPort = 1
' 9600 波特,无奇偶校验,8 位数据,一个停止位。
MSComm1.Settings = "9600,N,8,1"
' 当输入占用时,
' 告诉控件读入整个缓冲区。
MSComm1.InputLen = 0
' 打开端口。
MSComm1.PortOpen = True
' 将 attention 命令送到调制解调器。
MSComm1.Output = "ATV1Q0" & Chr$(13) ' 确保
' 调制解调器以"OK"响应。
' 等待数据返回到串行端口。
Do
DoEvents
Buffer$ = Buffer$ & MSComm1.Input
Loop Until InStr(Buffer$, "OK" & vbCRLF)
' 从串行端口读 "OK" 响应。 ' 关闭串行端口。
MSComm1.PortOpen = False
End Sub注意 MSComm 控件可以采用轮询或事件驱动的方法从端口获取数据。这个简单的例子使用了轮询方法。关于事件驱动方法的例子请参阅 OnComm 事件的帮助。
下例说明如何处理通讯错误和事件。可以在相关的 Case 语句之后插入代码来处理特定的错误或事件。Private Sub MSComm_OnComm ()
Select Case MSComm1.CommEvent
' Handle each event or error by placing
' code below each case statement' 错误
Case comEventBreak ' 收到 Break。
Case comEventCDTO ' CD (RLSD) 超时。
Case comEventCTSTO ' CTS Timeout。
Case comEventDSRTO ' DSR Timeout。
Case comEventFrame ' Framing Error
Case comEventOverrun '数据丢失。
Case comEventRxOver'接收缓冲区溢出。
Case comEventRxParity' Parity 错误。
Case comEventTxFull '传输缓冲区已满。
Case comEventDCB '获取 DCB] 时意外错误 ' 事件
Case comEvCD ' CD 线状态变化。
Case comEvCTS ' CTS 线状态变化。
Case comEvDSR ' DSR 线状态变化。
Case comEvRing ' Ring Indicator 变化。
Case comEvReceive ' 收到 RThreshold # of
chars.
Case comEvSend ' 传输缓冲区有 Sthreshold 个字符 '
'
Case comEvEof ' 输入数据流中发现 EOF 字符
'
End Select
End Sub
如果你下位机程序搞定了,在Windows中弄HID通讯,相对简单很多,因为Windows提供
了很多HID设备操作的API函数,首先是枚举设备,通过PID和VID来识别枚举出设备,并
取得设备的GUID,然后就可以通过操作GUID通讯了,至于相关的API函数,通常都是 HID_
开头的,你可以查阅一下这方面的资料。要说到具体,可以慢慢用一本书来讲,什么令牌呀、
项目什么的,那就说不完了,不过可以肯定的是,VB可以实现这样的操作,而且也不复杂,
只是效率上来说,个人感觉用VC开多线程比较好。
我的系统是USB传输的,不是串行传输的,MSComm是专门针对串口的,还有设置波特率。
看看 http://www.baiheee.com/Documents/090522/090522165226.htm
有很多HID的知识是要学习的
还有这里~
VB来做USB上位机有一定的限制,一般应用应该问题不大,我们还可以调用API来弥补。
只是个人习惯问题