找回密码
 注册
LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 763|回复: 4

如何用嵌套的生产-消费者循环达到实时存储目的?

[复制链接]
发表于 2009-4-18 09:31:48 | 显示全部楼层 |阅读模式
描述一下我的问题:如图所示(图太大,数据生产者循环未给出):我用一个数据生产者循环产生数据,比如每隔一个触发周期产生2000点数据,送到数据处理循环,将前1000个点取出,送入第二个队列给数据存储循环存储。我的目的是要达到实时存储,并且存储的数据是一维的。
图中程序的问题是:假设我数据生产者循环循环了三次,共产生6000点数据,最后处理存储成的是3*1000的二维数组,不是我想要的1*3000的一维数组!虽然这样是实时存储
为了存储为一维数组,我在数组处理循环中用了数组插入VI将每次送来的1000个数据串成一串,再由右边的移位寄存器输出存储,这种方式虽然可以满足存储的数据是一维的,但要等到数据处理循环处理完所有数据才会送出去存储,不是实时的!数据量一大根本行不通!
请问谁能有办法既能让我实现实时存储,又能让存储的数据是一维的?万分感谢!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2009-4-18 09:46:33 | 显示全部楼层
本帖最后由 becoll 于 2009-4-18 09:50 编辑

图好像看不清,再来一张

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 顶

使用道具 举报

发表于 2009-4-18 10:10:48 | 显示全部楼层
楼主你好,我在别处也看过你的帖子,谢谢你发的截图。我在你那篇也说过,用对array进行操作的方法(虽然有很多种方法)在这里是没必要的,放在生产者中的话会消耗时间和内存。由于我现在手边没有lv,所以抱歉不能试,我认为应该是你写文件的操作里有的设置不正确。你试试用express vi存为lvm文件,看看问题还存在不,我晚些时候有lv时试试你的程序。
能否再上传个lv 8.5/8.2版本的vi文件?谢谢。
回复 顶

使用道具 举报

 楼主| 发表于 2009-4-18 17:16:23 | 显示全部楼层
3# foolooo
感谢你的热心讨论!
存为二进制文件的方法我试过了,只要数据是分段过来的,就会存为二维数组。我改用TDMS的格式存储已经解决实时的和一维的存储了!但是还是有老问题:每次触发存2000个点的量能存,而改成存500或其他较小的值反而提示缓冲区溢出,不知是何原因
回复 顶

使用道具 举报

发表于 2009-4-18 18:25:29 | 显示全部楼层
那么你现在的情况是,改为tdms格式存储了?你的结构其实可以去掉中间的“生产——消费”loop,只要在最后存储文件的loop里取subset就好,基本不会降低你的存储速度的。
你试试
1 简化结构,只用一个生产消费,因为中间的那个看着没什么必要
2 用array subset来提取前2000/500个点,看是否还有内存溢出问题。
回复 顶

使用道具 举报

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

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2026-9-29 16:11 , Processed in 0.048739 second(s), 12 queries , Gzip On, File On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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