VB条码扫描接收数据问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 21:31:46
MSComm1.InBufferSize = 1024 '设定缓冲区字节的长度
MSComm1.InputLen = 13 ’只接收缓冲区前13个字符
照此,如果缓冲区内只有8个或9个或10个,反正是13个以内,那么
都会接收下来,怎么设置才能使只接收13个字符的,少于或大于13个字符都不接收,有什么法子没?

另外,我想问问,如果一个条码本身为13位,有没有可能因为条码本身问题,扫描出来的会少于13位呢?

如果想让少于13个字符时不能接收...用OnComm事件实现的话只需要把MSComm1.RThreshold 设为13就可以...意思是每接收到13个字节的数据就调用一次OnComm事件.....

但是这样估计并不能解决你的问题......
尤其是当一次输入数据大于13的时候...处理起来很繁琐.....

所以我想了想你的程序...是不是可以换成这种思路:

分配一块区域来作为条码的缓冲区...
每当串口接收到数据时,就将接收到的所有数据加上一个起始标志和结束标志放到缓冲区中.......这样MSComm控件的属性可以设成InputLen=0和
RThreshold=1,不需要在MSComm事件中判断了.....

然后可以设一个比较缓慢的Timer控件..每隔一定时间读一次缓冲区...读的时候按这个思路:
当一块数据(在起始标专与结束标志之间)的数据长度刚好是13位时,说明是一个正确数据..直接写到数据库中...
当一块数据长度不够13位时,再读出下一块数据,如果这两块数据长度之和是13..说明不知出什么问题把这一块数据分成了两部分.....这时合在一起存入数据库中...
而当一块数据不够13字节而且与下一块数据的长度之和大于13位时..说明这是个干扰数据(?怎么产生的?)....直接舍掉这块数据...~~

当然...这种思路的话有一个问题..就是条码的读取跟存放到数据库中并不是同步进行的.......
所以稍调整一下思路...
在InputLen=0和RThreshold=1时的OnComm事件中,一次性读出所有数据后可以用UBound()来取得读到的数据的长度....
那么如果读条形码的过程有人工干预(就是说人拿着设备一个条码一个条码地去读....就是说读哪个条码是由人为决定的.~~~),又或者可以在程序中控制生产设备的流程.....这时完全可以忽略出现错误的数据....只要数据不是13字节,就全部舍掉并给出失败提示.....舍掉后把InBufferCount置零(这个属性其实是接收字节计数...不受InputLen影响...当这个数计到大于等于RThresho