查看: 1196|回复: 20|关注: 0

[已解决] 关于matlab tcp接收数据处理的问题

[复制链接]

新手

12 麦片

财富积分


050


1

主题

15

帖子

0

最佳答案
在matlab进行tcp连接,网络调试助手发送字符串数据给matlab,发送的是10*30的随机数字符串,在网络调试助手上的发送频率是50hz,在使用数据流循环发送时,接受形成的字符串数组的某一行时不时会接上下一行的数据(就是其中一行跟下一行是连在一起的字符串),请问一下有没有方法避免这个问题产生,因为后面的数据处理只要不是10*30的数据就会出错。(附上随机数的txt,在网络调试助手上文件载入)


  1. clc
  2. close all

  3. num=0;
  4. a=zeros(1,0);
  5. a_string=string(a);
  6. newlen=string(zeros(1,num));

  7. Client=tcpip('172.172.172.172',80,'NetworkRole','client'); % 建立连接
  8. try_times=10000000000;
  9. t_client.OutputBuffersize=1;
  10. fopen(Client);

  11. for i=1:try_times
  12.     try
  13.         temp="";
  14.         phase(0.001);
  15.         data_recv=char(fread(Client,Client.BytesAvailable,"char"));

  16.         for i=1:length(data_recv)   
  17.             temp=temp+data_recv(i);         
  18.         end
  19.         newlen(end+1)=temp;
  20.         newlen=(newlen)';
  21.         if(length(newlen)>=30)
  22.             break
  23.         end
  24.     catch        
  25.     end  
  26. end
  27. newlen

复制代码



回复主题 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


1

主题

15

帖子

0

最佳答案
 楼主| 发表于 2020-10-1 11:33:18 | 显示全部楼层
IP地址是打开网络调试助手上会显示出来,出现的问题如图
微信截图_20201001112834.png
6297503afa5bf0032a6bbb2665098b4.png
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


1

主题

15

帖子

0

最佳答案
 楼主| 发表于 2020-10-1 11:45:38 | 显示全部楼层
字符串数据的txt

data.txt

1.75 KB, 下载次数: 0

字符串数据的txt

回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


1

主题

15

帖子

0

最佳答案
 楼主| 发表于 2020-10-1 15:21:08 | 显示全部楼层
刚刚想到一个方法,我把每一行的最后一个数据也加上了逗号, 然后22行和23行加个计算逗号的数量,判定一行数据只能有10个逗号,加的程序如下

  1. if(length(findstr(",",temp))>9)
  2. break
  3. end
复制代码

不过感觉像是治标不治本,坐等更好的方法
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


1

主题

15

帖子

0

最佳答案
 楼主| 发表于 2020-10-1 15:23:38 | 显示全部楼层
Yan9 发表于 2020-10-1 15:21
刚刚想到一个方法,我把每一行的最后一个数据也加上了逗号, 然后22行和23行加个计算逗号的数量,判定一行 ...

这个方法把发送频率调更快的话感觉其中的某行数据也会丢失 但不会造成两行连起来的情况
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


1

主题

15

帖子

0

最佳答案
 楼主| 发表于 2020-10-1 17:36:31 | 显示全部楼层
坐等一个完美的方法
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

4

主题

1666

帖子

206

最佳答案
  • 关注者: 95
发表于 2020-10-1 21:09:20 | 显示全部楼层 |此回复为最佳答案
本质的问题还是程序效率的问题吧,一般的做法还是加大缓存区,一次处理多次的通讯数据,不同的数据之间以特别的分隔符区分开
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


1

主题

15

帖子

0

最佳答案
 楼主| 发表于 2020-10-2 11:23:05 | 显示全部楼层
coolchen302 发表于 2020-10-1 21:09
本质的问题还是程序效率的问题吧,一般的做法还是加大缓存区,一次处理多次的通讯数据,不同的数据之间以特 ...

感谢回答,已经试过了,我把数据改成了60*5的,用50hz的频率发送,接收到的数据还是有小概率出现同样问题,不过我把发送频率调小了一点,目前运行起来都是很完整的数据,发送频率越高就越容易出错,如果要数据稳定不出错的话就得把频率调小一点。
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


1

主题

15

帖子

0

最佳答案
 楼主| 发表于 2020-10-2 11:26:32 | 显示全部楼层
coolchen302 发表于 2020-10-1 21:09
本质的问题还是程序效率的问题吧,一般的做法还是加大缓存区,一次处理多次的通讯数据,不同的数据之间以特 ...

一开始试了下一行发送300个数据,就是300*1的数据给matlab,也是用上面的数据,只不过把所有数据都调成一行了,matlab只接收了大概88个左右的数据,感觉是有一个限制接收大小的条件在matlab里面。
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

4

主题

1666

帖子

206

最佳答案
  • 关注者: 95
发表于 2020-10-2 15:36:01 | 显示全部楼层
Yan9 发表于 2020-10-2 11:26
一开始试了下一行发送300个数据,就是300*1的数据给matlab,也是用上面的数据,只不过把所有数据都调成一 ...

有个缓冲区的buffer设置,把那个放大一些试试
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /5 下一条

快速回复 返回顶部 返回列表