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

Switchfunktion bringt nur Fehler

 

Poltergeist12
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 04.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.06.2012, 07:38     Titel: Switchfunktion bringt nur Fehler
  Antworten mit Zitat      
Hallo zusammen,

ich bin neu hier im Forum und beschäftige mich auch erst seit ein paar Wochen ausführlicher mit Simulink. Ich habe ein Simulationsmodell erstellt, in dem ich eine Switchfunction benötige. Wenn ich das Modell simulieren lassen möchte, dann kommt leider nur eine geballte Anzahl an Fehlern.

Ich poste hier mal meinen Code sowie die zugehörigen Fehlermedlungen:

Code:
function output =switchfunc(u)
%switchfunc(sh,Fn,we,wc,w2,w3,Mmot,Mk1,Mk2,Ml,stick,Mkupp)
sh=u(1);
Fn=u(2);
we=u(3);
wc=u(4);
w2=u(5);
w3=u(6);
wf=u(7);
Mmot=u(8);
Mk1=u(9);
Mk2=u(10);
Ml=u(11);
stick=u(12);
Mkupp=u(13);

%Trägheiten
J1=0.156;
Jkupp=0.5;
J2=0.2;
mf=1200
Rw=.31
J3=1.7
Jf=mf*Rw*Rw

%Steifigkeiten und Dämpfung

k1=1182;
k2=6000;
b=500;
be=0;

%Getriebeübersetzung

is=[1/3.94,1/2.14,1/1.41,1/1.12,1/0.98];
ig=1/3.73;
i=is*ig(sh);

%Kupplungsdaten

N=1; %Anzahl der Reibscheiben
Ra=0.115; %Mittlerer Reibdurchmesser
mu=0.27; %Reibwert
cslip=mu*Ra*N;
cstick=2*mu*Ra*N;

eps=1e-2;

if stick==1
    Tcfn=Fn*cstick*sign(Mkuppl);
else
    Tcfn=Fn*cslip*sign(we-wc);
end

if abs(we-wc) <= eps&abs(Mkuppfn) >=abs((J1*Mk1+Jkupp*Mmot)/(J1+Jkupp));
    Mkupp= (J1*Mk1+Jkupp*Mmot)/(J1+Jkupp);
    stick=1;
else
    Tc=Tcfn;
    stick=0;
end

Tk1d=k1*(wc-w2);
Tk2d=k2*(i*w2-w3);
Mb=b*(w3-wv);

wedot=1/J1*(Mmot -be*we-Mkupp);
wcdot=1/Jkupp*(Mkupp-Mk1);
w2dot=1/J2*(Mk1-i*Mk2);
w3dot=1/J3(Mk2-Mb);
wfdot=1/Jf*(Mb-Ml);

output= [wedot,wcdot,w2dor,w3dot,wfdot,Mkupp,Tk1d,Tk2d,stick,i]
 


Fehlermeldung:


switchfunc
4
Index expression out of bounds. Attempted to access element 2. The valid range is 1-1.
2
switchfunc
5
Index expression out of bounds. Attempted to access element 3. The valid range is 1-1.
3
switchfunc
6
Index expression out of bounds. Attempted to access element 4. The valid range is 1-1.
4
switchfunc
7
Index expression out of bounds. Attempted to access element 5. The valid range is 1-1.
5
switchfunc
8
Index expression out of bounds. Attempted to access element 6. The valid range is 1-1.
6
switchfunc
9
Index expression out of bounds. Attempted to access element 7. The valid range is 1-1.
7
switchfunc
10
Index expression out of bounds. Attempted to access element 8. The valid range is 1-1.
8
switchfunc
11
Index expression out of bounds. Attempted to access element 9. The valid range is 1-1.
9
switchfunc
12
Index expression out of bounds. Attempted to access element 10. The valid range is 1-1.
10
switchfunc
13
Index expression out of bounds. Attempted to access element 11. The valid range is 1-1.
11
switchfunc
14
Index expression out of bounds. Attempted to access element 12. The valid range is 1-1.
12
switchfunc
15
Index expression out of bounds. Attempted to access element 13. The valid range is 1-1.
13
switchfunc
49
Undefined function or variable 'stick'. The first assignment to a local variable determines its class.
14
switchfunc
50
Undefined function or variable 'Fn'. The first assignment to a local variable determines its class.
15
switchfunc
52
Undefined function or variable 'Fn'. The first assignment to a local variable determines its class.
16
switchfunc
55
Undefined function or variable 'we'. The first assignment to a local variable determines its class.
17
switchfunc
55
Undefined function or variable 'Mkuppfn'.
18
switchfunc
56
Undefined function or variable 'Mk1'. The first assignment to a local variable determines its class.
19
switchfunc
59
Undefined function or variable 'Tcfn'. The first assignment to a local variable determines its class.
20
switchfunc
63
Undefined function or variable 'wc'. The first assignment to a local variable determines its class.
21
switchfunc
64
Undefined function or variable 'w2'. The first assignment to a local variable determines its class.
22
switchfunc
65
Undefined function or variable 'w3'. The first assignment to a local variable determines its class.
23
switchfunc
67
Undefined function or variable 'Mmot'. The first assignment to a local variable determines its class.
24
switchfunc
68
Error limit reached. Suppressing further error messages.
Function: switchfuncCallers:

Was die undefinierten Variablen betrifft: Muss ich diese Variablen in Matlab zuvor hinterlegen, damit er diese aufrufen kann?

Vielen Dank schon mal für eure Hilfe!

switch.jpg
 Beschreibung:

Download
 Dateiname:  switch.jpg
 Dateigröße:  29.77 KB
 Heruntergeladen:  647 mal
Private Nachricht senden Benutzer-Profile anzeigen


