有没有办法以编程方式设置我正在读取或写入的FPGA变量,以便我可以为我想要运行的每个对象推广我的主仿真循环?除了读取和写入的FPGA变量之外,每个对象的模拟循环是相同的。详情如下。
我有一个代码,它使用LabVIEW OOP来定义我想要模拟的一堆事物。然后,每个 thing 都有一个update
方法,该方法在RT控制器上的定时循环内运行,获取一组输入,并返回一组输出。其中一些输入来自FPGA,一些输出在发送到硬件之前传回FPGA进行一些处理。
我的问题是我的代码中每个 thing 都有一个单独的模拟VI,因为每个 thing 都会读取不同的值并返回给FPGA。这是一种可维护性的痛苦,似乎是为了更好的方法而哭泣。问题如下所示。重要的部分是FPGA输入和输出节点(每个 thing 更改),以及update
方法的输入和输出集群(总是相同)。
是否有某种方法可以定义通用主仿真VI,然后以编程方式(可能存储在我的事物中的属性)告诉它使用哪些特定的输入和输出?
如果是这样,那么我认为显而易见的下一步是使主模拟循环成为我的对象的公共方法,并为我需要模拟的每个对象调用该方法。
谢谢!
答案 0 :(得分:2)
简短的回答是否定的。不幸的是,一旦你使用LabVIEW FPGA进入硬件级别,事情开始变得非常静态,并依赖于硬编码的IO访问。这通常与您呈现当前方法的方式完全一致。但是,您可以在此处使用一些技巧来封装IO访问。
考虑到这一点,将图上的IO节点定义为接口,并使用函数(或VI或方法,无论您喜欢哪个术语)将它们抽象出来。您可以使用动态VI调用或面向对象的方法来实现它。
您知道您的界面定义的数据类型是众所周知的,因为您正在从不会更改的群集中推送它们。
通过方法调用抽象出硬件IO,然后您可以维护一个函数调用库,它代表每个"事物的唯一硬件访问。在你的系统中。这将在专用于该作业的一段代码中封装对硬件IO访问的更改。
使用动态VI调用很难看,但是你可以使用"的东西"指明你需要为这件事的IO调用的确切功能的路径。
面向对象的方法可能会让您创建一个小的类层次结构,其中的根对象表示通用IO访问(可能什么都不做),子项覆盖核心方法调用以进行读取或写入。此调用将引入您的FPGA参考并吐出每个硬件调用将返回的变量(反之亦然,以进行读取)。在引擎盖下,它负责确定要访问的FPGA上的哪个IO。示例如下:
请记住,这远不是功能,我只是想让你看看图表的样子。该方法将帮助您进一步推广主循环,并允许您按照建议将其嵌入公共呼叫中。
答案 1 :(得分:0)
这看起来像是一个[对象映射]问题,LabVIEW并没有很好的支持,但可以做到。
我的代码将一个集群映射到另一个集群,假设控制类型相同,使用2列数组作为"查找。"