大家好 请问通过串口传输大量数据 会丢失部分数据怎么解决呢?

2019-07-17 08:54发布

我在做一个通过单片机串口发送点的坐标(纵横坐标),使用labview的visa串口接收控件 接收数据然后通过描单个点的控件 将点显示出来,但是当传输数据速度慢并且数量少的时候描点比较准确  传输数据速度快数量多的时候描点就会很容易出错然后全乱了  ……我的思路是这样的            1、单片机发送一个字节判断缓冲区内字符串长度是不是2(如果是2的话就表示一个点然后就可以描了);
2、缓冲区字符串长度小于2 表示一个点坐标传输完成 开始描点;
3、描点结束清空缓冲区(由于索引字符串的0、1两位 而且需要根据字符串长度判断下一个点的坐标是否传输完毕);
4、等待下一个点的传输
BXNDU64HGI26}7AL}5O[(C5.png


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
飞絮已纷纷
1楼-- · 2019-07-17 13:06
上面是我的程序 图
_RU$X]YHBH4Y}VFLM(B8XIM.png
6T99NY({ZMV1322{F0S@0M3.png
飞絮已纷纷
2楼-- · 2019-07-17 17:15
上面第一幅图是 慢速传输的图像  第二幅是快速传输出错的图像
飞絮已纷纷
3楼-- · 2019-07-17 19:23
求哪位大神指教……谢谢~~
wangweijie2016
4楼-- · 2019-07-18 00:57
 精彩回答 2  元偷偷看……
摸不透......
5楼-- · 2019-07-18 01:47
给你提供一个思路:你可以使用生产者消费者模式,把写入命令放在主循环,把接受数据放在从循环,这样接受和发送是同时进行的。
zhouyezuishuai
6楼-- · 2019-07-18 05:18
一般来说串口通讯读取数据是放在循环内读取的,当读取到的数据符合要求时(一般需要判断数据长度和数据前三位,不同的协议数据正常的指令也不同)才停止循环,此时再把读取到的数据传出循环,这个时候数据就不会出错了  还有,串口通讯时打开和关闭串口一定要放在程序开始和结束时执行,千万不要在程序运行过程中多次打开关闭。 还有VISA通讯,看你是跟什么通讯,一般发送命令之后读取之前是需要等待一段时间的,这个时间具体是多少毫秒需要你自己去尝试,发送一个你明确知道数据位数的指令,然后循环读取,如果持续一段时间都正常,那么这个等待时间就是没问题的,否则就需要增加等待的时间,直到数据正常

一周热门 更多>