MSComm1.RThreshold = 1 '产生MSComm事件Public Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent Case comEvReceive
MSComm1.InputLen = 10
Debug.Print MSComm1.InBufferCount
Dim Buffer As Variant
Do
DoEvents
Buffer = MSComm1.Input
data_in_str = Buffer
' Debug.Print Len(data_in_str)
Loop Until (MSComm1.InBufferCount >= 10)
Call AllData
Case Else
End Select
date_in_str = ""End Sub1 MSComm1.InBufferCount 一次给的大于10时,有时80,有时90,好像只能读一次
2 MSComm1.InBufferCount 一次给的小于10时,有时 2 ,好像丢了
大家遇到这种情况,一般都怎么处理?
Select Case MSComm1.CommEvent Case comEvReceive
MSComm1.InputLen = 10
Debug.Print MSComm1.InBufferCount
Dim Buffer As Variant
Do
DoEvents
Buffer = MSComm1.Input
data_in_str = Buffer
' Debug.Print Len(data_in_str)
Loop Until (MSComm1.InBufferCount >= 10)
Call AllData
Case Else
End Select
date_in_str = ""End Sub1 MSComm1.InBufferCount 一次给的大于10时,有时80,有时90,好像只能读一次
2 MSComm1.InBufferCount 一次给的小于10时,有时 2 ,好像丢了
大家遇到这种情况,一般都怎么处理?
解决方案 »
- 使用VB.NET写一个自动完成的TXT对象,转移到VB中
- 请问如何用代码实现增加一个shape或command.
- VB做程序时如何对SQL SERVER 数据库进行备份?
- [供应] 邮件管理/搜索/校验/来信
- 如何用vb或delphi程序代码使自己的可执行文件(.EXE)成为打开某种扩展名的文件的默认打开程序
- 我用commondialog1打开了个文件,如何用text1得到这个文件的路径?
- 高手请进,100分全给!
- 如何用语句判断Rs中是否有BookIndex字段
- VB数据库查询问题,请各位大虾多指教!!!
- 有关vb,frontpage的小问题(急)
- MSCOMM错误,高手帮看看,是为什么?
- 字符判断的低级问题
'2.Setting:设置或返回串行端口的波特率、奇偶校验位、数据位数、停止位。如:M scomm.Setting="9600,N,8,1"。
'3.PortOpen:打开或关闭串行端口,格式为:Mscomm.PortOpen={TRUE|FALSE}。
'4.InBufferSize:设置或返回接收缓冲区的大小,缺省为1024字节。
'5.InBufferCount:返回接收缓冲区内的等待读取的字节个数,可通过设置该属性为0来清除接收缓冲区。
'6.RThreshold:该属性为一阀值,它确定当接收缓冲区内字节个数达到或超过该值后就产生代码为MSCOMM_EV_RECEIVE的OnComm事件。
'7.InputLen: 设置或返回接收缓冲区内用Input读入的个数。若取0,则INPUT读取整个缓冲区的内容。
'8.Input: 该属性表示从接收缓冲区返回并移走一串字符。
'9.OutBufferSize:设置或返回发送缓冲区,缺省为512字节。
'10.OutBufferCounter:返回发送缓冲区内等待发送的字符数,可用来清空缓冲区。
'11.Output:向发送缓冲区传送一字符串。
'12.EOFEnable:若置TRUE,则当输入中出现EOF,就停止输入并产生OnComm事件。
'13.Handshaking:设置并返回硬件握手协议。用于异步通信的速度匹配。'
'Handshaking 是指内部通信协议,通过该协议,数据从硬件端口传输到接收缓冲区。当一个数据字符到达串行端口,通信设备就把它移到接收缓冲区以使程序可以读它。如果没有接受缓冲区,程序需要直接从硬件读取每一个字符,这很可能会造成数据丢失,因为字符到达的速度可以非常快。握手协议保证在缓冲区过载时数据不会丢失,缓冲区过载为数据到达端口太快而使通信设备来不及将它移到接收缓冲区。
'如果在通信过程中发生错误或事件 , 就会引发OnComm事件并且改变属性值, 由CommEvent属性代码反映错误类型, 在通信程序的设计中可根据该属性值来执行不同的操作, 以下是部分属性常数值及其含义:
'1.ComEvSend: 其值为1,发送缓冲区的内容少于SThreshold指定的值。
'2.ComEvReceive: 其值为2,接收缓冲区内字符数达到 RThreshold 值,该事件在缓冲区中数据被移走前将持续产生。
'3.ComEventFrame: 其值为1004,硬件检测到帧错误。
'4.ComEventRxOver: 其值为1008,接收缓冲区溢出。
'5.ComEventTxFull: 其值为1010,发送缓冲区溢出。
'6.ComEventRxParity: 其值为1009,奇偶校验。
'7.ComEvEOF: 其值为7,接收数据中出现文件结束(ASCII 码为 26)字符
判断接收字符串中是否含有结束字符,若有则认为接收到完整的信息,反之则否。这样对于接收信息的完整性和准确性能就有一定的保障。