From 74d3628897f60b91d4fa46891e67b548f5cec0e5 Mon Sep 17 00:00:00 2001 From: Robert Braun Date: Fri, 10 Apr 2026 14:07:10 +0200 Subject: [PATCH] Update instance variable when reinstantiating FMUs --- .../defaultLibrary/Connectivity/FMIWrapper.hpp | 9 ++++++--- .../defaultLibrary/Connectivity/FMIWrapperQ.hpp | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/componentLibraries/defaultLibrary/Connectivity/FMIWrapper.hpp b/componentLibraries/defaultLibrary/Connectivity/FMIWrapper.hpp index 8263d85fc..c6542a3b2 100644 --- a/componentLibraries/defaultLibrary/Connectivity/FMIWrapper.hpp +++ b/componentLibraries/defaultLibrary/Connectivity/FMIWrapper.hpp @@ -863,7 +863,8 @@ class FMIWrapper : public ComponentSignal if(!mIsInstantiated) { addDebugMessage("Calling: fmi1InstantiateSlave"); - if(!fmi1_instantiateSlave(fmu, "application/x-fmu-sharedlibrary", 1000, fmi1False, fmi1False, FMIWrapper_fmi1Logger, calloc, free, NULL, mLoggingOn)) { + fmi1_instance = fmi1_instantiateSlave(fmu, "application/x-fmu-sharedlibrary", 1000, fmi1False, fmi1False, FMIWrapper_fmi1Logger, calloc, free, NULL, mLoggingOn); + if(fmi1_instance == NULL) { addErrorMessage("Hopsan: fmi1InstantiateSlave() failed!"); fmu = NULL; return; @@ -939,7 +940,8 @@ class FMIWrapper : public ComponentSignal if(!mIsInstantiated) { addDebugMessage("Calling: fmi2Instantiate"); - if(!fmi2_instantiate(fmu, fmi2CoSimulation, FMIWrapper_fmi2Logger, calloc, free, NULL, (fmi2ComponentEnvironment*)this, fmi2False, mLoggingOn)) { + fmi2_instance = fmi2_instantiate(fmu, fmi2CoSimulation, FMIWrapper_fmi2Logger, calloc, free, NULL, (fmi2ComponentEnvironment*)this, fmi2False, mLoggingOn); + if(fmi2_instance == NULL) { stopSimulation("Failed to instantiate FMU"); fmu = NULL; return; @@ -1032,7 +1034,8 @@ class FMIWrapper : public ComponentSignal if(!mIsInstantiated) { addDebugMessage("Calling: fmi3InstantiateCoSimulation"); size_t nRequiredIntermediateVariables = 0; - if(!fmi3_instantiateCoSimulation(fmu, fmi3False, mLoggingOn, fmi3False, fmi3False, NULL, nRequiredIntermediateVariables, this, FMIWrapper_fmi3Logger, FMIWrapper_fmi3IntermediateUpdate)) { + fmi3_instance = fmi3_instantiateCoSimulation(fmu, fmi3False, mLoggingOn, fmi3False, fmi3False, NULL, nRequiredIntermediateVariables, this, FMIWrapper_fmi3Logger, FMIWrapper_fmi3IntermediateUpdate); + if(fmi3_instance == NULL) { stopSimulation("Failed to instantiate FMU"); fmu = NULL; return; diff --git a/componentLibraries/defaultLibrary/Connectivity/FMIWrapperQ.hpp b/componentLibraries/defaultLibrary/Connectivity/FMIWrapperQ.hpp index 3c3f5df36..d5b02c0a8 100644 --- a/componentLibraries/defaultLibrary/Connectivity/FMIWrapperQ.hpp +++ b/componentLibraries/defaultLibrary/Connectivity/FMIWrapperQ.hpp @@ -903,7 +903,8 @@ class FMIWrapperQ : public ComponentQ if(!mIsInstantiated) { addDebugMessage("Calling: fmi1InstantiateSlave"); - if(!fmi1_instantiateSlave(fmu, "application/x-fmu-sharedlibrary", 1000, fmi1False, fmi1False, FMIWrapperQ_fmi1Logger, calloc, free, NULL, mLoggingOn)) { + fmi1_instance = fmi1_instantiateSlave(fmu, "application/x-fmu-sharedlibrary", 1000, fmi1False, fmi1False, FMIWrapperQ_fmi1Logger, calloc, free, NULL, mLoggingOn); + if(fmi1_instance == NULL) { addErrorMessage("Hopsan: fmi1InstantiateSlave() failed!"); fmu = NULL; return; @@ -989,7 +990,8 @@ class FMIWrapperQ : public ComponentQ if(!mIsInstantiated) { addDebugMessage("Calling: fmi2Instantiate"); - if(!fmi2_instantiate(fmu, fmi2CoSimulation, FMIWrapperQ_fmi2Logger, calloc, free, NULL, (fmi2ComponentEnvironment*)this, fmi2False, mLoggingOn)) { + fmi2_instance = fmi2_instantiate(fmu, fmi2CoSimulation, FMIWrapperQ_fmi2Logger, calloc, free, NULL, (fmi2ComponentEnvironment*)this, fmi2False, mLoggingOn); + if(fmi2_instance == NULL) { stopSimulation("Failed to instantiate FMU"); fmu = NULL; return; @@ -1092,7 +1094,8 @@ class FMIWrapperQ : public ComponentQ if(!mIsInstantiated) { addDebugMessage("Calling: fmi3InstantiateCoSimulation"); size_t nRequiredIntermediateVariables = 0; - if(!fmi3_instantiateCoSimulation(fmu, fmi3False, mLoggingOn, fmi3False, fmi3False, NULL, nRequiredIntermediateVariables, this, FMIWrapperQ_fmi3Logger, FMIWrapperQ_fmi3IntermediateUpdate)) { + fmi3_instance = fmi3_instantiateCoSimulation(fmu, fmi3False, mLoggingOn, fmi3False, fmi3False, NULL, nRequiredIntermediateVariables, this, FMIWrapperQ_fmi3Logger, FMIWrapperQ_fmi3IntermediateUpdate); + if(fmi3_instance == NULL) { stopSimulation("Failed to instantiate FMU"); fmu = NULL; return;