2017-07-06 1 views
0

J'ai un petit code en C que je veux utiliser pour appeler les fonctions IMF du fmu_sdk afin de pouvoir exporter mon modèle dans FMU.en utilisant la FMU dans fmu_sdk

Si vous pouviez me dire comment les fonctions que je dois utiliser, voici mon programme:

programm C

meilleures salutations Mary

+0

Incluez votre code ici. Pourquoi voudriez-vous le télécharger en tant qu'image? – jAC

+0

Salut et bienvenue à Stack Overflow, s'il vous plaît lire comment créer un [exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve) et aussi vérifier [Comment poser de bonnes questions] (https://stackoverflow.com/help/how-to-ask) afin d'augmenter vos chances d'obtenir des commentaires et des réponses utiles. – DarkCygnus

Répondre

0

Voulez-vous créer un échange de modèle ou de co-simulation FMU?

Voici un lien vers un modèle d'échange FMU qui implémente un ET pour deux valeurs d'entrée booléennes (FMI 2.0, Win64): https://www.dropbox.com/s/su8pyjdtg4hs7v1/fmu_boolRef.fmu?dl=0 Et ici un lien vers une co-simulation FMU: https://www.dropbox.com/s/bcbl8tf6xb4jc8x/fmu_boolRef.fmu?dl=0

Vous pouvez compiler le code source contenu également dans une FMU de co-simulation.

+0

merci pour votre réponse, je veux créer une co-simulation FMU bat je veux dans mon fmu, les valeurs de mes entrées seront incrémentées – Mary13

+0

merci de votre réponse, je veux créer une co-simulation FMU bat je veux dans mon fmu, les valeurs de mes entrées seront incrémentées: e1 = 0? e2 = 0 ==> s_ = 0/e1 = 0, e2 = 0 ==> s_ = 0/e1 = 0, e2 = 1 ==> s_ = 0/e1 = 1, e2 = 0 ==> s_ = 0/e1 = 1, e2 = 1 ==> s_ = 1 – Mary13

+0

J'ai ajouté un lien vers une FMU de co-simulation (FMI 2.0, win64 et code source) qui devrait faire ce que vous voulez. Veuillez noter qu'il y a un délai de temporisation, car il n'y a pas de traversée directe pour les FMU de co-simulation. –

0
#include <stdio.h> 
    #include <stdlib.h> 

#define vrai 1 
#define faux 0 
typedef enum BOOLEAN {false, true} bool; 
bool function_ET(bool e1,bool e2); 
int main(){ 
    bool e1; 
    bool e2; 
    bool s; 

printf("entrez les valeur de e1 et e2:"); 
scanf("%d%d",&e1 ,&e2); 
    s = function_ET(e1,e2); 
printf("s = %d",s); 
} 
bool function_ET(bool e1,bool e2){ 
    return(e1 & e2); 
} 
+0

Est-ce que votre question sur l'appel de la "fonction_ET" à partir d'une FMU ou sur la fonctionnalité d'un "ET" de deux entrées booléennes? –

+0

bonjour, oui sur la fonctionnalité de AND – Mary13

0

j'ai pu écrire le code C , mais je n'ai pas réussi à avoir le bon résultat, je ne peux pas incrémenter les valeurs de e1 et e2, les valeurs ne changent pas avec le temps, si vous pouviez m Aidez-vous à écrire le code exact

#define MODEL_IDENTIFIER prog_entree1 
#define MODEL_GUID "{8c4e810f-3da3-4a00-8276-176fa3c9f013}" 

// define model size 
#define NUMBER_OF_REALS 0 
#define NUMBER_OF_INTEGERS 0 
#define NUMBER_OF_BOOLEANS 3 
#define NUMBER_OF_STRINGS 0 
#define NUMBER_OF_STATES 0 
#define NUMBER_OF_EVENT_INDICATORS 0 

// include fmu header files, typedefs and macros 
#include "fmuTemplate.h" 
//#include "prog1entrée.c" 
#define e1 0 
#define e2 1 
#define s_ 2 

void setStartValues(ModelInstance *comp) { 
b(e1) = 1; 
b(e2) = 0; 
} 

void calculateValues(ModelInstance *comp) { 
if (comp->state == modelInitializationMode) { 
    b(s_)= b(e1) && b(e2); 
    } 
    } 

fmi2Boolean getBoolean(ModelInstance* comp, fmi2ValueReference vr) 
{ 
switch(vr) 
{ 
    case e1 : return b(e1); 
    case e2 : return b(e2); 
    case s_ : return b(s_); 
} 
} 
void eventUpdate(ModelInstance *comp, fmi2EventInfo *eventInfo, int 
timeEvent, int isNewEventIteration) 
{ 
} 

// include code that implements the FMI based on the above definitions 
#include "fmuTemplate.c" 

Et le résultat que je suis arrivé après la simulation enter image description here