Comment puis-je fournir des données à un modèle Simulink sans le placer dans l'espace de travail
J'ai un modèle Simulink qui est actuellement en cours d'exécution à partir d'un script (c'est à dire pas une fonction). Le script écrit les valeurs des variables de l'espace de travail MATLAB, exécute le modèle de simulation (qui utilise ces valeurs), puis le modèle écrit des valeurs supplémentaires à l'espace de travail. Si j'essaie de convertir le script dans une fonction (c'est à dire en plaçant function [output] = runSim()
en haut du fichier) puis Simulink se plaint qu'il ne connaît pas les variables, sans doute parce qu'ils ne sont pas dans l'espace de travail de MATLAB, mais plutôt qu'ils sont dans la portée de la fonction.
Est-il un moyen élégant de fournir un modèle Simulink avec entrées et de prendre des sorties à partir d'un modèle Simulink autre que de les coller dans l'espace de travail?
OriginalL'auteur JnBrymn | 2011-03-11
Vous devez vous connecter pour publier un commentaire.
Il n'est pas évident, mais vous pouvez d'entrée/sortie de données de la
sim()
de commande et un appel de fonction de l'espace de travail. Je l'ai fait avant & un exemple au travail, mais ne pouvez pas vous y rendre jusqu'à lundi pour vérifier. Cependant, essayez la solution indiquée sur le site de Mathworks:...mais apparemment c'est déconseillé dans R2009b en raison d'une incompatibilité avec le Parallel Computing Toolbox >:( Ressemble à la solution correcte est explicitement pousser des variables dans la simulation du modèle de l'espace de travail (autre que la base de l'espace de travail), à l'aide de
assignin()
.http://www.mathworks.com/matlabcentral/newsreader/view_thread/292544
que vous auriez à demander aux gens de chez Mathworks; je n'ai jamais utilisé de RETOUR au travail, ou bien que profondément dans Simulink autres que l'exécution de simulations à partir d'un M-file.
La première option fonctionne dans 2009a... donc je vais m'en tenir à cela jusqu'à ce qu'il me mord. Merci!
Nous sommes à l'aide de RTW et la première solution semble fonctionner.
OriginalL'auteur Jason S
Vous pouvez utiliser le evalin() la fonction à exécuter à partir de votre propre fonction d'une expression MATLAB (comme une chaîne de caractères) dans un espace de travail, dans votre cas, la "base" pour les SIMULINK pour les trouver. Toutefois, si vous ne voulez pas utiliser l'espace de travail, vous pouvez charger et d'enregistrer des signaux ou des variables de/pour TAPIS de fichiers à l'aide de la Depuis/Vers un Fichier de blocs.
OriginalL'auteur Mahmoud Kassem
Réponse courte: Non.
J'ai peut-être tort de, mais laissez-moi vous donner un peu de fond. Je travail sur un modèle Simulink qui est très grand, nous avons travaillé pendant des années. À ce jour, nous avons encore en charge toutes les variables nécessaires au travers de l'espace de travail. Cela a été une plainte de la mine, pour une longue période de temps, tellement que MathWorks a même abordé la question en fournissant les Simulink.save_vars fonction. On dirait que vous vous êtes déjà mise en place des variables avec un script ou d'une fonction, de sorte Simulink.save_vars ne sera d'aucune utilité pour vous.
Vous pouvez nettoyer l'espace de travail en utilisant des structures pour certaines des variables, la plupart des blocs Simulink ne supportent pas les structures, mais certains le font. Aussi, éviter de mettre n'importe quoi dans l'espace de travail autres que les variables du modèle des besoins.
-1 parce que je l'ai fait.
OriginalL'auteur Miebster
Eh bien, je ne sais pas comment le faire d'une simple fonction, mais il est vraiment pratique de le faire à partir de l'intérieur de la classe de fonction (méthode). Il fonctionne très bien avec la version 2009b.
Placer le code dans le fichier Test.m:
Puis juste:
Ce qui se passe? Vous créez l'objet de test, qui a défini les champs de t et u. Ensuite, dans la méthode sim() Vous dites à Simulink pour chercher d'entrée " [en test.test t de.u]'. Les deux Simulink et la méthode sim() a accès à ces variables (je crois que c'est la chose la plus importante).
OK il a encore un gros inconvénient qui est marqué avec le numéro 1. Vous devez savoir explicitement comment une référence à l'instance de la classe sera nommé dans l'espace de travail ('test' dans ce cas). Vous pouvez travailler autour en passant le nom d'un constructeur, ou vous pouvez utiliser les variables et méthodes statiques, mais de cette façon, ne vous permettra pas de changement du signal d'entrée de façon dynamique.
OriginalL'auteur Golmar