发表于:2005/4/9 19:09:00
#0楼
我用VB的mscomm控制串口和仪器相连,通过计算机向仪器发送文件或是数据,然后另外的仪器接收到数据或是文件后再转发给计算机,通过计算机读取,但是我发现收到的数据不完整,并不是我一下就能把完整的一帧数据接收过来,这样就导致了接收端收数据解码时候出错。
mscomm属性
handShaking :2 CTS/RTS
Sthreshold=1
Rthreshold=1
Inputlen=0
inbuffersize=1024
outbuffersize=512
接收数据时候是这样处理的:
private sub ON_msomm ()
select case mscomm.commevent
case 2
RecTime.interval=50
RecTime.enable=true ‘打开接收计时器,在这段程序中进行接收和解码
end select
end sub
Private Sub RecTime_timer()
dim inbyte() as byte
dim str as string
Inbyte = MSComm.Input
........... '开始判断和解码
...........
RecTime.enable=false ’关闭定时器
end sub
这样写完代码后发送短小的文件可以接收完全,但是要是长文件就不行了,改变timer的interval的值后会产生不同的效果,但是不管怎么样都收不完全,帧尾总是被收到下一帧数据或是被直接舍弃,而且我就是自己编写一个小的程序(就发一条命令)的时候接收的只有10 比特返回值也是被分成两次接收,一次8个,一次两个,这是怎么回事呢??? 请问有什么好办法可以接受到完整的数据帧。
这个问题已经困扰我好长时间了,我也尝试了好多办法,但是效果都不好,请高手赐教!!!真是万分感谢!!
mscomm属性
handShaking :2 CTS/RTS
Sthreshold=1
Rthreshold=1
Inputlen=0
inbuffersize=1024
outbuffersize=512
接收数据时候是这样处理的:
private sub ON_msomm ()
select case mscomm.commevent
case 2
RecTime.interval=50
RecTime.enable=true ‘打开接收计时器,在这段程序中进行接收和解码
end select
end sub
Private Sub RecTime_timer()
dim inbyte() as byte
dim str as string
Inbyte = MSComm.Input
........... '开始判断和解码
...........
RecTime.enable=false ’关闭定时器
end sub
这样写完代码后发送短小的文件可以接收完全,但是要是长文件就不行了,改变timer的interval的值后会产生不同的效果,但是不管怎么样都收不完全,帧尾总是被收到下一帧数据或是被直接舍弃,而且我就是自己编写一个小的程序(就发一条命令)的时候接收的只有10 比特返回值也是被分成两次接收,一次8个,一次两个,这是怎么回事呢??? 请问有什么好办法可以接受到完整的数据帧。
这个问题已经困扰我好长时间了,我也尝试了好多办法,但是效果都不好,请高手赐教!!!真是万分感谢!!