आप हालत घटकों का उपयोग करना चाहते हैं, वहाँ कुछ प्रतिबंध आप के बारे में पता करने की आवश्यकता है है। मॉडलिका 3.3 विनिर्देश की धारा 4.4.5 इसे अच्छी तरह से बताती है। यह कहता है "यदि स्थिति गलत है, तो घटक, इसके संशोधक, और किसी भी कनेक्ट समीकरण घटक को शामिल करते हैं, हटा दिए जाते हैं"। मैं आपको दिखाऊंगा कि आपकी समस्या को हल करने के लिए इसका उपयोग कैसे करें, लेकिन पहले मैं यह बताना चाहता हूं कि आपका समाधान क्यों काम नहीं करता है।
समस्या को मॉडल की जांच के साथ करना है। आपके मामले में, यह स्पष्ट है कि समीकरण component.x
और घटक component
दोनों मौजूद हैं या न ही मौजूद हैं। ऐसा इसलिए है क्योंकि आपने उन्हें एक ही बूलियन चर से बांध दिया है। लेकिन क्या होगा यदि आपने यह नहीं किया:
parameter Real some_number;
Component component if some_number*some_number>4.0;
equation
if some_number>=-2 and some_number<=2 then
component.x = 0;
end if;
हम देख सकते हैं कि यह आपके तर्क के समान है। के लिए component
अनुपस्थित होने पर मौजूद होने का कोई मौका नहीं है। लेकिन क्या हम सामान्य में ऐसी चीजें साबित कर सकते हैं? सं।
इसलिए, जब सशर्त घटकों को पेश किया गया था, रूढ़िवादी अर्थशास्त्र लागू किए गए थे जो हमेशा छोटे से सुनिश्चित कर सकते हैं कि चर और समीकरणों के सेट कभी भी "सिंक से बाहर नहीं" प्राप्त होते हैं।
हमें क्या विनिर्देश कहते हैं पर लौटने के लिए करते हैं: "अगर हालत झूठी है, घटक, अपने संशोधक, और किसी भी कनेक्ट समीकरणों घटक को शामिल, निकाल दिए जाते हैं"
अपने मामले के लिए, समाधान कर सकता है संभावित रूप से काफी सरल हो। "X" घोषित करने के आधार पर, आप केवल component
में संशोधन जोड़ सकते हैं, यानी।
parameter Boolean use_component=false;
Component component(x=0) if use_component;
इस की शान है कि संशोधन केवल component
पर लागू होता है है और अगर component
मौजूद नहीं है, न तो संशोधन (समीकरण) है। तो परिवर्तनीय x
और इसके संबंधित समीकरण "सिंक में" हैं। लेकिन यह सभी मामलों के लिए काम नहीं करता है (आईआईआरसी, x
के पास काम करने के लिए input
क्वालीफायर होना चाहिए ... शायद आपके मामले में यह संभव है?)।
दो शेष विकल्प हैं। सबसे पहले, समीकरण component.x
component
के अंदर रखें। दूसरा, component
पर एक कनेक्टर पेश करना है, यदि कनेक्ट किया गया है, तो वह समीकरण उत्पन्न करेगा जो आप चाहते हैं। संशोधन के मामले के साथ होता है (यह एक संयोग नहीं है), तो आपको किसी तरह के एक इनपुट कनेक्टर के साथ x
से संबद्ध कर सकते हैं और फिर इस कार्य करें:
parameter Boolean use_component;
Component component if use_component;
Constant zero(k=0);
equation
connect(k.y, component.x);
अब, मैं कल्पना कर सकता है कि तीनों मामलों पर विचार के बाद (संशोधन, समीकरण को आंतरिक करें और connect
का उपयोग करें), आप इस निष्कर्ष पर आते हैं कि उनमें से कोई भी काम नहीं करेगा। यदि यह मामला है, तो मैं नम्रता से सुझाव दूंगा कि आपको इस बात का कोई मुद्दा है कि आपने घटक को कैसे डिजाइन किया है। इन प्रतिबंधों का कारण बनने का कारण स्वयं को द्वारा शुद्धता के लिए घटकों की जांच करने की आवश्यकता से संबंधित है। यह आवश्यक है कि घटक पूर्ण हो (विनिर्देश की शब्दावली में "संतुलित")।
यदि आप ऊपर वर्णित दृष्टिकोणों के साथ समस्या का समाधान नहीं कर सकते हैं, तो मुझे संदेह है कि आपको वास्तव में संतुलित संतुलन है और आपको शायद किसी भी तरह से अपने घटक की सीमाओं को फिर से परिभाषित करने की आवश्यकता है। यदि ऐसा है, तो मैं सुझाव दूंगा कि आप जो कुछ करने का प्रयास कर रहे हैं उसके ब्योरे के साथ यहां एक और प्रश्न खोलें।