yyliwenjie 发表于 2009-6-6 17:27:34

串口循环读取指定字长(20字节)

电子罗盘不断发送数据到上位机,每帧20个字,我需要的是不断地获取第17,18个字,但问题是有的时候要么没读到20个字,要么顺序乱了,想了很久,没想明白。
初学LabVIEW,第一次发帖,谢谢各位大大!
我用了VISA 和 MsComm 两种方式,都没有成功。

cpubbs 发表于 2009-6-6 20:17:05

如果是乱了,兄弟请看看这个!
串口通信中数据篡位的彻底解决办法:队列缓冲数据!附程序!
http://www.cpubbs.com/bbs/viewthread.php?tid=63745&fromuid=19

cpubbs 发表于 2009-6-6 20:17:46

如果是读取长度不对,哪可能是终止符的原因,可以在精华贴中找一个叫做为什么串口接收到的字节数不对的那个贴子,上面有收录的!

cpubbs 发表于 2009-6-6 20:18:01

cpubbs论坛精华LV技巧贴,不断增加中!
http://www.cpubbs.com/bbs/viewthread.php?tid=13221&fromuid=19

这是精华贴地址!

yyliwenjie 发表于 2009-6-7 08:25:47

谢谢元老的热情回复,感动ing。你给我提供的这些资料够我好好消化的了。等我解决问题了,我再把代码上上来。

yyliwenjie 发表于 2009-6-8 17:27:30

利用cpubbs提供的队列缓冲解决了问题

wdyjz 发表于 2009-6-9 19:18:00

如果有固定的起始或者结束位,那就可以match pattern 找到那个字符,再去寻找你要的数据。

wdyjz 发表于 2009-6-9 23:21:29

这个程序的优点:可以主动的去发现和匹配协议的起始字符串,直到找到后,再读取后面的数据并处理;
把字符串的概念用作单个字符处理的概念,有一定的新颖性。
同时可以用bytearray的概念的元素去处理,也很容易理解单个元素的方式。

wdyjz 发表于 2009-6-9 23:24:00

本帖最后由 wdyjz 于 2009-6-9 23:46 编辑

还有另外一个办法:
接收数据,存到移位寄存器,发现匹配字符串的起始头,截取要的几个数据;将移位寄存器的前部分字符串delete掉,再循环处理。

wdyjz 发表于 2009-6-9 23:46:12

我做了一个这样的程序;大家可以参考下思想。

yyliwenjie 发表于 2009-6-10 16:06:41

楼上wdyjz版主,以前我还没注册的时候就经常看到你的回复,没想到你会给我回复啊!!
哇哈哈哈哈,太高兴了!

唐万华唐万华 发表于 2009-6-10 20:33:39

新手上路,受益不浅!谢谢大师指点!

jly1986 发表于 2009-6-12 20:38:42

你好 我是个新手。遇到和你一样的问题。但是我还是没解决。能否将你修改后的程序传给我参考一下。不胜感激~!邮箱:jay_jly@163.com
页: [1]
查看完整版本: 串口循环读取指定字长(20字节)