实时显示的方案设计
前段时间承蒙大家帮助指点,已经顺利的完成了驱动程序的dll设计,并且用VC编的程序
测试过了,功能正确。现在需要做的就是用LabVIEW做成一个vi显示并且保存波形。这
几天我把LabVIEW的书浏览了一遍,也分别在测试各个控件、结构的功能等等,但还是
有些疑惑,请大家帮忙看一下:
1)究竟该怎么显示?
我现在做的dll可以读数,一次读出一个float数据。采样率是1600S/s,显示要求实时显
示(我感觉并不是要求很高啊,用VC都可以实现)。我设计了一个while循环,利用它
的i作为数组的索引,循环一次读一次数,并送Waveform Chart显示。但是这样的弊病
一目了然:那就是根本无法实现实时显示。因为最小的延时就是1ms,而经原来讨论的
结果,显示的速率也必须是1600S/s才能满足同步显示的需要。我这样做的目的只是测
试在LabVIEW里能否打开、关闭我的板卡和数取数据,现在证明是可以的。
我打开板卡的函数返回的是一个指针,指向要显示的数组的首地址(这个数组在内存里
,而没有在LabVIEW的vi里得到体现);读取数据的函数就是利用这个首地址,加上
while的i做索引,找到数据的。我有必要在vi里构建一个数组吗?如果需要的话,怎么对
它赋值呢?如果是数组的话,可以用 Waveform Graph吗?(因为它的光标功能我觉得
很好)
2)数据该怎么存储?
我要测一个电机启动的波形,2min,数据量不大,也就1600×6(6路数据)×4字节×
2min = 768kB。关键用什么格式比较好?用“波形文件”输入输出好吗?如果不行,用
“二进制文件”可以吗?需要实时存储,避免出现断电时数据还是内存里的情况。
这个就是我方案的主框架了,没有什么经验,老是没有得出一个行之有效的结论,请
大家畅所欲言,多提想法,不胜感激!
.68
大家给点建议啊!
3x
.68
你自己的程序设计有问题.
显示的要求本来就不高.单点显示的速度远远大于1600次/s的.比如下面附图,随机数送wav
eform显示.哪怕设到1M次也不过一秒多.
存盘的东西系统都有缓存. 你退出程序的时候自然会存到盘里面去.一般不需要管.难道你
的计算机是随时重启动的?还是随时会死机?
格式看你存盘是为了干什么了.如果是给其他程序共享,最通用的是文本文件.二进制的文件
labview的顺序和intel缺省的是反的.waveform格式和其他文件不太兼容.要是你的文件存
了只是让labview来读的,就随便你怎么玩了.
.70
关于存盘大概有个道道了,谢谢!
至于你给的那个附件,我知道这样做可以很快啊
但怎么限制到 1600S/s 的显示频率呢?要同步显示啊
实时存储是怕万一断电什么的,因为是测试一个大电机的启动,要防意外
.68
很郁闷啊!
这么多天围绕这个问题想了很久,但还是没有个结论
看的书大多停留在介绍各个控件的功能,没有上升到怎么做的高度上
即使看到一两本讲些思想的,也大多说的是NI的板卡的应用
而关于自制板卡的顶多就是几页怎么调用驱动程序dll的
这个时候多怀念VC啊,要用VC的话,我早搞定了!
可惜老板要求用LabVIEW做,而且毕业论文也是用这个做,sigh
.68
.178
斑竹终于出招了,呵呵,谢谢!
虽然已经超过了人眼的感知频率,但是要像平常用的示波器一样,至少可以看到尖峰的
出现,然后按停观察啊。而且同步显示的话,这些数据就比较好处理啊,其实我也不想
每读一个点就刷新,我想用Graph,一次显示5个左右的周波,就是160个数据,然后
每秒刷新10次,正好1600S/s,你说这样该怎么做呢?(这个做法我在VC里已经实现了,
效果不错,就是对LabVIEW怎么显示数组有点迷茫。我调用dll返回的是数组的首地址,
,可以读取指定位置的数据,也知道数组长度,怎么在LabVIEW里构建一个数组显示呢?
.68
6.1的bookshelf里有using external code in labview可以参考
传数组的指针给LV就可以了
.178
修改你的dll.直接返回数据(值). labview里面用build array控件建数组.
.70