第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用Python將XML作為任務(wù)/集群讀取到LabVIEW以配置DAQ

使用Python將XML作為任務(wù)/集群讀取到LabVIEW以配置DAQ

一只名叫tom的貓 2024-01-04 17:14:53
我正在嘗試加載一個 XML 文件,該文件將用于在 LabVIEW 中配置我的 DAQ。因此,當我查看選項時,我有:我的 XML 通道配置是動態(tài)的 - 這意味著一個 XML 可能有 3 個通道,另一個 XML 可能有 >100 個通道。對我來說,用 Python 解析 xml 并將數(shù)據(jù)作為結(jié)構(gòu)/任務(wù)傳遞給 LabVIEW 會更容易。例如對于 XML 通道<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>我的 Python 代碼用于解析 xml:def xml():    import xml.etree.ElementTree as ET    tree = ET.parse(r'C:\Users\LAB_PTG\Desktop\Cosmo_v0.93.6\nidaq.xml')    root = tree.getroot()    P={}    C={}    for Channel in root.iter('Channel'):        z=(Channel.attrib)        if z['virtual']=='False':            P.update({z['name']:(z['physical_channel'],z['enable'],z['m_factor'],z['max_value'])})        else:            C.update({z['name']:(z['formula'])})    print(P,C)需要幫助:如何在LabVIEW中執(zhí)行代碼?如何在LabVIEW中處理DICT?或者有更好的解決方案來傳遞數(shù)據(jù)嗎?使用 paras 數(shù)據(jù)動態(tài)配置 DAQmx 通道我沒有設(shè)法在 LabVIEW 中創(chuàng)建 xml 解析器,因為它強制執(zhí)行更多硬編碼并具有固定的限制。我的目標是 LV DAQmx 繼續(xù)采樣示例,并用解析的 xml 替換配置。
查看完整描述

1 回答

?
Cats萌萌

TA貢獻1805條經(jīng)驗 獲得超9個贊

在Labview中解析XML

在 LV 中解析 XML 有點棘手,但也不是那么困難。也許,你嘗試一下?

此代碼循環(huán)遍歷所有通道,提取屬性namevirtual,并從它們的子通道中RollingAvg提取屬性do_rolling_avg

https://img1.sycdn.imooc.com/6596773f0001fdfe07880465.jpg

也許,首先獲取節(jié)點的所有屬性/值的列表,然后處理生成的數(shù)組更方便:

https://img1.sycdn.imooc.com/6596774d0001c3d303320113.jpg

現(xiàn)在,重要的是在最后關(guān)閉所有引用以避免內(nèi)存泄漏,這里這樣做是快速而骯臟的。

此外,如果未找到某些內(nèi)容,搜索 VI 將拋出錯誤。(你的 Python 也會這樣做)。如有必要,應(yīng)添加一些錯誤處理。


如果你堅持使用Python

如今,可以選擇直接從 LV 運行 Python。我不知道這一點,我的 LV 是 2017 年的。在那里,可以使用System Exec.vi在命令行上運行任何命令,并將其輸出讀回 LV:

https://img1.sycdn.imooc.com/6596775d000143e902820149.jpg

最后,Python 打印的內(nèi)容將以字符串形式返回。我會使用 JSON,它可以輕松地將 dict 轉(zhuǎn)換為 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中,根據(jù)JSON結(jié)構(gòu)定義一個簇,并使用Unflatten from JSONVI填充它。集群元素的名稱必須與 JSON 代碼中的名稱匹配。

https://img1.sycdn.imooc.com/6596776e00016ad805310250.jpg

然而,JSON 只知道簡單的數(shù)據(jù)類型。沒有辦法傳輸時間或任何其他更復(fù)雜的數(shù)據(jù)類型,除非可以將其打包為更簡單的東西,例如包含時間戳的字符串。



查看完整回答
反對 回復(fù) 2024-01-04
  • 1 回答
  • 0 關(guān)注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號