OMSimulatorLib
The OMSimulator project is a FMI-based co-simulation environment that supports ordinary (i.e., non-delayed) and TLM connections.
ComponentFMUCS.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_CS_H_
33 #define _OMS_COMPONENT_FMU_CS_H_
34 
35 #include "Component.h"
36 #include "ComRef.h"
37 #include "Values.h"
38 #include "ResultWriter.h"
39 #include "Variable.h"
40 
41 #include <fmilib.h>
42 #include <map>
43 #include <pugixml.hpp>
44 #include <string>
45 #include <unordered_map>
46 #include <vector>
47 
48 namespace oms
49 {
50  class System;
51 
52  class ComponentFMUCS : public Component
53  {
54  public:
56 
57  static Component* NewComponent(const ComRef& cref, System* parentSystem, const std::string& fmuPath);
58  static Component* NewComponent(const pugi::xml_node& node, System* parentSystem, const std::string& sspVersion);
59  const FMUInfo* getFMUInfo() const {return &(this->fmuInfo);}
60 
61  oms_status_enu_t exportToSSD(pugi::xml_node& node, pugi::xml_node& ssvNode) const;
62  oms_status_enu_t exportToSSVTemplate(pugi::xml_node& ssvNode);
63  oms_status_enu_t exportToSSMTemplate(pugi::xml_node& ssmNode);
68 
69  oms_status_enu_t stepUntil(double stopTime);
70 
73 
74  Variable* getVariable(const ComRef& cref);
75 
76  oms_status_enu_t getBoolean(const ComRef& cref, bool& value);
77  oms_status_enu_t getBoolean(const fmi2_value_reference_t& vr, bool& value);
78  oms_status_enu_t getInteger(const ComRef& cref, int& value);
79  oms_status_enu_t getInteger(const fmi2_value_reference_t& vr, int& value);
80  oms_status_enu_t getReal(const ComRef& cref, double& value);
81  oms_status_enu_t getReal(const fmi2_value_reference_t& vr, double& value);
82  oms_status_enu_t setBoolean(const ComRef& cref, bool value);
83  oms_status_enu_t setInteger(const ComRef& cref, int value);
84  oms_status_enu_t setReal(const ComRef& cref, double value);
85 
87 
88  oms_status_enu_t setFmuTime(double time) {this->time = time; return oms_status_ok;}
89  fmi2_import_t* getFMU() {return fmu;}
90  std::vector<Variable> getAllVariables() {return allVariables;}
91  std::vector<Variable> getInputs() {return inputs;}
92  std::vector<Variable> getOutputs() {return outputs;}
93 
96 
99  oms_status_enu_t addSignalsToResults(const char* regex);
100  oms_status_enu_t removeSignalsFromResults(const char* regex);
101 
106 
107  oms_status_enu_t setFaultInjection(const ComRef& signal, oms_fault_type_enu_t faultType, double faultValue);
108 
109  protected:
110  ComponentFMUCS(const ComRef& cref, System* parentSystem, const std::string& fmuPath);
111 
112  // stop the compiler generating methods copying the object
113  ComponentFMUCS(ComponentFMUCS const& copy);
114  ComponentFMUCS& operator=(ComponentFMUCS const& copy);
115 
116  private:
117  jm_callbacks callbacks;
118  fmi2_callback_functions_t callbackFunctions;
119  fmi_import_context_t* context = NULL;
120  fmi2_import_t* fmu = NULL;
121 
123 
124  std::vector<Variable> allVariables;
125  std::vector<Variable> inputs;
126  std::vector<Variable> outputs;
127  std::vector<Variable> parameters;
128  std::vector<Variable> calculatedParameters;
129  std::vector<bool> exportVariables;
130 
132 
133  std::unordered_map<unsigned int /*result file var ID*/, unsigned int /*allVariables ID*/> resultFileMapping;
134 
135  double time;
136 
137  fmi2_FMU_state_t fmuState = NULL;
138  double fmuStateTime;
139 
140  std::map<fmi2_value_reference_t, oms_fault_type_t> fib;
142  };
143 }
144 
145 #endif
oms_status_enu_t saveState()
Definition: ComponentFMUCS.cpp:1178
oms_status_enu_t setReal(const ComRef &cref, double value)
Definition: ComponentFMUCS.cpp:990
FMU info.
Definition: FMUInfo.h:45
Definition: ComponentFMUCS.h:52
Definition: Types.h:44
oms_status_enu_t setFaultInjection(const ComRef &signal, oms_fault_type_enu_t faultType, double faultValue)
Definition: ComponentFMUCS.cpp:1208
Definition: ResultWriter.h:68
oms_status_enu_t restoreState()
Definition: ComponentFMUCS.cpp:1199
oms_status_enu_t addSignalsToResults(const char *regex)
Definition: ComponentFMUCS.cpp:1140
oms_status_enu_t getReal(const ComRef &cref, double &value)
Definition: ComponentFMUCS.cpp:820
jm_callbacks callbacks
Definition: ComponentFMUCS.h:117
oms_status_enu_t initialize()
Definition: ComponentFMUCS.cpp:574
oms_status_enu_t getBoolean(const ComRef &cref, bool &value)
Definition: ComponentFMUCS.cpp:675
oms_status_enu_t setRealInputDerivative(const ComRef &cref, const SignalDerivative &der)
Definition: ComponentFMUCS.cpp:884
System * parentSystem
Definition: Component.h:143
oms_status_enu_t reset()
Definition: ComponentFMUCS.cpp:601
Definition: Variable.h:44
oms_status_enu_t setBoolean(const ComRef &cref, bool value)
Definition: ComponentFMUCS.cpp:913
oms_status_enu_t instantiate()
Definition: ComponentFMUCS.cpp:510
std::vector< Variable > getOutputs()
Definition: ComponentFMUCS.h:92
oms_status_enu_t updateSignals(ResultWriter &resultWriter)
Definition: ComponentFMUCS.cpp:1100
oms_status_enu_t deleteStartValue(const ComRef &cref)
Definition: ComponentFMUCS.cpp:1032
std::map< fmi2_value_reference_t, oms_fault_type_t > fib
fault injection blocks
Definition: ComponentFMUCS.h:140
ComponentFMUCS & operator=(ComponentFMUCS const &copy)
not implemented
oms_status_enu_t getRealOutputDerivative(const ComRef &cref, SignalDerivative &der)
Definition: ComponentFMUCS.cpp:863
oms_status_enu_t setFmuTime(double time)
Definition: ComponentFMUCS.h:88
fmi2_import_t * getFMU()
Definition: ComponentFMUCS.h:89
oms_status_enu_t
Definition: Types.h:43
double fmuStateTime
Definition: ComponentFMUCS.h:138
ComponentFMUCS(const ComRef &cref, System *parentSystem, const std::string &fmuPath)
Definition: ComponentFMUCS.cpp:47
std::vector< Variable > getAllVariables()
Definition: ComponentFMUCS.h:90
static Component * NewComponent(const ComRef &cref, System *parentSystem, const std::string &fmuPath)
Definition: ComponentFMUCS.cpp:60
oms_status_enu_t exportToSSMTemplate(pugi::xml_node &ssmNode)
Definition: ComponentFMUCS.cpp:362
std::vector< Variable > getInputs()
Definition: ComponentFMUCS.h:91
oms_status_enu_t registerSignalsForResultFile(ResultWriter &resultFile)
Definition: ComponentFMUCS.cpp:1037
std::vector< Variable > allVariables
Definition: ComponentFMUCS.h:124
bool getCanGetAndSetState()
Definition: ComponentFMUCS.h:102
oms_status_enu_t exportToSSVTemplate(pugi::xml_node &ssvNode)
Definition: ComponentFMUCS.cpp:356
std::vector< Variable > parameters
Definition: ComponentFMUCS.h:127
oms_status_enu_t freeState()
Definition: ComponentFMUCS.cpp:1187
oms_status_enu_t initializeDependencyGraph_initialUnknowns()
Definition: ComponentFMUCS.cpp:368
fmi_import_context_t * context
Definition: ComponentFMUCS.h:119
std::vector< Variable > inputs
Definition: ComponentFMUCS.h:125
ComRef - component reference.
Definition: ComRef.h:43
oms_status_enu_t getInteger(const ComRef &cref, int &value)
Definition: ComponentFMUCS.cpp:728
Definition: Component.h:56
~ComponentFMUCS()
Definition: ComponentFMUCS.cpp:52
fmi2_import_t * fmu
Definition: ComponentFMUCS.h:120
Definition: Values.h:42
oms_status_enu_t setInteger(const ComRef &cref, int value)
Definition: ComponentFMUCS.cpp:952
oms_status_enu_t exportToSSD(pugi::xml_node &node, pugi::xml_node &ssvNode) const
Definition: ComponentFMUCS.cpp:316
Definition: AlgLoop.h:44
oms_fault_type_enu_t
Definition: Types.h:76
oms::ComRef getValidCref(ComRef cref)
Definition: ComponentFMUCS.cpp:564
oms_status_enu_t stepUntil(double stopTime)
Definition: ComponentFMUCS.cpp:620
fmi2_callback_functions_t callbackFunctions
Definition: ComponentFMUCS.h:118
ComRef cref
Definition: Component.h:144
oms_status_enu_t removeSignalsFromResults(const char *regex)
Definition: ComponentFMUCS.cpp:1159
const char * signal
Definition: Tags.cpp:38
std::vector< Variable > calculatedParameters
Definition: ComponentFMUCS.h:128
oms_status_enu_t initializeDependencyGraph_outputs()
Definition: ComponentFMUCS.cpp:461
std::vector< bool > exportVariables
Definition: ComponentFMUCS.h:129
bool getCanGetAndSetFMUstate() const
Definition: FMUInfo.h:58
std::unordered_map< unsigned int, unsigned int > resultFileMapping
Definition: ComponentFMUCS.h:133
std::vector< Variable > outputs
Definition: ComponentFMUCS.h:126
fmi2_FMU_state_t fmuState
Definition: ComponentFMUCS.h:137
double time
Definition: ComponentFMUCS.h:135
Definition: System.h:67
Variable * getVariable(const ComRef &cref)
Definition: ComponentFMUCS.cpp:771
Values values
start values defined before instantiating the FMU and external inputs defined after initialization ...
Definition: ComponentFMUCS.h:131
oms_status_enu_t terminate()
Definition: ComponentFMUCS.cpp:588
const FMUInfo * getFMUInfo() const
Definition: ComponentFMUCS.h:59
FMUInfo fmuInfo
Definition: ComponentFMUCS.h:122
Definition: SignalDerivative.h:41