    

 ## On this page

  

 

 # fmu\_base\_activity

 Last update: 16.07.2025 

<a id="l00001" name="l00001"></a> 1 

<a id="l00003" name="l00003"></a> 3 

<a id="l00004" name="l00004"></a> 4\#pragma once

<a id="l00005" name="l00005"></a> 5 

<a id="l00006" name="l00006"></a> 6\#include "core/lifecycle/activity/base\_activity.h"

<a id="l00007" name="l00007"></a> 7\#include "core/lifecycle/fmu\_activity/fmu\_config.h"

<a id="l00008" name="l00008"></a> 8\#include "core/lifecycle/fmu\_activity/i\_fmu\_logic.h"

<a id="l00009" name="l00009"></a> 9\#include "core/message/rtidds/fmu/fmu\_message.hpp"

<a id="l00010" name="l00010"></a> 10\#include "core/scheduler/i\_scheduler\_client/i\_scheduler\_client.h"

<a id="l00011" name="l00011"></a> 11\#include &lt;optional&gt;

<a id="l00012" name="l00012"></a> 12 

<a id="l00017" name="l00017"></a> 17namespace [simulation\_framework](namespacesimulation__framework.xhtml)

<a id="l00018" name="l00018"></a> 18{

<a id="l00019" name="l00019"></a> 19namespace [core](namespacecore.xhtml)

<a id="l00020" name="l00020"></a> 20{

<a id="l00021" name="l00021"></a> 21 

<a id="l00022" name="l00022"></a> 22class CommunicationManager;

<a id="l00023" name="l00023"></a> 23 

<a id="l00024" name="l00024"></a> 24namespace lifecycle

<a id="l00025" name="l00025"></a> 25{

<a id="l00026" name="l00026"></a> 26 

<a id="l00030" name="l00030"></a>[ 30](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml)class [FmuBaseActivity](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml) : public [BaseActivity](classsimulation__framework_1_1core_1_1lifecycle_1_1BaseActivity.xhtml)

<a id="l00031" name="l00031"></a> 31{

<a id="l00032" name="l00032"></a> 32 public:

<a id="l00041" name="l00041"></a>[ 41](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#adbe15957d5e1d89197264acc6f012656) [FmuBaseActivity](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#adbe15957d5e1d89197264acc6f012656)(const std::string&amp; name,

<a id="l00042" name="l00042"></a> 42 std::shared_ptr&lt;CommunicationManager&gt; [communication\_manager](classsimulation__framework_1_1core_1_1Topic.xhtml),

<a id="l00043" name="l00043"></a> 43 std::unique_ptr&lt;scheduling::ISchedulerClient&gt; [scheduler\_client](classsimulation__framework_1_1core_1_1Topic.xhtml),

<a id="l00044" name="l00044"></a> 44 [FmuConfig](structsimulation__framework_1_1core_1_1lifecycle_1_1FmuConfig.xhtml) [fmu\_config](classsimulation__framework_1_1core_1_1Topic.xhtml),

<a id="l00045" name="l00045"></a> 45 std::unique_ptr&lt;IFmuLogic&gt; [fmu\_logic](classsimulation__framework_1_1core_1_1Topic.xhtml),

<a id="l00046" name="l00046"></a> 46 const std::optional&lt;double&gt; [step\_size](classsimulation__framework_1_1core_1_1Topic.xhtml) = std::nullopt);

<a id="l00047" name="l00047"></a> 47 

<a id="l00049" name="l00049"></a>[ 49](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a412b94d22b964d6762321464970c6d34) virtual void [ExecuteStep](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a412b94d22b964d6762321464970c6d34)() override;

<a id="l00050" name="l00050"></a> 50 

<a id="l00052" name="l00052"></a>[ 52](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a7f2b0dba2e396cdd58cc414f3a52848c) virtual void [Init](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a7f2b0dba2e396cdd58cc414f3a52848c)() override;

<a id="l00053" name="l00053"></a> 53 

<a id="l00055" name="l00055"></a>[ 55](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#ab6db7c5859ed2d69aaa518545f6eaa30) virtual void [AddPublisherAndSubscriber](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#ab6db7c5859ed2d69aaa518545f6eaa30)() override;

<a id="l00056" name="l00056"></a> 56 

<a id="l00057" name="l00057"></a> 57 protected:

<a id="l00061" name="l00061"></a>[ 61](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#ad2d59ff1b25dda13e38e8ff79e6754b3) FmuInOutMap [DecodeMessage](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#ad2d59ff1b25dda13e38e8ff79e6754b3)(const rtidds::FmuMessage&amp; [message](classsimulation__framework_1_1core_1_1Topic.xhtml));

<a id="l00062" name="l00062"></a> 62 

<a id="l00066" name="l00066"></a>[ 66](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a94cc4be59c072972f9d1b7a7cc32cf06) rtidds::FmuMessage [EncodeMessage](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a94cc4be59c072972f9d1b7a7cc32cf06)(const FmuInOutMap&amp; [outputs](classsimulation__framework_1_1core_1_1Topic.xhtml));

<a id="l00067" name="l00067"></a> 67 

<a id="l00071" name="l00071"></a>[ 71](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#ac09b3c35be0ae2e971475cdf85732b3f) FmuInOutMap [DecodeBytesMessage](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#ac09b3c35be0ae2e971475cdf85732b3f)(const rtidds::GenericBytesMessage&amp; [message](classsimulation__framework_1_1core_1_1Topic.xhtml));

<a id="l00072" name="l00072"></a> 72 

<a id="l00076" name="l00076"></a>[ 76](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#ad95ccdd3c4e76d98bb68d1124ce4df71) rtidds::GenericBytesMessage [EncodeBytesMessage](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#ad95ccdd3c4e76d98bb68d1124ce4df71)(const FmuInOutMap&amp; [outputs](classsimulation__framework_1_1core_1_1Topic.xhtml));

<a id="l00077" name="l00077"></a> 77 

<a id="l00079" name="l00079"></a>[ 79](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a55ba412be4a52a61cc7c68207b8f3d88) [FmuConfig](structsimulation__framework_1_1core_1_1lifecycle_1_1FmuConfig.xhtml) [fmu\_config\_](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a55ba412be4a52a61cc7c68207b8f3d88){};

<a id="l00080" name="l00080"></a> 80 

<a id="l00082" name="l00082"></a>[ 82](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a8c713dd64a2a30af59a6908caf3bc14b) std::unique_ptr&lt;IFmuLogic&gt; [fmu\_logic\_](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a8c713dd64a2a30af59a6908caf3bc14b);

<a id="l00083" name="l00083"></a> 83 

<a id="l00085" name="l00085"></a>[ 85](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a5645715270857e72b39cc22475cee6d3) std::optional&lt;double&gt; [step\_size\_](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a5645715270857e72b39cc22475cee6d3);

<a id="l00086" name="l00086"></a> 86 

<a id="l00088" name="l00088"></a>[ 88](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a9c5e9745f447f179dffaff037cb09338) FmuTopicToVarMap [input\_topics\_to\_var\_map\_](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a9c5e9745f447f179dffaff037cb09338){};

<a id="l00089" name="l00089"></a> 89 

<a id="l00091" name="l00091"></a>[ 91](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#ab2ff48df96a66b5816e41c0a3c7f6194) FmuTopicToVarMap [output\_topics\_to\_var\_map\_](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#ab2ff48df96a66b5816e41c0a3c7f6194){};

<a id="l00092" name="l00092"></a> 92};



<a id="l00093" name="l00093"></a> 93 

<a id="l00094" name="l00094"></a> 94} // namespace lifecycle

<a id="l00095" name="l00095"></a> 95} // namespace core

<a id="l00096" name="l00096"></a> 96} // namespace simulation\_framework

[simulation\_framework::core::Topic](classsimulation__framework_1_1core_1_1Topic.xhtml)

This is the concrete Topic class that can be used for creation of a communication channel with given ...

**Definition** [topic.h:38](topic_8h_source.xhtml#l00037)



[simulation\_framework::core::lifecycle::BaseActivity](classsimulation__framework_1_1core_1_1lifecycle_1_1BaseActivity.xhtml)

This is the basic implementation of IActivity interface. Inheriting classes, i.e. a concrete simulati...

**Definition** [base\_activity.h:78](base__activity_8h_source.xhtml#l00077)



[simulation\_framework::core::lifecycle::FmuBaseActivity](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml)

An activity that subscribes to messages to input to an FMU and publishes the FMU output.

**Definition** [fmu\_base\_activity.h:31](fmu__base__activity_8h_source.xhtml#l00030)



[simulation\_framework::core::lifecycle::FmuBaseActivity::ExecuteStep](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a412b94d22b964d6762321464970c6d34)

virtual void ExecuteStep() override

Sets FMU inputs from subscribed topics, steps the FMU, and gets FMU outputs ready for published topic...



[simulation\_framework::core::lifecycle::FmuBaseActivity::fmu\_config\_](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a55ba412be4a52a61cc7c68207b8f3d88)

FmuConfig fmu_config_

A struct containing information about topics and corresponding FMU variables.

**Definition** [fmu\_base\_activity.h:79](fmu__base__activity_8h_source.xhtml#l00079)



[simulation\_framework::core::lifecycle::FmuBaseActivity::step\_size\_](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a5645715270857e72b39cc22475cee6d3)

std::optional&lt; double &gt; step_size_

The step size to increment the FMU's independent variable.

**Definition** [fmu\_base\_activity.h:85](fmu__base__activity_8h_source.xhtml#l00085)



[simulation\_framework::core::lifecycle::FmuBaseActivity::Init](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a7f2b0dba2e396cdd58cc414f3a52848c)

virtual void Init() override

Initialize FMU parameters.



[simulation\_framework::core::lifecycle::FmuBaseActivity::fmu\_logic\_](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a8c713dd64a2a30af59a6908caf3bc14b)

std::unique_ptr&lt; IFmuLogic &gt; fmu_logic_

A pointer to the logic that manages simulating the FMU.

**Definition** [fmu\_base\_activity.h:82](fmu__base__activity_8h_source.xhtml#l00082)



[simulation\_framework::core::lifecycle::FmuBaseActivity::EncodeMessage](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a94cc4be59c072972f9d1b7a7cc32cf06)

rtidds::FmuMessage EncodeMessage(const FmuInOutMap &amp;outputs)

Put the outputs from the IFmuLogic implementation into an FmuMessage to be published.



[simulation\_framework::core::lifecycle::FmuBaseActivity::input\_topics\_to\_var\_map\_](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#a9c5e9745f447f179dffaff037cb09338)

FmuTopicToVarMap input_topics_to_var_map_

A mapping of input topics to FMU variables.

**Definition** [fmu\_base\_activity.h:88](fmu__base__activity_8h_source.xhtml#l00088)



[simulation\_framework::core::lifecycle::FmuBaseActivity::output\_topics\_to\_var\_map\_](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#ab2ff48df96a66b5816e41c0a3c7f6194)

FmuTopicToVarMap output_topics_to_var_map_

A mapping of output topics to FMU variables.

**Definition** [fmu\_base\_activity.h:91](fmu__base__activity_8h_source.xhtml#l00091)



[simulation\_framework::core::lifecycle::FmuBaseActivity::AddPublisherAndSubscriber](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#ab6db7c5859ed2d69aaa518545f6eaa30)

virtual void AddPublisherAndSubscriber() override

Adds publishers and subscribers of rtidds::FmuMessage based on information from FmuConfig.



[simulation\_framework::core::lifecycle::FmuBaseActivity::DecodeBytesMessage](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#ac09b3c35be0ae2e971475cdf85732b3f)

FmuInOutMap DecodeBytesMessage(const rtidds::GenericBytesMessage &amp;message)

Put the received GenericBytes values in a format understood by the IFmuLogic implementation.



[simulation\_framework::core::lifecycle::FmuBaseActivity::DecodeMessage](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#ad2d59ff1b25dda13e38e8ff79e6754b3)

FmuInOutMap DecodeMessage(const rtidds::FmuMessage &amp;message)

Put the received FmuMessage values in a format understood by the IFmuLogic implementation.



[simulation\_framework::core::lifecycle::FmuBaseActivity::EncodeBytesMessage](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#ad95ccdd3c4e76d98bb68d1124ce4df71)

rtidds::GenericBytesMessage EncodeBytesMessage(const FmuInOutMap &amp;outputs)

Put the outputs from the IFmuLogic implementation into an GenericBytes to be published.



[simulation\_framework::core::lifecycle::FmuBaseActivity::FmuBaseActivity](classsimulation__framework_1_1core_1_1lifecycle_1_1FmuBaseActivity.xhtml#adbe15957d5e1d89197264acc6f012656)

FmuBaseActivity(const std::string &amp;name, std::shared_ptr&lt; CommunicationManager &gt; communication_manager, std::unique_ptr&lt; scheduling::ISchedulerClient &gt; scheduler_client, FmuConfig fmu_config, std::unique_ptr&lt; IFmuLogic &gt; fmu_logic, const std::optional&lt; double &gt; step_size=std::nullopt)

Construct an FMU activity to join the simulation.



[core](namespacecore.xhtml)

The namespace for all core functionalities under namespace simulation_framework.



[simulation\_framework](namespacesimulation__framework.xhtml)

The top namespace for simulation framework.



[simulation\_framework::core::lifecycle::FmuConfig](structsimulation__framework_1_1core_1_1lifecycle_1_1FmuConfig.xhtml)

A helper struct to pass necessary information to create FmuBaseActivity.

**Definition** [fmu\_config.h:33](fmu__config_8h_source.xhtml#l00032)