关于ADC采集LWIP UDP发送数据处理问题
做ADC数据采集,1秒钟采集到的数据有至少3MB的数据量,用LWIP的UDP发送,实时传输,但是UDP超过1472字节后,发送不了,上位机不显示,所以我的想法是在大数据量的情况下:1:采集到的数据存在内部sram中,开辟一个500KB的缓冲区,边采集边把数据存到缓冲区,边做数据分割成1472字节的小数据块,分块好后UDP直接发送出去,整个过程就是一个动态循环的过程。比如:采集到的数据存进缓冲区,缓冲区检测到存到1472个数据后,把这1472个数据组成一个新的数组块,然后UDP拿走发送到上位机,在处理1-1472这第一个数据块的时候,同时后面的采集数据依然在实时进行,当第2个1472数据块检测存满后也打包成新的数组给UDP发送,一直存到500k后又重头开始循环缓冲1s内还没缓冲完的数据。原理就是用一个小的缓冲区来循环缓冲大数据量的数据,给出多余的时间来做数据分块给UDP传输,当然缓冲区不能太小,不然还没发走就被覆盖了。不知道这样的思路可否行
2.采集到的数据放在外部SDRAM中,在H7系列外挂SDRAM,直接一片就32MB的存储空间,一次性采集完1s的数据全部存到SDRAM中,采集完了在慢慢把数据分快处理给UDP发送。
3:当然这种情况在1和2的基础中,采集到的数据存到外部SDRAM,存储空间足够大,但是我也是边存边做数据分快处理,也不用担心被覆盖,因为空间足够大,一次性可以存够,只是存储和分块处理,发送同时进行。
以上就是我想出来的3种思路,不知道有没有大神看看如何,因为UDP发送数据上位机接收不到,超过1472字节的数据包,边采集边分块的话时间来不及处理,实时性就降低了
一直是这么大数据量吗? 解决问题的思路还是非常清晰 建议使用内部SRAM进行动态循环缓冲,使用外部SDRAM进行存储
SophiaOP 发表于 2024-6-17 14:34
一直是这么大数据量吗?
对。一直都是 jcky001 发表于 2024-6-17 17:46
建议使用内部SRAM进行动态循环缓冲,使用外部SDRAM进行存储
...
要求实时性,用一个就好,没必要先内部在外部,浪费资源把哈哈哈哈 要求实时性建议通信方式选择Ethercat 空间足够大,一次性可以存够,只是存储和分块处理,发送同时进行 AdaMaYun 发表于 2024-6-24 22:57
空间足够大,一次性可以存够,只是存储和分块处理,发送同时进行
外挂的SDRAM,足够是大空间,一次性是能够存够,怎么个同时进行呢,佬,教教 做ADC数据采集,1秒钟采集到的数据有至少3MB的数据量,用LWIP的UDP发送,实时传输 话说有必要这么密集的采集ADC数据吗?实际应用,采集大量的ADC,是出于什么目的呢? 密集ADC采集有时候需要频率跟上 将采集到的数据存储在内部SRAM中,并设置一个固定大小的缓冲区(例如500KB)。
当缓冲区中数据达到1472字节时,将数据打包成UDP数据包发送给上位机。
在发送数据的同时,后续的采集数据继续存储在缓冲区中,实现动态循环的数据处理和发送过程。
suncat0504 发表于 2024-6-29 19:56
话说有必要这么密集的采集ADC数据吗?实际应用,采集大量的ADC,是出于什么目的呢? ...
这个嘛,保密,佬把采集的数据写入外挂的SRAM或者SDRAM才慢慢分包分送,怎么写啊{:cry:} szt1993 发表于 2024-6-30 08:49
密集ADC采集有时候需要频率跟上
外挂的SRAM或者SDRAM跟得上,网口发送打包只能1472字节,需要分包,分包实时操作会占用很多时间 wang6623 发表于 2024-6-30 14:59
将采集到的数据存储在内部SRAM中,并设置一个固定大小的缓冲区(例如500KB)。
当缓冲区中数据达到1472字节 ...
佬,教教我,真的不会啊,固定大小的缓冲区也可以不那么大,然后缓冲区满了重头覆盖也行嘛 在使用ADC(模数转换器)采集数据并通过LWIP(轻量级IP协议栈)以UDP(用户数据报协议)发送数据时,需要考虑ADC数据采集方面的 设置ADC的采样率、分辨率和通道等参数。为ADC数据分配一个缓冲区,用于存储采集的数据。如果可能,使用DMA(直接内存访问)来传输ADC数据,以减轻CPU负担 将ADC采集的原始数据转换为适合通过网络传输的格式。添加校验和或其他数据完整性检查,以确保数据在传输过程中不被损坏 在系统启动时初始化LWIP协议栈,包括网络接口、IP地址、子网掩码等配置
页:
[1]
2