txm888 发表于 2014-3-25 11:07:09

实在没办法了,来论坛求助,关于串口读取字串成碎片的问题(已解决)

本帖最后由 txm888 于 2014-3-26 12:55 编辑

近期在弄串口刷卡设备读取测试,只读不写,该卡不支持写,每刷一次,卡就会向串口输出十六进制字串,如:0044F769DA
5字节,最后一字节DA是验证用的,实际我只需要0044F769这串数据

我也不知道如何设置超时读取,好像设了也没有用
现在的情况是,每刷一次,会分别到
0044
F769
DA

00
44
F769DA
也不定是这样分的,也可能被拆得各是各的(我程序设置的循环读取数据)

愁死我了啊,论坛这方面资料也过于少,借鉴的机会都没有,有哪位大神曾经研究过的,发发经验啊,谢啦

haijie1223 发表于 2014-3-25 23:41:19

我没能完全明白你的意思,可不可以读取字符串,达到指定位数就处理一次。未达到指定位数有换行的话就连接到一起。循环执行~

txm888 发表于 2014-3-26 07:53:45

回复 2# haijie1223


    杰哥,好久不见!
    因为是刷卡,现在又是零零碎碎的收内容,我都不知道刷一次,卡里的内容是不是全输到缓存,如果不是,在后台循环接收,就算连接到一起,也会把上一次的内容和下一次的内容误连接到一起,这样数据就是乱的,
比如一个完整的串为:1234567890
上次刷卡得到1234,结果卡没有将所有数据输过来,下次刷卡,会不会1234+123456?

haijie1223 发表于 2014-3-26 08:16:29

回复 3# txm888


    可以先判断,有没有重复的字符串,如果有则记录长的。
或者直接判断每次接受的字符串长度,如果没有全部传过来,就什么都不记录,直到所有数据都传过来的那一次才记录。这样的话就可能存在刷好几次才能记录到的情况。

txm888 发表于 2014-3-26 09:46:33

回复 4# haijie1223


    嗯,好的,谢谢,我研究看看

txm888 发表于 2014-3-26 12:55:12

回复 4# haijie1223


    循环读取,判断长度累加。长度不够的超时过后丢弃,重新刷就好了,谢谢老

haijie1223 发表于 2014-3-26 13:04:53

回复 6# txm888


    {:face (303):}能解决问题就最好了~

mgchl 发表于 2015-1-20 16:20:53

本帖最后由 mgchl 于 2015-1-20 16:23 编辑

$a=FileOpen ("d:\file.txt",0);或者变量
Local $b=FileReadLine ($a,1);这里的数字“1”行数
$c=StringRight ($b,2);从$b从右向左提取2个数值
$c=StringLeft ($b,8);从$b从左往右提取8个数值
页: [1]
查看完整版本: 实在没办法了,来论坛求助,关于串口读取字串成碎片的问题(已解决)