我想创建一个VI,它将接受Integer、float、bool、string或enum作为输入节点(但只有一个节点),然后在我的VI中检测输入类型,以便我可以以不同的方式使用数据。有人能为我指明正确的方向吗?我正在考虑变种,但不确定该怎么做。
我希望我的VI基本上以与使用模板类型的C++函数或重载函数相同的方式工作。
谢谢,Eamonn
一些附加选项:
- 应该有一些运输VI告诉你变体中的数据类型。这应该简化之前的建议,因为你只需从一个案例结构开始,并在每个案例中转换为一种类型。vi应该在vi.lib中,我相信在一个名为VariantDataType的文件夹中,或者可能在Utility文件夹中
- 创建一个多态VI-它基本上是一组使用poly VI连接的VI(每个数据类型一个)。一旦您将其放入图表中,LV就会根据您使用的导线类型自动选择正确的VI。这样做的最大优点是代码简单明了
您可以使用变体。LabVIEW变体允许任何数据类型作为输入。要对变体做任何有用的事情,您需要使用"variant To Data"并将变体转换为可用的数据类型。
现在,完成您正在做的事情的最简单方法是简单地循环使用您想要使用的各种数据类型,并对所有数据类型调用"Variant to data"并检查错误。只有正确的数据类型才会运行而不会产生错误。
还有其他动态转换变体的方法,但它们要复杂得多(要么用更多的数据编码变体,要么手工编写解析器)。
LabVIEW没有很好的模板或重载功能(可以使用重载,但它只适用于LabVIEW对象,大多数LabVIEW数据类型都不是对象)。
Polmorphic vi听起来是一个不错的解决方案,但在这种情况下,您需要将数据连接到vi,以便编译器在运行之前知道需要什么样的数据。它不适用于在运行时向vi发送不同数据类型的情况。扫描变量会起作用,或者你可以创建一个包含数据类型描述和变量数据的字符串/枚举集群,然后接收vi就会知道数据类型。是的,非常有趣,这是我第一次听说检查变体中的数据类型,这些vis在vi.lib\Utility\VariantDataType中,但我在调色板中看不到它们。