我在cRIO FPGA目标上运行采集代码。数据从I / O节点获取并组成一个数组。此数组应始终具有相同的大小,因此我使用SubVI检查它。问题是我使用条件禁用结构来替换具有不同通道号的不同目标的采集代码。现在编译器抱怨它无法将数组解析为固定大小,这是不正确的,因为编译器可以非常容易地计算它。
如何编写我接受(在编译时)变量数组的SubVI?数组palett中的“数组大小”符号也可以这样做。怎么样?
答案 0 :(得分:1)
您可以使用查找表来实现目标。或者,如果您必须将此阵列发送到RT vi,则使用DMA FIFO会更专业。在RT端,您可以使用轮询方法并一次读取您喜欢的多个点。
答案 1 :(得分:1)
简而言之,标准的LabVIEW阵列是不可能的,因为必须修复大小以进行编译(因为这些基本上归结为芯片中的线路)。
当您确实需要可变大小时,有两种选择:
简单和浪费 - 如果有合理的上限,您可以将其设置为最高,并使用逻辑来控制"结束"。这意味着为上端编译资源,如果超过100个字节将占用大量逻辑。
可扩展但稍微强硬 - 实现大型可变大小数组的唯一方法是使用一些可用的内存选项和一些用于定义大小的附加逻辑。根据大小,您可以使用查找表(LUT)或阻止RAM。 LUT再次快速耗尽逻辑,因此只应用于小型阵列(不能记住建议的确切大小,但可能<500字节)。如果您还没有使用它,可以在http://zone.ni.com/reference/en-XX/help/371599H-01/lvfpgaconcepts/fpga_storing_data/#Memory_Items找到一些初步阅读
无论哪种方式,您都必须以某种方式将子VI传递给数组的大小,以便它知道准备好进入内存的距离,这将只是另一个输入。
在LabVIEW FPGA中更常见的是,大多数处理是在逐点数据上完成的,因此您可以集中存储逻辑而无需传递它,但这取决于算法的性质。