Co-simulation FMI
Importer et co-simuler des modèles fournisseurs via la norme FMI — charger une FMU Dymola et l’exécuter, la valider par recoupement face à un modèle natif, envelopper la boîte noire de votre propre régulateur via l’interface FMI, la coupler dans un système plus large, et quantifier l’erreur de co-simulation.

- erreur de suivi en boucle fermée sur une FMU fournisseur
- 2,9e-4 merreur de suivi en boucle fermée sur une FMU fournisseur
- concordance CS vs ME (RMSE)
- 1,3e-3 mconcordance CS vs ME (RMSE)
- fidélité FMU vs natif (RMSE)
- 4,7e-3 mfidélité FMU vs natif (RMSE)
- réduction de l’erreur de co-simulation par affinement du macro-pas
- 7.6×réduction de l’erreur de co-simulation par affinement du macro-pas
- notebooks de conception
- 10notebooks de conception
- exigences RÉUSSI
- 5 / 5exigences RÉUSSI
Exécuter — et commander — un modèle que vous n’avez pas construit.
Aucune équipe ne modélise tout dans un seul outil. La norme FMI existe pour qu’un modèle construit dans Dymola, Simulink ou ailleurs puisse être empaqueté en FMU et exécuté dans un tout autre environnement. Ce programme est le volet import de cette promesse : charger une FMU fournisseur dans le worker Julia de DjiniousLab, la co-simuler, la valider par recoupement face à une ré-implémentation native, et — la partie qui compte — envelopper la boîte noire de votre propre régulateur et fermer la boucle via l’interface FMI. L’interopérabilité n’est pas une case à cocher ; c’est commander le modèle de quelqu’un d’autre comme s’il était le vôtre.
Déposez une FMU fournisseur et elle s’exécute, tout simplement.
Une FMU est un modèle compilé, autonome, derrière une interface C standard. Le premier notebook charge une FMU de référence exportée depuis Dymola dans le worker Julia et la co-simule — les états sortent, l’orbite de phase se referme, sans code source, sans re-dérivation. C’est la promesse de base de l’interopérabilité : un modèle rédigé dans un autre outil, exécuté ici, sans modification.

Co-simulation ou échange de modèle — et ils concordent.
FMI propose deux modes. En co-simulation, la FMU embarque son propre solveur et vous appelez doStep ; en échange de modèle, votre solveur intègre les dérivées de la FMU. La même FMU exécutée des deux façons se superpose à 1,3×10⁻³ m RMSE près — le choix porte sur qui possède le solveur, pas sur l’obtention de réponses différentes. Cette équivalence est ce qui permet de mêler une FMU à un système plus large résolu par Julia en toute confiance.


Fermer une boucle autour de la boîte noire.
La revendication la plus forte en matière d’interopérabilité n’est pas d’exécuter un modèle fournisseur — c’est de le commander. Le notebook vedette fait de la FMU importée le procédé et l’enveloppe d’un PID natif Julia via une boucle de co-simulation manuelle : lire la sortie de la FMU, calculer la commande, fixer l’entrée de la FMU, avancer d’un pas. Le régulateur ne voit jamais l’intérieur de la FMU ; il ne lui parle qu’à travers l’interface FMI — et la pilote vers une consigne avec une erreur de suivi de 2,9×10⁻⁴ m. C’est un régulateur et un procédé fournisseur issus de deux mondes différents, se rencontrant sur la norme.

La co-simulation a son propre budget d’erreur.
Coupler des modèles en des points de communication discrets introduit une erreur qui lui est propre : entre les pas, chaque modèle voit ses entrées maintenues constantes, si bien qu’un macro-pas trop grand retarde et déforme le résultat. Le programme la quantifie — diviser le macro-pas par deux divise à peu près l’erreur par deux (convergence du premier ordre), une réduction de 7,6× sur le balayage. Savoir que l’erreur est du premier ordre par rapport à la taille du pas est ce qui permet d’arbitrer délibérément entre précision et vitesse, plutôt que par accident.

Chaque valeur re-dérivée au moment de la validation finale.
Le notebook V&V réimporte la FMU et re-dérive chaque exigence depuis zéro, en affichant un tableau RÉUSSI/ÉCHEC.
Résultat
- Import et co-simulation d’une FMU fournisseur : 101 échantillons
- Concordance CS vs ME : 1,3e-3 m RMSE
- Fidélité FMU vs natif : 4,7e-3 m RMSE
- Erreur de suivi en boucle fermée : 2,9e-4 m
- Erreur de co-simulation vs macro-pas : réduction de 7,6×
Exigence
- Import et co-simulation d’une FMU fournisseur : R-01
- Concordance CS vs ME : R-02
- Fidélité FMU vs natif : R-03
- Erreur de suivi en boucle fermée : R-04
- Erreur de co-simulation vs macro-pas : R-05
Le volet import, sur des FMU de référence.
Le livrable est dix notebooks et le dossier — les modèles arrivent sous forme de FMU compilées derrière l’interface C de FMI, et non comme des composants acausaux DjiniousLab, donc pas de bloc personnalisé ni de canevas. Les FMU sont des références exportées depuis Dymola plutôt que des modèles tiers arbitraires ; la co-simulation est à taux unique avec extrapolation à entrée constante entre les points de communication, et sans solveur de boucle algébrique entre FMU couplées. Et il s’agit spécifiquement du volet import/co-simulation — l’export de FMU est une filière Rust distincte dans la plateforme. Ce que le programme démontre, c’est le cœur de l’interopérabilité : charger, co-simuler dans les deux modes, valider par recoupement, commander, coupler, et quantifier l’erreur de co-simulation — chaque valeur recalculable, la plus forte d’entre elles étant un régulateur natif fermant une boucle autour d’un modèle fournisseur dont il ne peut pas voir l’intérieur.
Continuer à explorer