_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 15.06.2012, 07:19     Titel:
  Antworten mit Zitat      
Hallo Poltergeist12,
ich habe das selbst noch nicht gemacht, aber so wie es aussieht hat u nicht die Dimensionen die du erwartest und deswegen die ganzen Fehler.

Du greifst auf u(2) beispielsweise zu, aber u hat wohl nur einen Bereich von 1 bis 1... sprich nur ein Element. Deswegen kann er auf die anderen nicht zugreifen und deswegen werden auch die Variablen nicht angelegt und er sagt, dass die unbekannt sind.

Auch seltsam ist, dass in deinem Screenshot die Fragezeichen auftauchen... eigentlich sollten da die Dimensionen stehen... funktioniert dein restliches Model ohne Probleme?
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
cybbi
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 84
Anmeldedatum: 23.08.11
Wohnort: ---
Version: Alle
     Beitrag Verfasst am: 15.06.2012, 12:03     Titel:
  Antworten mit Zitat      
Hallo,

er kann die Dimension der Eingangsvariablen nicht bestimmen. Eine Matlab-Function wird in C-Code umgesetzt und kompiliert. Deswegen muss man speziell angeben, welche Dimension deine Variable besitzt. Das ist auch meiner Meinung nach der Fehler.

Gehe zur Lösung in den Model-Explorer, dann zu deinem Matlab Function Block und setze bei der Eingangsvariablen u die Dimension auf 13. Das sollte dann funktionieren. Wenn nicht, bitte nochmal melden.

Ansonsten musst du die in der Matlab-Function verwendeten Variablen nicht weiter definieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Poltergeist12
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 04.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2012, 08:41     Titel:
  Antworten mit Zitat      
Hey,

vielen Dank für die Antwort. Wo kann ich denn die Dimension einstellen? Ich sehe nur die folgenden Einstellungen wie sie im Anhang zu sehen sind.

Vielen Dank!

explorer.jpg
 Beschreibung:

Download
 Dateiname:  explorer.jpg
 Dateigröße:  290.19 KB
 Heruntergeladen:  698 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
gastgast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2012, 09:50     Titel: schnellversuch
  Antworten mit Zitat      
Hi,

versuche mal einfach den Vektor mit Einsen zu belegen, bevor du die Werte zuweist. Ist zwar nicht korrekt, da werte ja auch 0 sein können aber zumindest sollte es dann mal laufen.

u=ones(1,13)
 
Poltergeist12
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 04.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2012, 09:58     Titel:
  Antworten mit Zitat      
also die Idee mit der Matrix für u geht leider nicht. Nach dem Anpassen der Dimension, nennt sich in Version 2010 "Size" kommt die folgende Fehlermeldung:

Code:
Embedded MATLAB Interface Error: Port width mismatch. Input "u"(#22) expects a one dimensional vector with 13 elements. The signal is a one dimensional vector with 41 elements.
Private Nachricht senden Benutzer-Profile anzeigen
 
Poltergeist12
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 04.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2012, 10:13     Titel:
  Antworten mit Zitat      
OK bin wieder einen Schritt weiter, der vorherige Fehler kam daher, dass ich eine Messreihe vorgegeben habe und dann zu viele Daten ins Mux eingeflossen sind.

Allerdings bekomme ich nun für die Ausgangswerte zum Demux die folgende Fehlermeldung:

Code:
Inferred size ('[1 22]') for data 'output' (#23) does not match specified
size ('[10]')


danke für eure Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
Poltergeist12
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 04.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2012, 15:04     Titel:
  Antworten mit Zitat      
@ Peter: Das restliche Modell läuft eigentlich durch.

Ich stelle euch jetzt hier einfach mal das Modell rein, vielleicht habt ihr ja direkt den Fehler im Blick.

kuppl_parameter.m
 Beschreibung:

Download
 Dateiname:  kuppl_parameter.m
 Dateigröße:  619 Bytes
 Heruntergeladen:  457 mal
modell.mdl
 Beschreibung:

Download
 Dateiname:  modell.mdl
 Dateigröße:  54.22 KB
 Heruntergeladen:  430 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Poltergeist12
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 04.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2012, 10:08     Titel:
  Antworten mit Zitat      
Hat keiner eine Idee? Ich komme mit dem Problem einfach nicht weiter!
Private Nachricht senden Benutzer-Profile anzeigen
 
cybbi
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 84
Anmeldedatum: 23.08.11
Wohnort: ---
Version: Alle
     Beitrag Verfasst am: 25.06.2012, 10:16     Titel:
  Antworten mit Zitat      
Hallo,

trag doch mal bitte bei deinem Input und Output von der Matlab Function das richtige ein. So wie in der Fehlermeldung beschrieben:

Input von der Matlab Function hat die Dimension 41. Also trag das auch ein. Beim Output trag ein: [1,22].

Damit hast du diese Probleme schon mal erledigt.

Nächstes Problem ist eine algebraische Schleife (du hast ja schon versucht, die meisten über delay-Blöcke aufzubrechen). Mein grundsätzlicher Tip zum Auflösen von algebraischen Schleifen ist, diese NICHT über Delay-Blöcke aufzubrechen, weil diese das Systemverhalten gravierend ändern können. Alternativ kannst du versuchen, deine Gleichungen umzuschreiben. Wie auch immer.. du hast immer noch eine algebraische Schleife (unten bei den beiden Mux und Demux Blöcken). Diese musst du dann, wenn du mit Memory oder Delay Blöcken das machst, auch entsprechend aufbrechen.

Weiter im Text..

In der Matlab Function gibts noch einen Fehler in Zeile 70. Da fehlt ein "*"...

All diese Fehler korrigiert läuft dein Modell fehlerfrei durch.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
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.