我想在VI上记录所有控件和指示器的值。我可以通过使用invoke节点来做到这一点 ctrl val.get all 然后使用datalog vis将名称/变量数据集群的数组保存到磁盘。
但是,我现在要施加大小限制:我只想保存数据,如果大小在阈值以下(例如100 kb),以避免生成大文件(例如,如果前面板包含图像) 。我希望此函数具有通用性,因此无法创建要按控件数据类型排除或排序的控件名称列表。
似乎一种方法是将变体数据展平为字符串,然后测量字符串的大小,但是如果控件包含大量数据(例如,最终可能会创建一个1 GB字符串)。
是否有更完善的方法来解决此问题?
答案 0 :(得分:0)
您可能希望检查每种控件类型,然后以更有效的方式检查该控件的大小。这样,对于您检测到的任何已知控件类型,就可以避免使大字符串变平的问题。一旦知道类型,即可检查阵列,图像,波形等,特别是针对其大小,而不必拼合数据。这样一来,您可以保存较小的内容,忽略已知的较大的内容,并仍将所有未知或未处理的类型展平为字符串以确定大小,然后保持通用性,可用于任何VI。 openG变体工具(以及其他工具)在控件上有很多类型检查项,因此应该不要太难实现。
答案 1 :(得分:0)
好消息(对您而言):LabVIEW在将数据渲染到前面板(WRT存储器)方面效率极低。
在控件上显示数据所花费的内存大约是将相同数据展平为字符串所需要的内存的10倍。对于数组或其他任何方法,没有太多聪明的,延迟加载的方法。如果愿意,您仍然可以对扁平化的字符串进行大小过滤,但是可以肯定的是,如果“前面板”处于打开状态,则扁平化控制值(一次一个)到字符串将比使用微不足道的内存量多一点。只需要将这些东西放在前面板上就可以了。