[求助讨论]

如何将ActiveX接收的数据转发至主VI

[复制链接]
908|11
手机看帖
扫描二维码
随时随地手机跟帖
yy215478|  楼主 | 2016-9-3 10:37 | 显示全部楼层 |阅读模式
    现有一块板卡,数据接收后存放在其回调函数中,回调函数是独立运行的单线程,该怎样把数据转发至主VI呢?
如果使用队列直接将数据转发至主VI,那么当板卡数据采集量比较大的时候,系统需要用到多张同样的板卡的时候又该如何处理呢?

相关帖子

songchenping| | 2016-9-5 08:39 | 显示全部楼层
首先你得明确,数据量到底有多大。还有就是你的数据格式,可以设置一个缓冲区

使用特权

评论回复
yy215478|  楼主 | 2016-9-6 22:38 | 显示全部楼层
songchenping 发表于 2016-9-5 08:39
首先你得明确,数据量到底有多大。还有就是你的数据格式,可以设置一个缓冲区 ...

数据每次上传362*4个字节,数据第一个字表示当前帧的编号,每次重新启动后递增,第二个字表示当前帧状态,后面的都是数据帧。
当我需要用到10个通道时,会需要创建10个回调函数来接收数据吗?如果都采用队列转发的形式会造成内存泄露,运行之后不久就自动报错

使用特权

评论回复
songchenping| | 2016-9-7 09:06 | 显示全部楼层
yy215478 发表于 2016-9-6 22:38
数据每次上传362*4个字节,数据第一个字表示当前帧的编号,每次重新启动后递增,第二个字表示当前帧状态 ...

可以考虑并行执行,队列容易堵死内存,

使用特权

评论回复
yy215478|  楼主 | 2016-9-7 21:43 | 显示全部楼层
songchenping 发表于 2016-9-7 09:06
可以考虑并行执行,队列容易堵死内存,

如果给每块卡都创建回调函数难么他们之间本身就是并行执行的,也就是数据接收部分都是相互独立的,这个时候就会有十个队列,这样在主界面VI调用处理的时候会轮询这十个队列依次进行数据处理,这块始终找不到好一点的解决办法,版主能具体指点一下吗?谢谢

使用特权

评论回复
songchenping| | 2016-9-9 10:22 | 显示全部楼层
yy215478 发表于 2016-9-7 21:43
如果给每块卡都创建回调函数难么他们之间本身就是并行执行的,也就是数据接收部分都是相互独立的,这个时 ...

不知道你的十个队列之间互相关系是个什么样子的。理论上并行是互不干扰的。如果互相之间的数据存在某种计算关系,就相对比较复杂了。

使用特权

评论回复
nethopper| | 2016-9-9 14:28 | 显示全部楼层
也许没完全理解LZ的问题,但我是这样折腾的,在LV中开个数组和一个标记,然后把数组指针和标记的指针传给数据采集DLL,LV中将标记清零,DLL采集满数据后存于数组中并将标记置位,同时发个USER EVENT给LV,收到EVENT后,LV从数组中获取数据供VI使用,然后将标记清零,以便下一次采集。

使用特权

评论回复
yy215478|  楼主 | 2016-9-9 23:42 | 显示全部楼层
songchenping 发表于 2016-9-9 10:22
不知道你的十个队列之间互相关系是个什么样子的。理论上并行是互不干扰的。如果互相之间的数据存在某种计 ...

数据之间是没有关系的,自己跑自己的,自己采自己的数据,但数据的处理和显示以及存储都是一样的,在外部看来相当于一个设备的十个通道,那么这样的话如果在上传的10个队列中逐个轮询,然后把这10个通道的数据放入波形数组显示。这个过程中对内存的消耗不大,我看了一下程序运行时候CPU的各项参数,以及内存占有量,但为什么运行不久就会自动死机呢?报错的内容是写了某块不允许写的内存。

使用特权

评论回复
yy215478|  楼主 | 2016-9-9 23:48 | 显示全部楼层
本帖最后由 yy215478 于 2016-9-10 09:05 编辑
songchenping 发表于 2016-9-9 10:22
不知道你的十个队列之间互相关系是个什么样子的。理论上并行是互不干扰的。如果互相之间的数据存在某种计 ...

Used Channel为十张板卡采集数据的10个队列
1.bmp

使用特权

评论回复
songchenping| | 2016-9-12 09:37 | 显示全部楼层
你可以用最原始的办法试一下,就是先将一个板卡的测试程序写好,并调试通过,然后进行复制,相应的变量也进行重命名,这样就产生了10个测试通道,各自跑各自的,这样虽有耗内存,但是容易看出问题出现在什么地方。

使用特权

评论回复
yy215478|  楼主 | 2016-9-12 10:31 | 显示全部楼层
songchenping 发表于 2016-9-12 09:37
你可以用最原始的办法试一下,就是先将一个板卡的测试程序写好,并调试通过,然后进行复制,相应的变量也进 ...

这样子啊,那好吧,谢谢你哦

使用特权

评论回复
songchenping| | 2016-9-12 10:56 | 显示全部楼层
yy215478 发表于 2016-9-12 10:31
这样子啊,那好吧,谢谢你哦

别人不真正了解你的项目需求,能做的也只是给你提供一些最基本的方法而已,主要还得要考你自己理解的来解决,毕竟你是最了解你项目需求的人啊。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:努力造就实力,态度决定高度

113

主题

230

帖子

3

粉丝