diff --git a/.gitignore b/.gitignore index 91f4ff604493a62f21d979f4a622c3a420e7f892..3066ef569f0272800ddb902222d19d5d738ac67b 100644 --- a/.gitignore +++ b/.gitignore @@ -245,3 +245,4 @@ ModelManifest.xml .fake/ /Simulator/MODELS/ /MC_Backend_Win/MODELS +/MC_Backend_Win/MODELI/Sample diff --git a/Files/FmuFile.cpp b/Files/FmuFile.cpp index 3a0fd7ac72893c07f32c6f92927a4e980ea2bb8f..28cab799e60b74511ba046dea411078875649a4b 100644 --- a/Files/FmuFile.cpp +++ b/Files/FmuFile.cpp @@ -48,7 +48,7 @@ namespace Files // Create a property tree from modelDescription.xml pt::ptree desc; pt::read_xml(xmlPath.generic_string(), desc); - std::string modelName = desc.get<std::string>("fmiModelDescription.CoSimulation.modelIdentifier"); + std::string modelName = desc.get<std::string>("fmiModelDescription.CoSimulation.xmlattr.modelIdentifier"); fs::path binaryPath = fs::path(_unzippedPath) / "binaries"; #ifdef __linux__ diff --git a/Files/ModeliFile.cpp b/Files/ModeliFile.cpp index dc485ba3f175a6a84ca14d469e6857807fc98ada..16b6c7b3ddc576ea80e9db37398605df87f9364c 100644 --- a/Files/ModeliFile.cpp +++ b/Files/ModeliFile.cpp @@ -59,12 +59,12 @@ namespace Files for (auto source : xml.get_child("Description.DataSources")) { // Only fmu datasources - if (source.second.get<std::string>("DataSourceDescription.SourceType") == "FMUDataSource") + if (source.second.get<std::string>("SourceType") == "FMUDataSource") { retVal.push_back(FmuFileInfo { - (fs::path(_unzipDir) / source.second.get<std::string>("DataSourceDescription.Location")).generic_string(), - source.second.get<std::string>("DataSourceDescription.InstanceName") + (fs::path(_unzipDir) / source.second.get<std::string>("Location")).generic_string(), + source.second.get<std::string>("InstanceName") }); } } diff --git a/Files/ModeliFile.hpp b/Files/ModeliFile.hpp index a5587aa2cdebea852629a4506f9cb9cfdcc4e07e..d3bcdd84ab83cf4018fdaa09e3e87ecb8d824287 100644 --- a/Files/ModeliFile.hpp +++ b/Files/ModeliFile.hpp @@ -27,8 +27,8 @@ namespace Files /// Extracts the path and instancName of th fmus std::vector<FmuFileInfo> GetFmus(); private: - // Relative path to the dir where the modeles will be stored - const std::string MODEL_DIR = "MODELS"; + // Relative path to the dir where the modeli will be stored temporally + const std::string MODEL_DIR = "MODELI"; // Where the modeli file is extracted to std::string _unzipDir; }; diff --git a/Files/Unzipper.cpp b/Files/Unzipper.cpp index c0a04472f177ebd7c0c59354ee40cff327f245b5..e2093429901766c54a3959a61b42cb4b45db6f42 100644 --- a/Files/Unzipper.cpp +++ b/Files/Unzipper.cpp @@ -4,12 +4,14 @@ void Unzipper::Unzip(std::string zipFile, std::string unzipDir) { - Unzip(miniz_cpp::zip_file(zipFile), unzipDir); + miniz_cpp::zip_file zip(zipFile); + Unzip(zip, unzipDir); } void Unzipper::Unzip(const std::vector<unsigned char>& zipFile, std::string unzipDir) { - Unzip(miniz_cpp::zip_file(zipFile), unzipDir); + miniz_cpp::zip_file zip(zipFile); + Unzip(zip, unzipDir); } void Unzipper::Unzip(miniz_cpp::zip_file & zipFile, std::string unzipDir) diff --git a/Files/zip_file.hpp b/Files/zip_file.hpp index c324f7063e7ba420de217f59d621e928c1ab1c5a..69badc31570ac473bce5962bcdd3dd7e6cade480 100644 --- a/Files/zip_file.hpp +++ b/Files/zip_file.hpp @@ -5580,7 +5580,7 @@ private: mz_zip_reader_end(archive_.get()); - archive_->m_pWrite = &detail::write_callback; + archive_->m_pWrite = (mz_file_write_func)&detail::write_callback; archive_->m_pIO_opaque = &buffer_; buffer_ = std::vector<char>(); @@ -5608,7 +5608,7 @@ private: break; } - archive_->m_pWrite = &detail::write_callback; + archive_->m_pWrite = (mz_file_write_func)&detail::write_callback; archive_->m_pIO_opaque = &buffer_; if(!mz_zip_writer_init(archive_.get(), 0)) diff --git a/MC_Backend_Linux/MC_Backend_Linux.vcxproj b/MC_Backend_Linux/MC_Backend_Linux.vcxproj index 1418c5db79bb4626e4629036ee69c5d62880621a..dfe90f1b56600a1deb20b12f4a4a44d278ff44e5 100644 --- a/MC_Backend_Linux/MC_Backend_Linux.vcxproj +++ b/MC_Backend_Linux/MC_Backend_Linux.vcxproj @@ -68,30 +68,36 @@ <ImportGroup Label="PropertySheets" /> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> - <SourcePath>C:\boost_1_65_1;$(SourcePath)</SourcePath> + <SourcePath>$(SourcePath)</SourcePath> + <IncludePath>C:\IncludeLinux\c++\4.8;C:\boost_1_65_1;$(IncludePath)</IncludePath> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> - <SourcePath>C:\boost_1_65_1;$(SourcePath)</SourcePath> + <SourcePath>$(SourcePath)</SourcePath> + <IncludePath>C:\IncludeLinux\c++\4.8;C:\boost_1_65_1;$(IncludePath)</IncludePath> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <SourcePath>C:\boost_1_65_1;$(SourcePath)</SourcePath> + <SourcePath>$(SourcePath)</SourcePath> + <IncludePath>C:\IncludeLinux\c++\4.8;C:\boost_1_65_1;$(IncludePath)</IncludePath> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <SourcePath>C:\boost_1_65_1;$(SourcePath)</SourcePath> + <SourcePath>$(SourcePath)</SourcePath> + <IncludePath>C:\IncludeLinux\c++\4.8;C:\boost_1_65_1;$(IncludePath)</IncludePath> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'"> - <SourcePath>C:\boost_1_65_1;$(SourcePath)</SourcePath> + <SourcePath>$(SourcePath)</SourcePath> + <IncludePath>C:\IncludeLinux\c++\4.8;C:\boost_1_65_1;$(IncludePath)</IncludePath> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'"> - <SourcePath>C:\boost_1_65_1;$(SourcePath)</SourcePath> + <SourcePath>$(SourcePath)</SourcePath> + <IncludePath>C:\IncludeLinux\c++\4.8;C:\boost_1_65_1;$(IncludePath)</IncludePath> </PropertyGroup> <ItemGroup> </ItemGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> <Link> - <AdditionalLibraryDirectories>/usr/boost164/stage/lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>/usr/boost165/stage/lib</AdditionalLibraryDirectories> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> - <LibraryDependencies>dl;pthread;boost_filesystem;boost_system</LibraryDependencies> + <LibraryDependencies>dl;pthread;boost_filesystem;boost_system;boost_program_options</LibraryDependencies> </Link> <ClCompile> <AdditionalIncludeDirectories>/usr/boost164;../FMU-Core/NativeFmuShared;../Network;../Files;../Simulation;../AdditionalIncludes/flatbuffers;../AdditionalIncludes/MC_Protocol;/usr/boost164;../FMU-Core/NativeFmuShared;../Network;../Files;../Simulation;../AdditionalIncludes/flatbuffers;../AdditionalIncludes/MC_Protocol;../AdditionalIncludes/MC_Protocol;../AdditionalIncludes/flatbuffers;../FMU-Core/NativeFmuShared;../Files</AdditionalIncludeDirectories> @@ -101,9 +107,9 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> <Link> - <AdditionalLibraryDirectories>/usr/boost164/stage/lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>/usr/boost165/stage/lib</AdditionalLibraryDirectories> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> - <LibraryDependencies>dl;pthread;boost_filesystem;boost_system</LibraryDependencies> + <LibraryDependencies>dl;pthread;boost_filesystem;boost_system;boost_program_options</LibraryDependencies> </Link> <ClCompile> <AdditionalIncludeDirectories>/usr/boost164;../FMU-Core/NativeFmuShared;../Network;../Files;../Simulation;../AdditionalIncludes/flatbuffers;../AdditionalIncludes/MC_Protocol;/usr/boost164;../Simulation;../AdditionalIncludes;../AdditionalIncludes/MC_Protocol;../AdditionalIncludes/flatbuffers;../FMU-Core/NativeFmuShared;../Files</AdditionalIncludeDirectories> @@ -113,14 +119,14 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <Link> - <AdditionalLibraryDirectories>/usr/boost165/lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>/usr/boost165/stage/lib</AdditionalLibraryDirectories> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> - <LibraryDependencies>dl;pthread;boost_filesystem;boost_system</LibraryDependencies> + <LibraryDependencies>dl;pthread;boost_filesystem;boost_system;boost_program_options</LibraryDependencies> </Link> <ClCompile> <AdditionalIncludeDirectories>/usr/boost165;../FMU-Core/NativeFmuShared;../Network;../Files;../Simulation;../AdditionalIncludes/flatbuffers;../AdditionalIncludes/MC_Protocol;/usr/boost164;../FMU-Core/NativeFmuShared;../Network;../Files;../Simulation;../AdditionalIncludes/flatbuffers;../AdditionalIncludes/MC_Protocol;../FMU-Core/NativeFmuShared;../Files</AdditionalIncludeDirectories> <AdditionalOptions>-DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB</AdditionalOptions> - <CppLanguageStandard>c++11</CppLanguageStandard> + <CppLanguageStandard>c++1y</CppLanguageStandard> </ClCompile> <PreBuildEvent> <Command> @@ -129,9 +135,9 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <Link> - <AdditionalLibraryDirectories>/usr/boost164/stage/lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>/usr/boost165/stage/lib</AdditionalLibraryDirectories> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> - <LibraryDependencies>dl;pthread;boost_filesystem;boost_system</LibraryDependencies> + <LibraryDependencies>dl;pthread;boost_filesystem;boost_system;boost_program_options</LibraryDependencies> </Link> <ClCompile> <AdditionalIncludeDirectories>/usr/boost164;../FMU-Core/NativeFmuShared;../Network;../Files;../Simulation;../AdditionalIncludes/flatbuffers;../AdditionalIncludes/MC_Protocol;C:\boost_1_64_0;../Simulation;../AdditionalIncludes;../FMU-Core/NativeFmuShared;../Files</AdditionalIncludeDirectories> @@ -145,9 +151,9 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'"> <Link> - <AdditionalLibraryDirectories>/usr/boost164/stage/lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>/usr/boost165/stage/lib</AdditionalLibraryDirectories> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> - <LibraryDependencies>dl;pthread;boost_filesystem;boost_system</LibraryDependencies> + <LibraryDependencies>dl;pthread;boost_filesystem;boost_system;boost_program_options</LibraryDependencies> </Link> <ClCompile> <AdditionalIncludeDirectories>/usr/boost164;../FMU-Core/NativeFmuShared;../Network;../Files;../Simulation;../AdditionalIncludes/flatbuffers;../AdditionalIncludes/MC_Protocol;/usr/boost164;../FMU-Core/NativeFmuShared;../Network;../Files;../Simulation;../AdditionalIncludes/flatbuffers;../AdditionalIncludes/MC_Protocol;../AdditionalIncludes/MC_Protocol;../AdditionalIncludes/flatbuffers;../FMU-Core/NativeFmuShared;../Files</AdditionalIncludeDirectories> @@ -157,9 +163,9 @@ </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'"> <Link> - <AdditionalLibraryDirectories>/usr/boost164/stage/lib</AdditionalLibraryDirectories> + <AdditionalLibraryDirectories>/usr/boost165/stage/lib</AdditionalLibraryDirectories> <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> - <LibraryDependencies>dl;pthread;boost_filesystem;boost_system</LibraryDependencies> + <LibraryDependencies>dl;pthread;boost_filesystem;boost_system;boost_program_options</LibraryDependencies> </Link> <ClCompile> <AdditionalIncludeDirectories>/usr/boost164;../FMU-Core/NativeFmuShared;../Network;../Files;../Simulation;../AdditionalIncludes/flatbuffers;../AdditionalIncludes/MC_Protocol;/usr/boost164;../Simulation;../AdditionalIncludes;../AdditionalIncludes/MC_Protocol;../AdditionalIncludes/flatbuffers;../FMU-Core/NativeFmuShared;../Files</AdditionalIncludeDirectories> diff --git a/MC_Backend_Win/MC_Backend_Win.vcxproj b/MC_Backend_Win/MC_Backend_Win.vcxproj index 9d73ebf485973fb5d9253af8eda5102a83fd7cfe..4f3742fd0c8d201fae4b80f6a994714eb95ec012 100644 --- a/MC_Backend_Win/MC_Backend_Win.vcxproj +++ b/MC_Backend_Win/MC_Backend_Win.vcxproj @@ -104,6 +104,7 @@ <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <AdditionalIncludeDirectories>../AdditionalIncludes/flatbuffers;../AdditionalIncludes/MC_Protocol;../AdditionalIncludes/miniz_cpp;C:\boost_1_65_1;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>-DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB %(AdditionalOptions)</AdditionalOptions> + <LanguageStandard>stdcpp14</LanguageStandard> </ClCompile> <Link> <SubSystem>Console</SubSystem> @@ -119,6 +120,7 @@ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <AdditionalIncludeDirectories>../AdditionalIncludes/flatbuffers;../AdditionalIncludes/MC_Protocol;../AdditionalIncludes/miniz_cpp;C:\boost_1_65_1;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>-DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB %(AdditionalOptions)</AdditionalOptions> + <LanguageStandard>stdcpp14</LanguageStandard> </ClCompile> <Link> <SubSystem>Console</SubSystem> @@ -136,6 +138,7 @@ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <AdditionalIncludeDirectories>../AdditionalIncludes/flatbuffers;../AdditionalIncludes/MC_Protocol;../AdditionalIncludes/miniz_cpp;C:\boost_1_65_1;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>-DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB %(AdditionalOptions)</AdditionalOptions> + <LanguageStandard>stdcpp14</LanguageStandard> </ClCompile> <Link> <SubSystem>Console</SubSystem> @@ -155,6 +158,7 @@ <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <AdditionalIncludeDirectories>../AdditionalIncludes/flatbuffers;../AdditionalIncludes/MC_Protocol;../AdditionalIncludes/miniz_cpp;C:\boost_1_65_1;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalOptions>-DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB %(AdditionalOptions)</AdditionalOptions> + <LanguageStandard>stdcpp14</LanguageStandard> </ClCompile> <Link> <SubSystem>Console</SubSystem> diff --git a/MC_Backend_Win/Sample.modeli b/MC_Backend_Win/Sample.modeli new file mode 100644 index 0000000000000000000000000000000000000000..9f6dc9face91940d2098790cd4082736d644aa28 Binary files /dev/null and b/MC_Backend_Win/Sample.modeli differ diff --git a/Network/TcpEngineController.cpp b/Network/TcpEngineController.cpp index 9a6681d0933feb6724ea07af439bc5e2e8f63da9..8ce0fc86e96431baff16c3bdb3bab28c822c441e 100644 --- a/Network/TcpEngineController.cpp +++ b/Network/TcpEngineController.cpp @@ -123,7 +123,7 @@ namespace Network auto valueRefs = msg->Data_as_ValueRefs(); if (auto fmuLifetimeWrapper = _fmuEngine->FindFmu(valueRefs->InstanceName()->str())) { - auto fmu = fmuLifetimeWrapper->CoSimFmu; + auto fmu = fmuLifetimeWrapper->Fmu; // Copy the value refs to std vectors // Warning some fields might be empty if (valueRefs->IntVrs()) @@ -213,7 +213,7 @@ namespace Network // Only if the fmu exists if (auto fmuLifetimeWrapper = _fmuEngine->FindFmu(data->InstanceName()->str())) { - auto fmu = fmuLifetimeWrapper->CoSimFmu; + auto fmu = fmuLifetimeWrapper->Fmu; // Integer if (data->IntVrs() && data->IntValues()) { diff --git a/Simulation/FMUEngine.cpp b/Simulation/FMUEngine.cpp index 2336219f3e3d92933c651d9eab283ed9aefcd25a..555b60af7588ca24f7e4ee4752f7e89299552d86 100644 --- a/Simulation/FMUEngine.cpp +++ b/Simulation/FMUEngine.cpp @@ -71,7 +71,7 @@ namespace Simulation // DoStep for each fmu for (auto &pair : _fmus) { - int status = pair.second.CoSimFmu->DoStep( + int status = pair.second.Fmu->DoStep( getSeconds(_calculatedCurrentDuration), getSeconds(STEP_SIZE), fmi2False); @@ -119,7 +119,7 @@ namespace Simulation // Get the MasterValue fmi2Real masterValue; - int res = masterFmuInstance->CoSimFmu->GetReal(&link.MasterValueRef, 1, &masterValue); + int res = masterFmuInstance->Fmu->GetReal(&link.MasterValueRef, 1, &masterValue); if (res != fmi2OK) { // The fmu will send an error itself but send soe additional info here @@ -134,7 +134,7 @@ namespace Simulation // Calculate the slaveValue fmi2Real slaveValue = masterValue * link.Factor + link.Shift; // Set the slave variable value - res = slaveFmuInstance->CoSimFmu->SetReal(&link.SlaveValueRef, 1, &slaveValue); + res = slaveFmuInstance->Fmu->SetReal(&link.SlaveValueRef, 1, &slaveValue); if (res != fmi2OK) { @@ -152,7 +152,7 @@ namespace Simulation { for (auto &pair : _fmus) { - std::shared_ptr<CoSimFmu> fmu = pair.second.CoSimFmu; + std::shared_ptr<CoSimFmu> fmu = pair.second.Fmu; // Gather the values: Int auto intRes = fmu->GetInteger(); if (intRes.first != fmi2OK) @@ -203,7 +203,7 @@ namespace Simulation { for (auto &pair : _fmus) { - std::shared_ptr<CoSimFmu> fmu = pair.second.CoSimFmu; + std::shared_ptr<CoSimFmu> fmu = pair.second.Fmu; // Exit the initalizationmode // TODO check current state int status = fmu->ExitInitializationMode(); @@ -275,7 +275,7 @@ namespace Simulation FmiResult res{ fmi2OK,"" }; for (auto &pair : _fmus) { - std::shared_ptr<CoSimFmu> fmu = pair.second.CoSimFmu; + std::shared_ptr<CoSimFmu> fmu = pair.second.Fmu; // Reset fmu, by freeing and reinstantiating // int status = fmu->Reset(); Fails for simulink fmus int status = fmu->Terminate(); @@ -284,10 +284,10 @@ namespace Simulation res = { status, "Failed terminating instance: " + fmu->GetInstanceName() }; } fmu->FreeInstance(); - if (!fmu->Instantiate(pair.second.FmuFile->GetInstanceName(), - pair.second.FmuFile->GetGUID(), pair.second.FmuFile->GetResourceUri())) + if (!fmu->Instantiate(pair.second.File->GetInstanceName(), + pair.second.File->GetGUID(), pair.second.File->GetResourceUri())) { - return { fmi2Error, "Instantiation failed for instance: " + pair.second.FmuFile->GetInstanceName() }; + return { fmi2Error, "Instantiation failed for instance: " + pair.second.File->GetInstanceName() }; } FmiResult initResult = initializeFmu(fmu); if (initResult.Status != fmi2OK) diff --git a/Simulation/FmuEngine.hpp b/Simulation/FmuEngine.hpp index fc3d8996e9e9790de8068257e456e59abe037091..285b62aee751161e9e8b72bdc76e0cf5af822721 100644 --- a/Simulation/FmuEngine.hpp +++ b/Simulation/FmuEngine.hpp @@ -31,8 +31,8 @@ namespace Simulation /// We need a CoSimFmu and the files with the same lifetime struct FmuLifetimeWrapper { - std::shared_ptr<CoSimFmu> CoSimFmu; - std::shared_ptr<FmuFile> FmuFile; + std::shared_ptr<CoSimFmu> Fmu; + std::shared_ptr<FmuFile> File; }; /// Return status & message struct FmiResult