|
Leucks |

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 10.11.14
|
 |
|
 |
Wohnort: Trier
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 13:01
Titel: s-Function für Iteration
|
 |
|
 |
|
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 .
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( 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.
|
|
|
|
|
Leucks |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 10.11.14
|
 |
|
 |
Wohnort: Trier
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2014, 15:11
Titel:
|
 |
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
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|