定时读取缓存区的数据

时间:2022-04-01 07:55:24
接受的数据格式是这样的:$l -003.9 +025.5 -158.9 *
我只想要中间的025.5有点麻烦,我现在是这样实现的,每收到一个字符就响应一次,用的是Mscomm控件,这样能够接收数据,但是这样不利于处理数据,串口是10ms发一次,我想100ms接收一次,一次读取缓存区的好几组数据取平均值,这样可以实现吗?有两点1,如何定时读取缓存区,因为接收是一个字符一个字符收的,2,处理数据有点难,处理的话得一组一组处理,但是接收后从第几位截取就会发生错误。。。求解~~

6 个解决方案

#1


接收后数据放在一个队列中,队列达到一定长度后开始处理

#2


引用 1 楼 ljmanage 的回复:
接收后数据放在一个队列中,队列达到一定长度后开始处理


可以举个例子吗,没用过这个

#3


1,你想多少ms接收一次都行,只要你的接受缓冲区足够大就行
2,你先判断你的数据是否都类似$l -003.9 +025.5 -158.9 *格式,如果是的话先找到“+”的位置,然后取后面的5位就可以了

#4


引用 3 楼 kiven2010 的回复:
1,你想多少ms接收一次都行,只要你的接受缓冲区足够大就行
2,你先判断你的数据是否都类似$l -003.9 +025.5 -158.9 *格式,如果是的话先找到“+”的位置,然后取后面的5位就可以了

刚开始弄这个串口,还理不清思路,mscomm控件有这个功能吗,我是用的MFC编程的,mscomm上只有一个缓存区有多少字符开始接收数据,那么当我假设我设置是1,那么$l -003.9 +025.5 -158.9 *不是一个字符就传完的啊所以我找到+号往后5位很可能就不对了啊比如一个字符内最后四位是+025.

#5


写到临时文件最后统计 只写有效数据

#6


555。。。当时网速不好。。一下子开了两个贴。。200分啊,现在已经实现一半了,没有用mscomm控件,用的serialport的类,然后找"*"截取中间的一串字符,下面就是定时调用了,每次接收产生一个cstring的数据,我想把他存进数组里100ms调用一次,调用的时候取平均值~~个位有什么建议吗~~

#1


接收后数据放在一个队列中,队列达到一定长度后开始处理

#2


引用 1 楼 ljmanage 的回复:
接收后数据放在一个队列中,队列达到一定长度后开始处理


可以举个例子吗,没用过这个

#3


1,你想多少ms接收一次都行,只要你的接受缓冲区足够大就行
2,你先判断你的数据是否都类似$l -003.9 +025.5 -158.9 *格式,如果是的话先找到“+”的位置,然后取后面的5位就可以了

#4


引用 3 楼 kiven2010 的回复:
1,你想多少ms接收一次都行,只要你的接受缓冲区足够大就行
2,你先判断你的数据是否都类似$l -003.9 +025.5 -158.9 *格式,如果是的话先找到“+”的位置,然后取后面的5位就可以了

刚开始弄这个串口,还理不清思路,mscomm控件有这个功能吗,我是用的MFC编程的,mscomm上只有一个缓存区有多少字符开始接收数据,那么当我假设我设置是1,那么$l -003.9 +025.5 -158.9 *不是一个字符就传完的啊所以我找到+号往后5位很可能就不对了啊比如一个字符内最后四位是+025.

#5


写到临时文件最后统计 只写有效数据

#6


555。。。当时网速不好。。一下子开了两个贴。。200分啊,现在已经实现一半了,没有用mscomm控件,用的serialport的类,然后找"*"截取中间的一串字符,下面就是定时调用了,每次接收产生一个cstring的数据,我想把他存进数组里100ms调用一次,调用的时候取平均值~~个位有什么建议吗~~