OMSimulatorLib
The OMSimulator project is a FMI-based co-simulation environment that supports ordinary (i.e., non-delayed) and TLM connections.
ComponentFMUME.h
Go to the documentation of this file.
1 /*
2  * This file is part of OpenModelica.
3  *
4  * Copyright (c) 1998-CurrentYear, Open Source Modelica Consortium (OSMC),
5  * c/o Linköpings universitet, Department of Computer and Information Science,
6  * SE-58183 Linköping, Sweden.
7  *
8  * All rights reserved.
9  *
10  * THIS PROGRAM IS PROVIDED UNDER THE TERMS OF GPL VERSION 3 LICENSE OR
11  * THIS OSMC PUBLIC LICENSE (OSMC-PL) VERSION 1.2.
12  * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS PROGRAM CONSTITUTES
13  * RECIPIENT'S ACCEPTANCE OF THE OSMC PUBLIC LICENSE OR THE GPL VERSION 3,
14  * ACCORDING TO RECIPIENTS CHOICE.
15  *
16  * The OpenModelica software and the Open Source Modelica
17  * Consortium (OSMC) Public License (OSMC-PL) are obtained
18  * from OSMC, either from the above address,
19  * from the URLs: http://www.ida.liu.se/projects/OpenModelica or
20  * http://www.openmodelica.org, and in the OpenModelica distribution.
21  * GNU version 3 is obtained from: http://www.gnu.org/copyleft/gpl.html.
22  *
23  * This program is distributed WITHOUT ANY WARRANTY; without
24  * even the implied warranty of MERCHANTABILITY or FITNESS
25  * FOR A PARTICULAR PURPOSE, EXCEPT AS EXPRESSLY SET FORTH
26  * IN THE BY RECIPIENT SELECTED SUBSIDIARY LICENSE CONDITIONS OF OSMC-PL.
27  *
28  * See the full OSMC Public License conditions for more details.
29  *
30  */
31 
32 #ifndef _OMS_COMPONENT_FMU_ME_H_
33 #define _OMS_COMPONENT_FMU_ME_H_
34 
35 #include "Component.h"
36 #include "ComRef.h"
37 #include "ResultWriter.h"
38 #include "Snapshot.h"
39 #include "Values.h"
40 #include "Variable.h"
41 
42 #include <fmilib.h>
43 #include <map>
44 #include <pugixml.hpp>
45 #include <string>
46 #include <unordered_map>
47 #include <vector>
48 
49 namespace oms
50 {
51  class ComponentFMUME : public Component
52  {
53  public:
55 
56  static Component* NewComponent(const oms::ComRef& cref, System* parentSystem, const std::string& fmuPath, std::string replaceComponent = "");
57  static Component* NewComponent(const pugi::xml_node& node, System* parentSystem, const std::string& sspVersion, const Snapshot& snapshot, std::string variantName);
58  const FMUInfo* getFMUInfo() const {return &(this->fmuInfo);}
59 
60  oms_status_enu_t exportToSSD(pugi::xml_node& node, Snapshot& snapshot, std::string variantName) const;
61  oms_status_enu_t exportToSSV(pugi::xml_node& ssvNode);
62  void getFilteredUnitDefinitionsToSSD(std::map<std::string, std::map<std::string, std::string>>& unitDefinitions);
63  oms_status_enu_t exportToSSVTemplate(pugi::xml_node& ssvNode, Snapshot& snapshot);
64  oms_status_enu_t exportToSSMTemplate(pugi::xml_node& ssmNode);
69 
72 
73  Variable* getVariable(const ComRef& cref);
74 
75  oms_status_enu_t getBoolean(const ComRef& cref, bool& value);
76  oms_status_enu_t getBoolean(const fmi2_value_reference_t& vr, bool& value);
77  oms_status_enu_t getInteger(const ComRef& cref, int& value);
78  oms_status_enu_t getInteger(const fmi2_value_reference_t& vr, int& value);
79  oms_status_enu_t getReal(const ComRef& cref, double& value);
80  oms_status_enu_t getReal(const fmi2_value_reference_t& vr, double& value);
81  oms_status_enu_t getString(const ComRef& cref, std::string& value);
82  oms_status_enu_t getString(const fmi2_value_reference_t& vr, std::string& value);
83  oms_status_enu_t setBoolean(const ComRef& cref, bool value);
84  oms_status_enu_t setInteger(const ComRef& cref, int value);
85  oms_status_enu_t setReal(const ComRef& cref, double value);
86  oms_status_enu_t setString(const ComRef& cref, const std::string& value);
87  oms_status_enu_t setUnit(const ComRef& cref, const std::string& value);
88 
89  oms_status_enu_t getDirectionalDerivative(const ComRef& unknownCref, const ComRef& knownCref, double& value);
90  oms_status_enu_t getDirectionalDerivativeHeper(const int unknownIndex, const int knownIndex, const std::vector<int>& dependencyList, double& value);
91 
93  oms_status_enu_t updateOrDeleteStartValueInReplacedComponent(std::vector<std::string>& warningList);
94  oms_status_enu_t setValuesResources(std::vector<Values>& allValuesResources);
95  std::vector<Values> getValuesResources();
96 
99  oms_status_enu_t addSignalsToResults(const char* regex);
100  oms_status_enu_t removeSignalsFromResults(const char* regex);
101 
103 
104  size_t getNumberOfContinuousStates() const {return derivatives.size();}
106  oms_status_enu_t getContinuousStates(double* states);
107  oms_status_enu_t setContinuousStates(double* states);
110  oms_status_enu_t getEventindicators(double* eventindicators);
111 
112  fmi2_import_t* getFMU() {return fmu;}
113  fmi2_event_info_t* getEventInfo() {return &eventInfo;}
114 
116 
117  oms_status_enu_t setFaultInjection(const ComRef& signal, oms_fault_type_enu_t faultType, double faultValue);
118 
119  void getFilteredSignals(std::vector<Connector>& filteredSignals) const;
120 
121  oms_status_enu_t newResources(const std::string& ssvFilename, const std::string& ssmFilename, bool externalResources);
124 
125  oms_status_enu_t deleteReferencesInSSD(const std::string& filename);
126  oms_status_enu_t deleteResourcesInSSP(const std::string& filename);
127 
128  protected:
129  ComponentFMUME(const ComRef& cref, System* parentSystem, const std::string& fmuPath);
130 
131  // stop the compiler generating methods copying the object
132  ComponentFMUME(ComponentFMUME const& copy);
133  ComponentFMUME& operator=(ComponentFMUME const& copy);
134 
135  oms_status_enu_t renameValues(const ComRef& oldCref, const ComRef& newCref);
136 
137  void dumpInitialUnknowns();
138 
139  private:
140  jm_callbacks callbacks;
141  fmi2_callback_functions_t callbackFunctions;
142  fmi_import_context_t* context = NULL;
143  fmi2_import_t* fmu = NULL;
144 
145  fmi2_event_info_t eventInfo;
147 
149 
150  std::vector<Variable> allVariables;
151  std::vector<unsigned int> calculatedParameters;
152  std::vector<unsigned int> derivatives;
153  std::vector<unsigned int> inputs;
154  std::vector<unsigned int> outputs;
155  std::vector<unsigned int> parameters;
156  std::vector<bool> exportVariables;
157 
159 
160  std::unordered_map<unsigned int /*result file var ID*/, unsigned int /*allVariables ID*/> resultFileMapping;
161 
162  std::map<fmi2_value_reference_t, oms_fault_type_t> fib;
164  };
165 }
166 
167 #endif
ComponentFMUME(const ComRef &cref, System *parentSystem, const std::string &fmuPath)
Definition: ComponentFMUME.cpp:50
FMU info.
Definition: FMUInfo.h:45
void getFilteredUnitDefinitionsToSSD(std::map< std::string, std::map< std::string, std::string >> &unitDefinitions)
Definition: ComponentFMUME.cpp:403
fmi2_event_info_t eventInfo
Definition: ComponentFMUME.h:145
fmi2_event_info_t * getEventInfo()
Definition: ComponentFMUME.h:113
oms_status_enu_t newResources(const std::string &ssvFilename, const std::string &ssmFilename, bool externalResources)
Definition: ComponentFMUME.cpp:813
oms_status_enu_t initializeDependencyGraph_outputs()
Definition: ComponentFMUME.cpp:593
oms_status_enu_t setUnit(const ComRef &cref, const std::string &value)
Definition: ComponentFMUME.cpp:1719
Definition: ResultWriter.h:68
size_t getNumberOfEventIndicators() const
Definition: ComponentFMUME.h:105
oms_status_enu_t getString(const ComRef &cref, std::string &value)
Definition: ComponentFMUME.cpp:1250
oms_status_enu_t setString(const ComRef &cref, const std::string &value)
Definition: ComponentFMUME.cpp:1663
System * parentSystem
Definition: Component.h:164
oms_status_enu_t instantiate()
Definition: ComponentFMUME.cpp:640
size_t getNumberOfContinuousStates() const
Definition: ComponentFMUME.h:104
oms_status_enu_t initializeDependencyGraph_initialUnknowns()
Definition: ComponentFMUME.cpp:460
Definition: Variable.h:45
std::vector< unsigned int > derivatives
Definition: ComponentFMUME.h:152
std::vector< Variable > allVariables
Definition: ComponentFMUME.h:150
size_t nEventIndicators
Definition: ComponentFMUME.h:146
std::vector< bool > exportVariables
Definition: ComponentFMUME.h:156
oms_status_enu_t getInteger(const ComRef &cref, int &value)
Definition: ComponentFMUME.cpp:1029
oms_status_enu_t setContinuousStates(double *states)
Definition: ComponentFMUME.cpp:1872
oms_status_enu_t exportToSSV(pugi::xml_node &ssvNode)
Definition: ComponentFMUME.cpp:425
FMUInfo fmuInfo
Definition: ComponentFMUME.h:148
oms_status_enu_t
Definition: Types.h:43
fmi2_import_t * getFMU()
Definition: ComponentFMUME.h:112
oms_status_enu_t getBoolean(const ComRef &cref, bool &value)
Definition: ComponentFMUME.cpp:939
oms_status_enu_t setResourcesHelper2(Values value)
Definition: ComponentFMUME.cpp:726
void getFilteredSignals(std::vector< Connector > &filteredSignals) const
Definition: ComponentFMUME.cpp:1969
oms_status_enu_t deleteResourcesInSSP(const std::string &filename)
Definition: ComponentFMUME.cpp:861
ComponentFMUME & operator=(ComponentFMUME const &copy)
not implemented
Definition: Snapshot.h:46
std::vector< Values > getValuesResources()
Definition: ComponentFMUME.cpp:1574
~ComponentFMUME()
Definition: ComponentFMUME.cpp:55
oms_status_enu_t getEventindicators(double *eventindicators)
Definition: ComponentFMUME.cpp:1899
std::vector< unsigned int > inputs
Definition: ComponentFMUME.h:153
Variable * getVariable(const ComRef &cref)
Definition: ComponentFMUME.cpp:1109
fmi2_callback_functions_t callbackFunctions
Definition: ComponentFMUME.h:141
oms_status_enu_t getNominalsOfContinuousStates(double *nominals)
Definition: ComponentFMUME.cpp:1890
oms_status_enu_t setResourcesHelper1(Values value)
Definition: ComponentFMUME.cpp:702
void dumpInitialUnknowns()
Definition: ComponentFMUME.cpp:443
oms_status_enu_t setFaultInjection(const ComRef &signal, oms_fault_type_enu_t faultType, double faultValue)
Definition: ComponentFMUME.cpp:1946
oms_status_enu_t getDerivatives(double *derivatives)
Definition: ComponentFMUME.cpp:1881
ComRef - component reference.
Definition: ComRef.h:46
std::map< fmi2_value_reference_t, oms_fault_type_t > fib
fault injection blocks
Definition: ComponentFMUME.h:162
Definition: Component.h:60
oms_status_enu_t updateOrDeleteStartValueInReplacedComponent(std::vector< std::string > &warningList)
Definition: ComponentFMUME.cpp:1579
oms_status_enu_t getReal(const ComRef &cref, double &value)
Definition: ComponentFMUME.cpp:1158
fmi2_import_t * fmu
Definition: ComponentFMUME.h:143
oms_status_enu_t setReal(const ComRef &cref, double value)
Definition: ComponentFMUME.cpp:1605
jm_callbacks callbacks
Definition: ComponentFMUME.h:140
std::vector< unsigned int > parameters
Definition: ComponentFMUME.h:155
oms_status_enu_t setValuesResources(std::vector< Values > &allValuesResources)
Definition: ComponentFMUME.cpp:1568
oms_status_enu_t terminate()
Definition: ComponentFMUME.cpp:890
Definition: Values.h:45
oms_status_enu_t exportToSSD(pugi::xml_node &node, Snapshot &snapshot, std::string variantName) const
Definition: ComponentFMUME.cpp:370
oms_status_enu_t getDirectionalDerivativeHeper(const int unknownIndex, const int knownIndex, const std::vector< int > &dependencyList, double &value)
Definition: ComponentFMUME.cpp:1412
oms_status_enu_t getContinuousStates(double *states)
Definition: ComponentFMUME.cpp:1863
std::unordered_map< unsigned int, unsigned int > resultFileMapping
Definition: ComponentFMUME.h:160
Definition: ComponentFMUME.h:51
Definition: AlgLoop.h:44
static Component * NewComponent(const oms::ComRef &cref, System *parentSystem, const std::string &fmuPath, std::string replaceComponent="")
Definition: ComponentFMUME.cpp:63
oms_status_enu_t exportToSSVTemplate(pugi::xml_node &ssvNode, Snapshot &snapshot)
Definition: ComponentFMUME.cpp:430
oms_fault_type_enu_t
Definition: Types.h:76
oms_status_enu_t getDirectionalDerivative(const ComRef &unknownCref, const ComRef &knownCref, double &value)
Definition: ComponentFMUME.cpp:1330
oms_status_enu_t deleteStartValue(const ComRef &cref)
Definition: ComponentFMUME.cpp:1543
oms_status_enu_t initialize()
Definition: ComponentFMUME.cpp:869
oms_status_enu_t deleteReferencesInSSD(const std::string &filename)
Definition: ComponentFMUME.cpp:853
Values values
start values defined before instantiating the FMU and external inputs defined after initialization ...
Definition: ComponentFMUME.h:158
oms_status_enu_t doEventIteration()
Definition: ComponentFMUME.cpp:793
ComRef cref
Definition: Component.h:165
const char * signal
Definition: Tags.cpp:38
oms_status_enu_t setBoolean(const ComRef &cref, bool value)
Definition: ComponentFMUME.cpp:1440
oms_status_enu_t exportToSSMTemplate(pugi::xml_node &ssmNode)
Definition: ComponentFMUME.cpp:437
oms_status_enu_t updateSignals(ResultWriter &resultWriter)
Definition: ComponentFMUME.cpp:1823
oms_status_enu_t setInteger(const ComRef &cref, int value)
Definition: ComponentFMUME.cpp:1492
oms_status_enu_t reset()
Definition: ComponentFMUME.cpp:901
std::vector< unsigned int > outputs
Definition: ComponentFMUME.h:154
oms_status_enu_t renameValues(const ComRef &oldCref, const ComRef &newCref)
Definition: ComponentFMUME.cpp:1978
oms_status_enu_t addSignalsToResults(const char *regex)
Definition: ComponentFMUME.cpp:1908
bool getCanGetAndSetFMUstate() const
Definition: FMUInfo.h:57
bool getCanGetAndSetState()
Definition: ComponentFMUME.h:115
std::vector< unsigned int > calculatedParameters
Definition: ComponentFMUME.h:151
oms::ComRef getValidCref(ComRef cref)
Definition: ComponentFMUME.cpp:783
oms_status_enu_t removeSignalsFromResults(const char *regex)
Definition: ComponentFMUME.cpp:1927
oms_status_enu_t registerSignalsForResultFile(ResultWriter &resultFile)
Definition: ComponentFMUME.cpp:1760
Definition: System.h:69
const FMUInfo * getFMUInfo() const
Definition: ComponentFMUME.h:58
fmi_import_context_t * context
Definition: ComponentFMUME.h:142