Wie kann ich eine Simulation zum Testen von Funktion auf ganz langsam stellen? Bzw. ich will Funktionen während einer laufenden simulation Testen jedoch hat meine simulation immer viel zu schnell durch simuliert wie bremse ich eine simulation? Wichtig ist ich will eine simulation die läuft und ich über die workspace werte ändern kann um gewisse änderungen wärend einer dimulation zu überprüfen?
die Werte ändern und dann weitersimulieren. Alternativ kannst du je nach Entscheidungskriterien mithilfe der Logcblöcke andere Berechnungen durchführen.
Die erste Frage hab ich nicht ganz verstanden. Diese bitte nochmal genauer/verständlicher formulieren.
Den Wert zu ändern geht z.B über (wie mein vorredner schon gesagt hat):
set_param('Model/Zylinder2','area_B',3.1);
über den Befehl getparam kannst du auch aktuelle Werte auslesen und auch auflisten lassen, welche variablen du alles ändern kannst ('value' ist son standart ding, oder auch 'gain'..da kommt es ganz auf den verwendeten bausteine an).
Diese Änderung funktioniert auch während der simulation...du kannst die simulationszeit auch auf "inf" stellen..dann hast du viel zeit zum ändern...wenn dir das reichen sollte.
Eine nicht schöne Funktion (bitte kein kommentar dazu ) zum "verlangsamen" der Simulation, bei Bedarf auf eine Art Soft-Real-Time findet du hier:
Code:
/*
* File : timestw.c
* Abstract:
* An example C-file S-functionfor multiplying an input by 2,
* y = 4*u
*
* Real-Time Workshop note:
* This file can be used as is(noninlined) with the Real-Time Workshop
* C rapid prototyping targets, or it can be inlined using the Target
* Language Compiler technology and used with any target. See
* matlabroot/toolbox/simulink/blocks/tlc_c/timestw.tlc
* the TLC code to inline the S-function.
*
* See simulink/src/sfuntmpl_doc.c
*
* Copyright 1990-2009 The MathWorks, Inc.
* $Revision: 1.1.6.2 $
*/
/* specify the sim state compliance to be same as a built-in block */
ssSetSimStateCompliance(S, USE_DEFAULT_SIM_STATE);
/* Take care when specifying exception free code - see sfuntmpl_doc.c */
ssSetOptions(S,
SS_OPTION_EXCEPTION_FREE_CODE |
SS_OPTION_USE_TLC_WITH_ACCELERATOR);
}
//SS_OPTION_WORKS_WITH_CODE_REUSE |
/* Function: mdlInitializeSampleTimes =========================================
* Abstract:
* Specifiy that we inherit our sample time from the driving block.
*/
static void mdlInitializeSampleTimes(SimStruct *S) {
// ssSetSampleTime(S, 0, INHERITED_SAMPLE_TIME);
ssSetSampleTime(S, 0, 0.002);
ssSetOffsetTime(S, 0, 0.0);
ssSetModelReferenceSampleTimeDefaultInheritance(S);
}
//Ausgabe Aktualwert und Differenz
*y_act=time_act;
*y_dt=dt;
}
/* Function: mdlTerminate =====================================================
* Abstract:
* No termination needed, but we are required to have this routine.
*/
static void mdlTerminate(SimStruct *S) { }
#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */
#include "simulink.c" /* MEX-file interface mechanism */
#else
#include "cg_sfun.h" /* Code generation registration function */
#endif
..als ich das gebaut habe, hatte ich weder Ahnung von mex-files, noch bin ich sehr gut in C++...orientiert hatte ich mich damals an der funktion timestwo von mathworks (daher der name)...
als bemerkung: ich hatte eine feste Simulationszeitgröße von 2ms genommen und diese wollte ich gerne annähern. durch Änderung der Zeitwerte kannst du natürlich alles schneller oder langsamer machen..
Du musst diesen Code einfach in deine funktion.c schreiben und diese dann per "mex funktion.c" umwandeln lassen..danach kannst du sie in simulink integrieren...
Wenn das die Richtung ist, die du gehen magst..können wir gerne weiter drüber reden (...und das c-File ein wenig optimieren )
Solltest du allerdings Parameter in einer Übertragungsfunktion ändern wollen, z.B. die Dämpfung eines Systems in einem Transfer Fct Block, geht das nicht während der Simulation mit get_param. Hier musst du dir dann eine S-Function schreiben.
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
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.