解决方案 »
- 如何用Winsock控件传送自定义数据类型???
- 制作和CAB包相同功能的安装包,请各位大虾帮帮忙?
- 将JPG转灰度然后二值化,速度,显示和打印的问题
- 测试
- 请问高手:窗口(Form)在vb6里是类,可是我并没有申明某个窗口类的对象,为什么就可以用了呢?这个不合OOP的逻辑啊?
- mscomm 如何接收來自不同地址的儀表返回的數據?(解決另開帖送200分)
- 哪位能提供把图像色彩模式从RGB模式转为CMYK模式的代码?
- 请问哪有简化版的VB下载呢,就是只有几十M的那种
- 救命呀~怎么读取access库里image字段的路径,里边存放的是图象路径~!~给高分呀`!
- VB6编释出的Dll如何调用
- VB串口通信问题,急!!!!
- Graphics.DpiX 与Graphics.DpiY可以获得应用程序的分辨率,怎么可以获得windows系统的分辨率(即每英寸多少像素)?
这句话有问题,请你把它设置为:MSComm1.InputMode = comInputModeBinary给你推荐一个串口调试器(附代码):http://download.csdn.net/source/1262066
你可以借鉴一下,绝对对你有帮助。
Dim strRec As String
Private Sub Form_Load()
MSComm1.RThreshold = 1
MSComm1.InputMode = comInputModeText
MSComm1.PortOpen = True
End SubPrivate Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case 2
strRec = strRec & MSComm1.Input
Text1 = strRec
If Mid(strRec, 1, 1) = "S" And Mid(strRec, 7, 1) = "O" Then
'数据处理
Text2 = strRec
strRec = ""
End If
End Select
End SubLZ:你给出的是接收ASCII字符串的代码,帧首字节是字符号"S",帧尾字节是字符"O"(注意是英文字母"O"不是数字"0".关于"直接把处理程序写在oncomm里,不去 case comEvReceive,这样有区别吗?"
当然有区别,用case comEvReceive则是接收事件.无则可能是其它事件触发.以至引起接收混乱.
MSComm1.RThreshold = 1 仅仅设定当缓存中接收到的数据长度从 0 变为 1 时,引发一个 OnComm 事件。与能够接收多少字节以及你每次从缓存提取多少字节没有关系。
你的意思是说:接收一个字节,程序在处理comEvReceive事件时,缓存区又接收了其他字节吗?comm口接收数据的速度比程序快???
设置MSComm1.RThreshold = 1是接收缓冲区到达1字节就必然产生接收OnComm事件.
但不是接收到N字节,就一定产生N次OnComm事件.
这样修改:
Option Explicit
Dim strRec As String
Private Sub Form_Load()
MSComm1.RThreshold = 1
MSComm1.InputMode = comInputModeText
MSComm1.inputLen=0 '每次读完串口缓冲区的内容
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case 2
MSComm1.RThreshold = 0 '防止在处理数据时产生OnComm事件
strRec = strRec & MSComm1.Input
Text1 = strRec
If Mid(strRec, 1, 1) = "S" And Mid(strRec, 7, 1) = "O" Then
'数据处理
Text2 = strRec
strRec = ""
End If
MSComm1.RThreshold = 1 '处理完毕,打开触发
End Select
End Sub 专业的串口调试器都是这样处理的,这样可以避免你再处理事件是又触发事件。
MSComm1.inputLen = 1