मैं एक एक्सएमएल फ़ाइल लोड करने की कोशिश कर रहा हूं जिसका प्रयोग लैबव्यू में मेरे डीएक्यू को कॉन्फ़िगर करने के लिए किया जाएगा।
तो मेरे पास विकल्पों को देखते समय:
- मेरा एक्सएमएल चैनल विन्यास गतिशील है - जिसका अर्थ है कि एक एक्सएमएल में 3 चैनल हो सकते हैं और दूसरे में> 100 चैनल हो सकते हैं।
- मेरे लिए पाइथन में एक्सएमएल को पार्स करना और डेटा को लैबव्यू में संरचना/कार्य के रूप में पास करना बहुत आसान होगा।
जैसे एक्सएमएल चैनल के लिए
<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>
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 में DICT को कैसे हैंडल करें? या डेटा पास करने का कोई बेहतर समाधान है?
- DAQmx चैनलों को गतिशील रूप से कॉन्फ़िगर करने के लिए पैरा डेटा का उपयोग करें
मैंने लैबव्यू में एक्सएमएल पार्सर बनाने का प्रबंधन नहीं किया क्योंकि यह अधिक कठिन कोडिंग को लागू करता है और एक निश्चित सख्ती रखता है।
मैं LV DAQmx को लक्षित कर रहा हूं नमूना उदाहरण जारी रखता हूं और कॉन्फ़िगरेशन को पार्स किए गए xml से प्रतिस्थापित करता हूं।
असफ़ बेकर का समर्थन करने वाले सभी लोगों के लिए धन्यवाद
1 उत्तर
लैबव्यू में एक्सएमएल पार्स करना
LV में XML को पार्स करना थोड़ा मुश्किल है, लेकिन उतना मुश्किल नहीं है। हो सकता है, आप इसे आजमाएं?
यह कोड सभी चैनलों पर लूप करता है, विशेषताओं को निकालता है name
और virtual
, और उनके बच्चों RollingAvg
से, यह विशेषता do_rolling_avg
निकालता है।
हो सकता है, पहले नोड के सभी गुणों/मानों की सूची प्राप्त करना अधिक आसान हो, और फिर जेनरेट किए गए सरणी पर काम करें:
अब, स्मृति रिसाव से बचने के लिए अंत में सभी संदर्भों को बंद करना महत्वपूर्ण है, जो यहां त्वरित और गंदा किया जाता है।
इसके अलावा, अगर कुछ नहीं मिलता है, तो खोज VI एक त्रुटि फेंक देगा। (आपका पायथन भी ऐसा करेगा)। यदि आवश्यक हो तो कुछ त्रुटि प्रबंधन को जोड़ा जाना चाहिए।
यदि आप Python का उपयोग करने पर जोर देते हैं
आज, LV से सीधे Python को चलाने का विकल्प है। मुझे यह नहीं पता, मेरा एलवी 2017 का है। वहां, कमांडलाइन पर किसी भी कमांड को चलाने के लिए System Exec.vi
का उपयोग करना संभव है, और इसके आउटपुट को LV में वापस पढ़ें:
अंत में, जो पायथन प्रिंट करता है, उसे स्ट्रिंग के रूप में वापस कर दिया जाएगा। मैं JSON के साथ काम करूंगा, जो आसानी से एक निर्देश को 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 संरचना के अनुसार क्लस्टर को परिभाषित करें, और इसे भरने के लिए Unflatten from JSON
VI का उपयोग करें। क्लस्टर तत्वों के नाम JSON कोड से मेल खाने चाहिए।
हालाँकि, JSON केवल साधारण डेटा प्रकारों को जानता है। समय या किसी अन्य जटिल डेटाटाइप को स्थानांतरित करने का कोई तरीका नहीं है, जब तक कि इसे टाइमस्टैम्प वाली स्ट्रिंग की तरह कुछ और सरल के रूप में पैक नहीं किया जा सकता है।
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।