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

s-Function für Iteration

 

Leucks
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 10.11.14
Wohnort: Trier
Version: ---
     Beitrag Verfasst am: 10.11.2014, 13:01     Titel: s-Function für Iteration
  Antworten mit Zitat      
Hallo Leute,

Ich schreibe hier heute das erste Mal also versuch ich mich mal nicht zu blamieren.

Ich möchte gerne Mithilfe einer Mathlab s-Function (Level1) als M-File eine Iteration durchführen. Es geht dabei um das Berechnen von Reibkräften.
Jedenfalls hat meine s-Function keine eigenen States sondern bekommt nur Kräfte rein und Gibt an Ende Kräfte wieder aus.
Allerdings für ich diese Kräfte dann einem Subsystem zu welches Zustände hat und diese Zustände wiederum sind Eingangsgrößen von meiner S-Function.

Nun ist meine Frage geht das überhaupt ? Denn wenn ich das Programm durch Keyboard unterbreche und mir den "Sys" Vektor anschaue dann wird dieser natürlich bei jedemaufruf neu und auch richtig berechnet. Allerdings wird der Outputvektor nicht jedesmal geupdated. Vielleicht habe ich das Gesamtkonzept der s-functions auch nicht richtig geschnaggelt und mache hier totalen Schwachsinn.

Jedenfalls habe ich zum Test auch in den Demo Dateien mal außerhalb des s-Function Block Integratoren eingefügt und siehe da auch diese machen dann quatsch. Ich bin allerdings nicht dazu in der Lage meinen Denkfehler zu finden Embarassed .

Meine Initialisierungsfunktion sieht folgendermaßen aus:
function [sys,x0,str,ts,simStateCompliance] = mdlInitializeSizes()

sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 19; % dynamically sized
sizes.NumInputs = 13; % dynamically sized
sizes.DirFeedthrough = 1; % has direct feedthrough
sizes.NumSampleTimes = 1;

sys = simsizes(sizes);
str = [];
x0 = [];
ts = [-1 0]; % inherited sample time

% specify that the simState for this s-function is same as the default
simStateCompliance = 'DefaultSimState';

% end mdlInitializeSizes

und meine Funktionen aufrufende Funktion sieht so aus:

function sys = mdlOutputs(t,x,u,mu,rx,ry,rz,Gen)

PhiZ = u(1)
FKB = [u(2) u(3) u(4) u(5)]

FN = [u(6) u(7) u(Cool u(9)]

vx = [u(10) u(11) u(12) u(13)]

vy = PhiZ*[rx(1) rx(2) rx(3) rx(4)]
if(PhiZ)
[FxB, FxG, FyG, FzG, GFlag] = Berechnung(FKB,FN,mu,vx,vy,rx,ry,rz);
sys = [FxB FxG(1) FyG(1) FzG(2) FxG(2) FyG(2) FzG(2) FxG(3) FyG(3) FzG(3) FxG(4) FyG(4) FzG(4) GFlag];
else
[FxB, FxG, FyG, FzG, GFlag] = Iteration(FKB,FN,mu,rx,ry,rz,Gen);
sys = [FxB FxG(1) FyG(1) FzG(1) FxG(2) FyG(2) FzG(2) FxG(3) FyG(3) FzG(3) FxG(4) FyG(4) FzG(4) GFlag];

end
% end mdlOutputs

Ich bin für jede konstruktive Kritik zu haben. Vielen Dank schonmal vorab für die Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen


Leucks
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 10.11.14
Wohnort: Trier
Version: ---
     Beitrag Verfasst am: 10.11.2014, 15:11     Titel:
  Antworten mit Zitat      
Nach einer ausgedehnten Lektüre der s-function Beschreibung welche jetzt für nicht Englisch Muttersprachler nicht super einfach zu verstehen ist habe ich die Lösung meines Problems gefunden. Für jeden der das Gleiche Problem hat, also dass die s-function öfter aufgerufen wird als der Ausgang aktualisiert wird.

Ich hatte die Sampletime falsch eingestellt, zwar habe ich die Sampletime als inherited übernommen also im Fall meiner Level1 s-Function
ts =[-1 , 0] dabei ist die Minus 1 Inherited wurde durch die 0 auch während den "Minor" Steps also auch dann wenn mein Außenmodell einen Zwischenschritt gerechnet hat die s-function aufgerufen. Durch setzen von
ts =[-1 , 1] hat sich das nun erledigt. Damit würde ich das hier als erledigt beschreiben denk ich =).

Schön wenn man sich seine Antworten selbst geben kann Wink
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 - 2025 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.