2011-03-11 10 views
8

में रखे बिना सिमुलिंक मॉडल में इनपुट कैसे प्रदान करूं, मेरे पास एक सिमुलिंक मॉडल है जो वर्तमान में एक स्क्रिप्ट से चलाया जा रहा है (यानी कोई फ़ंक्शन नहीं)। लिपि वैरिएबल वैल्यू को MATLAB वर्कस्पेस पर लिखती है, मॉडल सिमुलेशन (जो इन मानों का उपयोग करती है) चलाती है, और फिर मॉडल वर्कस्पेस को अतिरिक्त मान लिखता है। यदि मैं स्क्रिप्ट को किसी फ़ंक्शन में परिवर्तित करने का प्रयास करता हूं (यानी फ़ाइल के शीर्ष पर function [output] = runSim() डालकर) तो सिमुलिंक शिकायत करता है कि यह चर के बारे में नहीं जानता है, संभवतः क्योंकि वे MATLAB वर्कस्पेस में नहीं हैं, बल्कि वे अंदर हैं समारोह का दायरामैं वर्कस्पेस

क्या इनपुट के साथ सिमुलिंक मॉडल प्रदान करने और वर्कस्पेस में चिपकाने के अलावा सिमुलिंक मॉडल से आउटपुट लेने का एक शानदार तरीका है?

उत्तर

9

यह स्पष्ट नहीं है, लेकिन आप sim() कमांड और कॉलिंग फ़ंक्शन के वर्कस्पेस से डेटा इनपुट/आउटपुट कर सकते हैं। मैंने इसे & से पहले किया है, काम पर एक उदाहरण है लेकिन सोमवार तक सत्यापित करने के लिए वहां नहीं जा सकता है। हालांकि, कोशिश सूचीबद्ध समाधान on Mathworks's site:

समाधान:

Simulink में चर मुखौटा मापदंडों का उपयोग कर, आधार कार्यक्षेत्र Simulink की डिफ़ॉल्ट स्रोत कार्यक्षेत्र है। हालांकि, SIMSET कमांड का उपयोग करके, यह कार्यस्थान बदला जा सकता है। सिम है, फिर सिमसेट द्वारा बनाई गई इस विकल्प संरचना के साथ उपयोग किया जाता है। निम्नलिखित उदाहरण यह है कि यह कैसे करें।

options = simset('SrcWorkspace','current'); 
    sim('modelname',[],options) 

