2013-07-31 7 views
5

मुझे आश्चर्य है कि मॉडल मॉडल को "डीबग" करने का कोई तरीका है, मेरा मतलब है कि लाइन लाइन कोड कोड डीबग करना और आप देख सकते हैं कि चर कैसे बदलते हैं, ऐसी चीजें?डीबग मॉडलिका कोड

मुझे पता है कि मॉडलिका कोड को सी में अनुवादित किया गया है, मैं सिर्फ यह जानना चाहता हूं कि ऐसा करने की कोई संभावना है, अगर ऐसा है, तो मेरा मानना ​​है कि यह सिमुलेशन वातावरण में से किसी के लिए एक बड़ा सुधार होगा। धन्यवाद।

हरियाणा

+0

यह भी देखें पेपर: http://dx.doi.org/10.3384/ecp12076443 – matth

उत्तर

4

यह एक अच्छा सवाल है और यह एक बहुत ऊपर आता है। लेकिन सबसे पहले, चलो एक सेकंड के लिए वापस कदम।

"लाइन द्वारा लाइन" डीबग करने का विचार कुछ प्रोग्रामिंग भाषाओं से आता है। "अनिवार्य" से मेरा मतलब है कि एक कार्यक्रम केवल निर्दिष्ट क्रम में किए जाने वाले निर्देशों का अनुक्रम है।

जब कोई जावा या पायथन को डीबग करता है, तो यह "रेखा से रेखा" दृष्टिकोण समझ में आता है क्योंकि कथन मौलिक तरीके से व्यवहार का प्रतिनिधित्व किया जाता है। यह "रेखा से रेखा" दृष्टिकोण को ब्लॉक आरेखों (उदा। सिमुलिंक) जैसे मॉडलिंग औपचारिकताओं के लिए भी बढ़ाया जा सकता है क्योंकि ग्राफिकल के दौरान, वे भी अनिवार्य हैं (यानी वे एक निर्दिष्ट क्रम में किए जाने वाले कदम हैं)।

लेकिन मॉडलिका एक अनिवार्य भाषा नहीं है। कदम, बयान या निर्देशों की कोई धारणा नहीं है। इसके बजाए, हमारे पास सर्वव्यापी समीकरण हैं। तो डिबगिंग के बारे में सोचने से लाइनरी मॉडलिका में काम नहीं करती है। यह सच है कि आप मॉडलिका से उत्पन्न सी कोड को डीबग करने के बारे में सोच सकते हैं, लेकिन यह आम तौर पर बहुत उपयोगी नहीं है क्योंकि यह समीकरणों के लिए केवल आंशिक समानता है।

तो आप मॉडलिका कोड को कैसे डिबग करते हैं? खैर, मॉडलिंग कोड डीबगिंग वास्तव में मॉडेलिका समीकरण डीबग कर रहा है। आम तौर पर, मॉडलिका मॉडल घटकों से बना होते हैं। घटकों को कनेक्ट होने पर जेनरेट किए गए समीकरण स्वचालित रूप से जेनरेट किए जाते हैं, इसलिए यह निर्धारित करें कि मॉडलिका कंपाइलर उनको सही तरीके से उत्पन्न करता है। तो घटक मॉडलों में समीकरण क्या बचा है।

इस तक पहुंचने का सबसे आसान तरीका प्रत्येक घटक को अलग-अलग परीक्षण करना है (या कम से कम संभवतः छोटे संभव मॉडल में)। मैं अक्सर कहता हूं कि मॉडलका घटकों को एक बड़े मॉडल में एक साथ फेंककर उन्हें डीबग करने की कोशिश करना एक ऑर्केस्ट्रा को सुनना और धुन से बाहर एक उपकरण को समझने की कोशिश करना है। तथ्य यह है कि मॉडलिका में ये समीकरण समीकरणों के एक साथ सिस्टम बनाने के लिए होते हैं, इसका मतलब है कि जब त्रुटियां होती हैं, तो वे कई चरों पर तुरंत प्रचार कर सकती हैं।

तो आपकी सबसे अच्छी शर्त है कि प्रत्येक व्यक्ति के लिए परीक्षण करें और घटक के व्यवहार को सत्यापित करें। मेरा अनुभव यह है कि जब आप ऐसा करते हैं, तो आप आसानी से बग को ट्रैक और खत्म कर सकते हैं।

अद्यतन: आपको अन्य लोगों के घटक मॉडल में आउटपुट जोड़ने की आवश्यकता नहीं है, उन्हें डीबग करने के लिए। एक आउटपुट किसी भी स्तर पर बनाया जा सकता है, उदा।

model SystemModel 
    SomeoneElsesComponent a; 
    SomeOtherGuysComponent b; 
end SystemModel; 

model SystemModel_Debug 
    extends SystemModel; 
    output Real someNestedSignalFromA = a.someSubsystem.someSubcomponent.someSignal; 
    output Real someOtherNestedSignalFromB = b.anotherSubsystem.anotherSignal; 
end SystemModel_Debug; 

बेशक, यह सिग्नल घटक के एकाधिक तत्काल होने पर अव्यवहारिक हो जाता है। उन मामलों में, मैं स्वीकार करता हूं कि अंतर्निहित मॉडल को संशोधित करना आसान है। लेकिन अगर वे अपने मॉडल replaceable बनाते हैं, तो आप उपरोक्त के समान चाल का उपयोग कर सकते हैं (उनके मॉडल को बढ़ाते हैं, कस्टम आउटपुट का एक गुच्छा जोड़ते हैं और फिर redeclare मूल के स्थान पर आपका मॉडल)।

+1

धन्यवाद बहुत माइकल, मैंने आपके उत्तरों से बहुत कुछ सीखा, और यही कारण है कि मैं इस जगह पर आया हूं और अपने प्रश्न पोस्ट कर रहा हूं। मैं आपसे सहमत हूं कि प्रत्येक व्यक्तिगत घटक (निम्नतम स्तर तक) सही तरीके से काम करना सबसे अच्छा तरीका है, यह बात सबसे अधिक समय है जब मैं शीर्ष स्तर पर काम करता हूं, और निम्न स्तर के कोड अधिकतर किसी और से होते हैं। मेरे "डीबगिंग" समय की बड़ी मात्रा दूसरों के कोड को समझने में बिताई गई थी। इसलिए मुझे उम्मीद थी कि अगर एक दिन मैं "देख" सकता हूं कि डिबगिंग द्वारा चर कैसे बदलते हैं। अब मैंने जो किया वह सिर्फ उनके मॉडल को डुप्लिकेट करना था और इसमें एक अतिरिक्त आउटपुट जोड़ना था। –

+0

यह काम करता है, लेकिन मूल कोड को संशोधित करने में काफी समय लगता है। –

+1

ध्यान रखें ... आपको अन्य लोगों के मॉडल में आउटपुट जोड़ने की आवश्यकता नहीं है। ऊपर मेरा अपडेट देखें। –

1

ओपनमोडेलिका में अब एक रूपांतरण डीबगर है। आप यहां देख सकते हैं कि किस वैरिएबल का मूल्यांकन किस समीकरण से किया जाता है।

संबंधित मुद्दे