WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Probleme mit assignin

 

assignin

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2008, 16:57     Titel: Probleme mit assignin
  Antworten mit Zitat      
Ich habe folgende Funktion:
Code:

function [Out]=Verdichter(In)
%Funktion Verdichter: function Out=Verdichter(In)
%Es werden 2 Input Werte benötigt /2 Output Werte
%Alle Werte der Thermodynamischen Ebene, die vom Verdichter beeinflusst werden, werden neu berechnet

Out=In;


Ebene_in=In(1);
Ebene_out=In(2);

%Auslegungspunkt einlesen

varexist=evalin('base',['exist(''AP' ''')']);
if(varexist==0)  
%wenn kein AP existiert: gibts eine lokale AP Variable sie null ist
AP=0;
assignin('base','AP',0);
else
    AP = evalin('base', 'AP');
end


%KomponentenDaten einlesen
varexist=evalin('base',['exist(''Verdichter' num2str(Ebene_in) '_' num2str(Ebene_out) ''')']);

if(varexist==0)
   
Daten=[0 0 0 0 0 0 0 0 0 0 0 0];    
assignin('base',['Verdichter' num2str(Ebene_in) '_' num2str(Ebene_out)],Daten);
   
else
   
Daten = evalin('base',['Verdichter' num2str(Ebene_in) '_' num2str(Ebene_out)]);

end

Daten_pi=Daten(1);
Daten_wred=Daten(2);
Daten_n=Daten(3);
Daten_ap_Tin=Daten(4);
Daten_eta=Daten(5);
Daten_eta_stoer=Daten(6);
Daten_dH=Daten(7);
Daten_Leistung=Daten(8);
Daten_Moment=Daten(9);
Daten_Z=Daten(10);
Daten_Welle=Daten(11);
Daten_nred_ap=Daten(12);



%WellenDaten einlesen
varexist=evalin('base',['exist(''Welle' num2str(Daten_Welle) ''')']);

if(varexist==0)
    Welle=[0 0 0 0 0];
    assignin('base',['Welle' num2str(Daten_Welle)],Welle);

else
Welle = evalin('base',['Welle' num2str(Daten_Welle)]);
end
WellenDaten_eta_mech=Welle(1);
WellenDaten_P_ext=Welle(2);
WellenDaten_theta=Welle(3);
WellenDaten_n=Welle(4);
WellenDaten_nref=Welle(5);



%KennfeldDaten einlesen

varexist=evalin('base',['exist(''loadfileV' ''')']);

if (varexist==0)
loadfileV = '../Kennfelder/V_ALL_99.mat';
else
loadfileV = evalin('base', 'loadfileV');    
end

load (loadfileV);
Referenzdrehzahl=KF_Head(1,2);
%disp(Referenzdrehzahl);

varexist=evalin('base',['exist(''Ebene_' num2str(Ebene_in) ''')']);

if (varexist==0)
E_in=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
assignin('base',['Ebene_' num2str(Ebene_in)],E_in);    
else
E_in = evalin('base', ['Ebene_' num2str(Ebene_in)]);
end

varexist=evalin('base',['exist(''Ebene_' num2str(Ebene_out) ''')']);

if (varexist==0)
E_out=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
assignin('base',['Ebene_' num2str(Ebene_out)],E_out);    
else
E_out = evalin('base', ['Ebene_' num2str(Ebene_out)]);
end

%E_in = evalin('base', ['Ebene_' num2str(Ebene_in)]);
%E_out = evalin('base', ['Ebene_' num2str(Ebene_out)]);


E_out=E_in;
E_out(1)=1;
  W_in = E_in(1);
  P_in   = E_in(7);
  T_in   = E_in(5);
  H_in   = E_in(9);
  FAR_in = E_in(4);

%  KF_n=1;
%  Z=1;
%  eta=1;

  if (AP==1)
 
    E_in(3) = E_in(1) * sqrt(E_in(5)) / E_in(7);
    Daten_wred = E_in(3);           %/* reduzierter Massenstrom */
    KF_eta     = Daten_eta;
   KF_wred    = Daten_wred;
    KF_pi      = Daten_pi;
   
    %Welle noch zu machen
   %n    = (WellenDaten[Daten->Welle]._n /WellenDaten[Daten->Welle]._nref / sqrt(T_in/KF->_Tref));
   
    Daten_ap_Tin    = T_in;  %/* der Wert von KF->_nred_ap und _komp[it].Welle wird in Welle.c bestimmt */
    %Daten->bleed_air = FALSE;
   %CoolDaten_HDT->bleed_air=FALSE;            //Tom
   %CoolDaten_NDT->bleed_air=FALSE;            //Tom
    %for (i=0; i<MaxBleedAir; i++)
    %if (Daten->Kuehlluftdaten[i].Stufe != _int_empty)
   %{
%      Daten->bleed_air=TRUE;
   %   CoolDaten_HDT->bleed_air=TRUE;         //Tom  
   %   CoolDaten_NDT->bleed_air=TRUE;         //Tom
   %}
 
  else
 
    KF_n = (WellenDaten_n / sqrt(T_in))/(Daten_nred_ap);
   %disp(KF_n);
    %GetKF_Data (KF, _MOD_NAME));
   KF_n=(WellenDaten_n)/Referenzdrehzahl;
   
    %disp(KF_n);
    KF_pi=1;
    KF_wred=1;
    KF_eta=1;
   
    if((KF_n>0 && KF_n<1) && (Daten_Z>0 && Daten_Z<1))
    KF_pi=1;
    KF_wred=1;
    KF_eta=1;
        %[KF_pi KF_wred KF_eta]=KF_Verdichter(KF_n,Daten_Z);
    else
    KF_pi=1;
    KF_wred=1;
    KF_eta=1;
    end
   
    %disp(KF_pi);
    E_in(3) = KF_wred;
   
    Daten_eta = KF_eta + Daten_eta_stoer;  
   
    %disp(T_in);
    %disp(P_in);
   
    E_in(1)  = E_in(3)/ sqrt(T_in) * P_in;    
   
   
   
    E_in(2) = E_in(1);


  end
   
 
 
  Tis = T_psi((E_in(11) + log(KF_pi)),FAR_in);
  Daten_dHV = (h_(Tis,FAR_in)-H_in)/(Daten_eta);

  %/* Keine Kuehlluftstroeme */
  %/* Keine Distortioneffekte */
     
  E_out(9)   = H_in+Daten_dHV;
 
  E_out(5)   = T_h(E_out(9),FAR_in);
 
 


  E_out(11) = psi_(E_out(5), FAR_in);
  E_out(7)   = P_in * KF_pi;
 
 
   
 % E_out(1)   = 0;
disp(E_in(1));
  E_out(3)  = E_out(1) * sqrt(E_out(5)) / E_out(7);
  E_out(2)  = E_in(1);
 
  E_out(4) = 0;
  E_out(21) = 1;
 
 
  %disp(isfloat(E_in(1)));
 
 assignin('base',['Ebene_' num2str(Ebene_out)],E_out);
 
  Daten_dH       = Daten_dHV;
  Daten_Leistung = Daten_dHV * E_out(1);
  Daten_Moment  = Daten_Leistung / ( WellenDaten_n * pi / 30. );
 

%   assignin('base',['Ebene_' num2str(Ebene_out)],E_out);
   
Daten(1)=Daten_pi;
Daten(2)=Daten_wred;
Daten(3)=Daten_n;
Daten(4)=Daten_ap_Tin;
Daten(5)=Daten_eta;
Daten(6)=Daten_eta_stoer;
Daten(7)=Daten_dH;
Daten(8)=Daten_Leistung;
Daten(9)=Daten_Moment;
Daten(10)=Daten_Z;
Daten(11)=Daten_Welle;
Daten(12)=Daten_nred_ap;

   assignin('base',['Verdichter' num2str(Ebene_in) '_' num2str(Ebene_out)],Daten);
 


Im groben lese ich hier ein paar Variablen aus dem Workspace ein.
Unteranderem die Variable Ebene_3. Die Daten werden nun in die Variable E_out geschreiben. es ist ein Vektor mit der Länge 21.

jetzt berechne ich einige sachen.

dannach will ich die Variable E_out in die Workspace Variable Ebene_3 wieder zurückschreiben.

Dies funktioniert aber nur, wenn ich E_out(1)=0 gesetzt habe! Ist der Wert von E_out(1)=1; so hängt sich MATLAB auf.

Ich benutze MATLAB 2007b. kennt jemand dieses Problem? gibt es eine Alternativ zu assignin?

Übrigens in einer anderen Funktion benutze ich die selbe Struktur und es klappt einwandfrei!!! ich hab wohl irgend einen kleinen Fehler gemacht!!! findet ihn jemand???

Vielen Dank!!!

edit: Zukünftig bitte immer die code-Umgebung oben in der Mitte benutzen!
Gruß
Alex


nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 08.08.2008, 17:48     Titel:
  Antworten mit Zitat      
Hi,

erstell mal ein lauffähiges Beispiel samt Testdaten, so dass man den Fehler reproduzieren kann.

Ansonsten kannst Du einer Funktion ja Eingabewerte mitgeben, dann musst Du nicht alles per von Hand reinschaufeln. Entsprechendes gilt für Rückgabewerte.

Wie ist denn Dein Kenntnisstand in Sachen Matlab? Hast Du diese Programme geschrieben oder musst Du die nur benutzen?
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
schweikl_alex

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2008, 18:38     Titel: habs geschafft
  Antworten mit Zitat      
Vielen Dank für die Antwort!

Habs schon hinbekommen!!!
War ein fehler in einer anderen Funktion! Bin in einer endlosschleife gelandet!!!!

Danke!!!
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 08.08.2008, 21:47     Titel:
  Antworten mit Zitat      
Ok, gut das es läuft.

Ich lehne mich jetzt trotzdem mal weit aus dem Fenster und behaupte frech, dass hier durch neues Design viel Schreibarbeit zu vermeiden und Übersichtlichkeit (und Sicherheit) zu gewinnen wäre...
Wenn sich das Projekt noch in einem frühen Stadium befinden würde ich mir das überlegen.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
schweikl_alex

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2008, 15:45     Titel:
  Antworten mit Zitat      
MAch mal nen Vorschlag!! Dieses Projekt ist noch im anfangsstadium!!! Wink
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 12.08.2008, 08:42     Titel:
  Antworten mit Zitat      
Wie gesagt,

z.B. Ein- und Ausgabeparameter für Funktionen benutzen.
Wenn es jeweils viele sind kann man die in eine struct packen.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.