... हालांकि जाहिरा तौर पर इस पैरलल कंप्यूटिंग उपकरण बॉक्स के साथ असंगति के कारण R2009b में पदावनत किया गया> :(लग रहा है सही समाधान की तरह स्पष्ट रूप से अनुकरण मॉडल कार्यक्षेत्र में चर (अलग पुश करने के लिए है बेस वर्कस्पेस से), assignin() का उपयोग कर।

  1. R2009b से पहले रिलीज के लिए, SIMSET प्रलेखन को देखो:

    http://www.mathworks.com/matlabcentral/newsreader/view_thread/292544

    आप 2 विकल्प हैं। यह आपके फ़ंक्शन से डेटा का उपयोग करने के लिए "वर्तमान" में "SrcWorkspace" प्रॉपर्टी सेट करने के लिए को अनुमति देता है।

http://www.mathworks.com/support/solutions/en/data/1-1BWDA/?solution=1-1BWDA

  1. नए रिलीजों में, इस विकल्प को पदावनत क्योंकि यह पैरलल कंप्यूटिंग उपकरण बॉक्स और PARFOR के अनुरूप नहीं है। क्या मेरा सुझाव है:

http://www.mathworks.com/support/solutions/en/data/1-ASPEIV/?solution=1-ASPEIV

+0

क्या यह विधि मॉडल संदर्भों और आरटीडब्ल्यू के साथ संकलन के लिए काम करेगी? – Miebster

+0

कि आपको Mathworks में लोगों से पूछना होगा; मैंने आरटीडब्लू का कभी भी उपयोग नहीं किया है, या एम-फाइल से सिमुलेशन चलाने के अलावा सिमुलिंक में गहराई से प्राप्त किया है। –

+0

पहला विकल्प 200 9 में काम करता है ... इसलिए जब तक यह मुझे काटता है तब तक मैं उसके साथ रहना चाहता हूं। धन्यवाद! – JnBrymn

0

लघु जवाब: नहीं

मैं गलत हो सकता है, लेकिन मैं आपको कुछ पृष्ठभूमि दे। मैं एक सिमुलिंक मॉडल पर काम करता हूं जो बहुत बड़ा है, हम वर्षों से इस पर काम कर रहे हैं। आज तक हम कार्यक्षेत्र के माध्यम से सभी आवश्यक चर लोड करते हैं। यह लंबे समय से मेरी शिकायत रही है, इतना है कि मैथवर्क्स ने Simulink.save_vars फ़ंक्शन प्रदान करके इस मुद्दे को भी संबोधित किया है। ऐसा लगता है कि आप पहले से ही एक स्क्रिप्ट/फ़ंक्शन के साथ चर सेट कर रहे हैं, इसलिए Simulink.save_vars आपके लिए अधिक उपयोग नहीं करेगा।

आप कुछ चर के लिए संरचनाओं का उपयोग करके वर्कस्पेस को साफ़ कर सकते हैं, अधिकांश सिमुलिंक ब्लॉक संरचनाओं का समर्थन नहीं करते हैं, लेकिन कुछ करते हैं। साथ ही, आपके मॉडल की ज़रूरतों के अलावा वर्कस्पेस में कुछ भी डालने से बचें।

+0

वास्तव में ?! ओह ... प्यूक। – JnBrymn

+1

-1 क्योंकि मैंने इसे किया है। –

2

आप किसी विशिष्ट वर्कस्पेस में अपने स्वयं के फ़ंक्शन को MATLAB अभिव्यक्ति (एक स्ट्रिंग के रूप में) से निष्पादित करने के लिए evalin() फ़ंक्शन का उपयोग कर सकते हैं, अपने मामले में SIMULINK के लिए 'आधार' उन्हें ढूंढने के लिए। हालांकि, अगर आप सीधे वर्कस्पेस का उपयोग नहीं करना चाहते हैं तो आप से/टू फाइल ब्लॉक का उपयोग करके/मैट फाइलों से संकेतों या चरों को लोड और सहेज सकते हैं।

0

खैर मैं इसे कैसे एक साधारण समारोह से ऐसा करने के लिए पता नहीं है, लेकिन यह एक वर्ग समारोह (विधि) के अंदर से यह करने के लिए वास्तव में आसान है। यह संस्करण 200 बी के साथ ठीक काम करता है।

प्लेस फ़ाइल Test.m में कोड:

classdef Test < handle 
    properties 
     mdl 
     % Default input signal 
     t = [0 1 1 2]' 
     u = [0 0 1 1]' 
    end 

    methods 
     function this = Test(mdl) % Constructor 
      this.mdl = mdl; 
     end 

     function sim(this) 
      % Load model 
      load_system(this.mdl); 
      % Prepare model configuration 
      conf = getActiveConfigSet(this.mdl); 
      cs = conf.copy(); 
      set_param(cs, 'StopTime', '4'); 
      set_param(cs, 'LoadExternalInput', 'on'); 
      set_param(cs, 'ExternalInput', '[test.t test.u]'); % <-- 1 
      % Run simulation 
      simout = sim(this.mdl, cs); 
      % Plot results 
      tout = simout.find('tout'); 
      yout = simout.find('yout'); 
      plot(tout, yout(:,1), 'b--'); 
     end 
    end 
end 

तो बस:

>> test = Test('TestSim'); 
>> test.sim(); 

क्या होता है? आप ऑब्जेक्ट टेस्ट बनाते हैं, जिसने फ़ील्ड टी और यू परिभाषित किया है। फिर विधि सिम() में आप इनपुट '[test.t test.u]' इनपुट देखने के लिए सिमुलिंक से कहते हैं। सिमुलिंक और विधि सिम() दोनों में इस चर के लिए उपयोग है (मुझे विश्वास है कि यह सबसे महत्वपूर्ण बात है)।

ठीक है, फिर भी यह एक बड़ी कमी है जो नंबर 1 के साथ चिह्नित है। आपको स्पष्ट रूप से पता होना चाहिए कि वर्कस्पेस (इस मामले में 'परीक्षण') में क्लास इंस्टेंस का संदर्भ कैसे दिया जाएगा। आप इसे किसी कन्स्ट्रक्टर में नाम पास करके काम कर सकते हैं, या आप स्थैतिक चर और विधियों का उपयोग कर सकते हैं, लेकिन इस तरह से आप गतिशील रूप से इनपुट सिग्नल को बदलने की अनुमति नहीं देंगे।

+0

हम्म, यह पहले सुरुचिपूर्ण दिखाई देता है लेकिन मुझे पूरा यकीन है कि टेस्ट ऑब्जेक्ट को अभी भी बेस वर्कस्पेस में होना होगा - इसलिए यह ओपी की समस्या के स्थान को बदल देता है। इसके अलावा, एक टिप: सावधान रहें "XXXXtest" या "textXXXX" - आप अनजान ढांचे के साथ समस्याओं में भाग लेंगे, जो यूनिट परीक्षण मामलों के रूप में इस फैशन में नामित कक्षा फाइलों को उठाएंगे। – thclark

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