使用Python将XML作为任务/集群读取到LabVIEW以配置DAQ
我正在尝试加载一个XML文件,该文件将用于在LabVIEW中配置我的DAQ 因此,在查看我的选项时:使用Python将XML作为任务/集群读取到LabVIEW以配置DAQ,python,xml,labview,Python,Xml,Labview,我正在尝试加载一个XML文件,该文件将用于在LabVIEW中配置我的DAQ 因此,在查看我的选项时: 我的XML通道配置是动态的——这意味着一个XML可能有3个通道,另一个可能有>100个通道 对我来说,在Python中解析xml并将数据作为结构/任务传递给LabVIEW会容易得多 e、 g.对于XML通道 <Channels> <Channel name="CH_PH1" enable="True" visible=&q
<Channels>
<Channel name="CH_PH1" enable="True" visible="False" virtual="False" units="A" physical_channel="PXI1Slot2/ai0" b_factor="0" m_factor="1033.221069" measurement_type="VOLTAGE" type="D" max_value="0.1" min_value="-0.1">
<RollingAvg do_rolling_avg="False" rolling_avg_frame_sec="0" />
</Channel>
<Channel name="CH_PH2" enable="True" visible="False" virtual="False" units="A" physical_channel="PXI1Slot2/ai1" b_factor="0" m_factor="1073.772766" measurement_type="VOLTAGE" type="D" max_value="0.1" min_value="-0.1">
<RollingAvg do_rolling_avg="False" rolling_avg_frame_sec="0" />
</Channel>
<Channel name="P_CH" enable="True" visible="False" virtual="True" units="V" formula="CH_PH1*CH_PH2" doTotalEnergy="False">
<RollingAvg do_rolling_avg="False" rolling_avg_frame_sec="0" />
</Channel>
<Channel name="P_PH_Total" enable="True" visible="False" virtual="True" units="V" formula="CH_PH1+CH_PH2" doTotalEnergy="False">
<RollingAvg do_rolling_avg="False" rolling_avg_frame_sec="0" />
</Channel>
</Channels>
所需帮助:
name
和virtual
,并从其子项RollingAvg
,提取属性do\u rolling\u avg
也许,首先获取节点的所有属性/值的列表,然后处理生成的数组更方便:
现在,重要的是在最后关闭所有引用以避免内存泄漏,这在这里是快速而肮脏的
此外,如果没有找到某个内容,搜索VIs将抛出一个错误。(您的Python也会这样做)。如有必要,应添加一些错误处理
如果您坚持使用Python 现在,有一个选项可以直接从LV运行Python。我不知道,我的LV是2017年的。 在这里,可以使用
System Exec.vi
在命令行上运行任何命令,并将其输出读回LV:
最后,Python打印的内容将作为字符串返回。
我会使用JSON,它可以轻松地将dict转换为JSON:
import json
a=[]
a.append({'name':'CH_PH1', 'virtual':False, 'RollingAvgFrame':3.141})
a.append({'name':'CH_PH2', 'virtual':True, 'RollingAvgFrame':42.0})
print(json.dumps(a))
输出:
[{"name": "CH_PH1", "virtual": false, "RollingAvgFrame": 3.141},
{"name": "CH_PH2", "virtual": true, "RollingAvgFrame": 42.0}]
在LV中,根据JSON结构定义集群,并使用JSON中的Unflatten
VI填充集群。集群元素的名称必须与JSON代码中的名称匹配
然而,JSON只知道简单的数据类型。没有办法传输时间或任何其他更复杂的数据类型,除非它可以打包为更简单的东西,比如包含时间戳的字符串。您可能会发现使用TestScript更容易,TestScript是Wineman Technology提供的免费LabVIEW/Python连接器,主要由您自己编写。对于JSON,我建议使用JKI提供的JSON工具包,或者JSontextToolkit。它们都支持除类以外的所有LV数据类型。哇,非常感谢您提供的详细答案。非常感谢。我将查看并研究它,如果可以的话,还会提出更多问题:)Json选项看起来很不错,我想我会同意。Json选项是否支持动态通道数,或者我必须定义一个固定长度的结构?有没有一种方法可以剪切您所做的XML解析vi,以便我更好地使用它并学习?@user27400068,该vi是一个片段-尝试将此图像拖放到LabVIEW block diagram,2017或更高版本。关于JSON-可能有动态数量的通道(将被视为JSON数组类型),但要注意通道数据。所有元素都应该有相同的组件,您可能会发现使用TestScript更容易,TestScript是Wineman技术提供的免费LabVIEW/Python连接器,主要由您自己编写。
[{"name": "CH_PH1", "virtual": false, "RollingAvgFrame": 3.141},
{"name": "CH_PH2", "virtual": true, "RollingAvgFrame": 42.0}]