J'essaie de créer un modèle qui aura des équations légèrement différentes en fonction de la question de savoir si certains composants existent ou non (dans mon cas, des ports fluides).
Un code comme ce qui suit ne fonctionnera pas: P> < Pré> xxx pré>
Comment puis-je contourner cela? p> p>
3 Réponses :
Je pense que la raison pour laquelle cela ne fonctionnera pas, c'est que l'analyseur recherchera la déclaration de la variable "composant.x" que, si le composant n'est pas actif, n'existe pas. Il ne fonctionne même pas même si vous insérez "Evaluate = TRUE" dans l'annotation. La solution la plus propre à mon avis est de travailler au niveau de l'équation et d'activer différents ensembles d'équations dans le même bloc. Vous pouvez créer un modèle d'emballage avec les connecteurs et les paraments corrects, puis s'il s'agit d'un modèle de causalité, par exemple, vous pouvez utiliser des classes remplaçables afin de paramétrer les modèles comme des fonctions, ou bien, dans le cas de modèles acausaux, mettez les équations à l'intérieur. si des déclarations. Une autre solution possible est de placer deux modèles différents dans un bloc, vous pouvez donc utiliser leurs variables dans la section Equation, puis construire des connexions conditionnelles permettant d'utiliser l'utilisation du bloc avec le comportement choisi. En d'autres termes, vous pouvez construire un "modèle d'enveloppe" avec deux blocs à l'intérieur, puis placez les équations de connexion sur les connecteurs du modèle d'enveloppe à l'intérieur si des déclarations. N'oubliez pas de construire le modèle pour qu'il y ait un système cohérent de questions même pour les blocs qui ne sont pas utilisés. Mais ce n'est pas la meilleure solution, car si les blocs sont gros, vous devrez attendre plus longtemps pour la compilation car tout sera compilé. p>
J'espère que cela aidera, P>
marco p>
Si vous souhaitez utiliser des composants de condition, vous devez connaître certaines restrictions. La section 4.4.5 de la spécification Modelica 3.3 résume joliment. Il est indiqué "si la condition est fausse, le composant, ses modificateurs et toutes les équations de connexion impliquant le composant, sont supprimés ». Je vais vous montrer comment utiliser cela pour résoudre votre problème en une seconde, mais je veux d'abord expliquer pourquoi votre solution ne fonctionne pas.
Le problème a à voir avec la vérification le modèle. Dans votre cas, il est évident que l'équation composant.x code> et le composant
composant code> soit tous deux existent ou n'existent pas non plus. C'est parce que vous les avez lié à la Même variable booléenne. Mais si vous aviez si vous n'aviez pas ceci: p>
parameter Boolean use_component;
Component component if use_component;
Constant zero(k=0);
equation
connect(k.y, component.x);
Vous pouvez également faire un composant factice qui n'est pas visible dans la couche graphique: puis lorsque cela est utilisé dans un modèle de deux ports p> ... p> De cette façon, le Heatport est utilisé s'il est présent mais ne provoque pas d'erreur sinon. P> P>