OMSimulatorLib
The OMSimulator project is a FMI-based co-simulation environment that supports ordinary (i.e., non-delayed) and TLM connections.
Component.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_H_
33 #define _OMS_COMPONENT_H_
34 
35 #include "Clock.h"
36 #include "ComRef.h"
37 #include "Connector.h"
38 #include "DirectedGraph.h"
39 #include "Element.h"
40 #include "FMUInfo.h"
41 #include "Logging.h"
42 #include "ResultWriter.h"
43 #include "SignalDerivative.h"
44 #include "Snapshot.h"
45 #include "Types.h"
46 #include "Values.h"
47 
48 #include <fmilib.h>
49 #include <pugixml.hpp>
50 
51 namespace oms
52 {
53  class System;
54  class Model;
55  class Variable;
56 
57  void fmiLogger(jm_callbacks* c, jm_string module, jm_log_level_enu_t log_level, jm_string message);
58  void fmi2logger(fmi2_component_environment_t env, fmi2_string_t instanceName, fmi2_status_t status, fmi2_string_t category, fmi2_string_t message, ...);
59 
60  class Component
61  {
62  public:
63  virtual ~Component();
64 
65  virtual oms_status_enu_t addSignalsToResults(const char* regex) = 0;
66  virtual oms_status_enu_t exportToSSD(pugi::xml_node& node, Snapshot& snapshot, std::string variantName) const = 0;
67  virtual oms_status_enu_t exportToSSV(pugi::xml_node& ssvNode) { return logError_NotImplemented; }
68  virtual void getFilteredUnitDefinitionsToSSD(std::map<std::string, std::map<std::string, std::string>>& unitDefinitions) { return ; }
69 
70  virtual oms_status_enu_t initialize() = 0;
71  virtual oms_status_enu_t instantiate() = 0;
73  virtual oms_status_enu_t removeSignalsFromResults(const char* regex) = 0;
74  virtual oms_status_enu_t reset() = 0;
75  virtual oms_status_enu_t terminate() = 0;
76  virtual oms_status_enu_t updateSignals(ResultWriter& resultWriter) = 0;
77  virtual Variable* getVariable(const ComRef& cref) = 0;
78 
79  virtual bool getCanGetAndSetState() { return false; }
80  virtual const FMUInfo* getFMUInfo() const { return nullptr; }
81  virtual oms_status_enu_t deleteStartValue(const ComRef& cref) { return oms_status_ok; }
82  virtual std::vector<Values> getValuesResources() { return{}; }
83  virtual oms_status_enu_t setValuesResources(std::vector<Values>& allResources) { return oms_status_ok; }
84  virtual oms_status_enu_t updateOrDeleteStartValueInReplacedComponent(std::vector<std::string>& warningList) { return oms_status_ok; }
85  virtual oms_status_enu_t exportToSSMTemplate(pugi::xml_node& ssmNode) { return logError_NotImplemented; }
86  virtual oms_status_enu_t exportToSSVTemplate(pugi::xml_node& ssvNode, Snapshot& snapshot) { return logError_NotImplemented; }
88  virtual oms_status_enu_t getBoolean(const ComRef& cref, bool& value) { return logError_NotImplemented; }
89  virtual oms_status_enu_t getInteger(const ComRef& cref, int& value) { return logError_NotImplemented; }
90  virtual oms_status_enu_t getReal(const ComRef& cref, double& value) { return logError_NotImplemented; }
91  virtual oms_status_enu_t getString(const ComRef& cref, std::string& value) { return logError_NotImplemented; }
93  virtual oms_status_enu_t getDirectionalDerivative(const ComRef& unknownCref, const ComRef& knownCref, double& value) { return logError_NotImplemented; }
96  virtual oms_status_enu_t setBoolean(const ComRef& cref, bool value) { return logError_NotImplemented; }
97  virtual oms_status_enu_t setFaultInjection(const ComRef& signal, oms_fault_type_enu_t faultType, double faultValue) { return oms_status_error; }
98  virtual oms_status_enu_t setInteger(const ComRef& cref, int value) { return logError_NotImplemented; }
99  virtual oms_status_enu_t setReal(const ComRef& cref, double value) { return logError_NotImplemented; }
100  virtual oms_status_enu_t setString(const ComRef& cref, const std::string& value) { return logError_NotImplemented; }
101  virtual oms_status_enu_t setUnit(const ComRef& cref, const std::string& value) { return logError_NotImplemented; }
103  virtual oms_status_enu_t stepUntil(double stopTime) { return oms_status_ok; }
104  virtual oms_status_enu_t newResources(const std::string& ssvFileName, const std::string& ssmFileName, bool externalResources) { return logError_NotImplemented; }
105  virtual oms_status_enu_t addResources(std::string& filename) { return logError_NotImplemented; }
106  virtual oms_status_enu_t deleteReferencesInSSD(const std::string& filename) {return logError_NotImplemented;}
107  virtual oms_status_enu_t deleteResourcesInSSP(const std::string& filename) {return logError_NotImplemented;}
108 
109  const ComRef& getCref() const { return cref; }
110  ComRef getFullCref() const;
111  Element* getElement() { return &element; }
112  Connector* getConnector(const ComRef& cref);
113  Connector** getConnectors() { return &connectors[0]; }
115  void getAllResources(std::vector<std::string>& resources) const { resources.push_back(path); }
116  const std::string& getPath() const { return path; }
117  const std::string& getTempDir() const { return tempDir; }
118  void setPath(const std::string& newPath) { this->path = newPath; }
119  void setTempDir(const std::string& tempDir) { this->tempDir = tempDir; }
120  oms_component_enu_t getType() const { return type; }
121  void fetchAllVars(bool enableOption) { fetchAllVars_ = enableOption; }
122  System* getParentSystem() const { return parentSystem; }
123  Model& getModel() const;
124  void setGeometry(const ssd::ElementGeometry& geometry) { element.setGeometry(&geometry); }
125 
126  oms_status_enu_t addTLMBus(const oms::ComRef& cref, oms_tlm_domain_t domain, const int dimensions, const oms_tlm_interpolation_t interpolation);
127 #if !defined(NO_TLM)
130 #endif
131  oms_status_enu_t addConnectorToTLMBus(const ComRef& busCref, const ComRef& connectorCref, const std::string type);
132  oms_status_enu_t deleteConnectorFromTLMBus(const ComRef& busCref, const ComRef& connectorCref);
133 
136 
137  oms_status_enu_t rename(const ComRef& newCref);
138 
139  virtual void getFilteredSignals(std::vector<Connector>& filteredSignals) const = 0;
140 
141  protected:
142  Component(const ComRef& cref, oms_component_enu_t type, System* parentSystem, const std::string& path);
143 
144  // stop the compiler generating methods copying the object
145  Component(Component const&);
146  Component& operator=(Component const&);
147 
148  virtual oms_status_enu_t renameValues(const ComRef& oldCref, const ComRef& newCref) { return oms_status_ok; }
149 
150  protected:
154  std::vector<Connector*> connectors;
155 #if !defined(NO_TLM)
156  std::vector<TLMBusConnector*> tlmbusconnectors;
157 #endif
158 
160  unsigned int clock_id;
161  bool fetchAllVars_ = false;
162 
163  private:
167  std::string path;
168  std::string tempDir;
169  };
170 }
171 
172 #endif
virtual oms_status_enu_t setValuesResources(std::vector< Values > &allResources)
Definition: Component.h:83
virtual oms_status_enu_t getString(const ComRef &cref, std::string &value)
Definition: Component.h:91
virtual void getFilteredSignals(std::vector< Connector > &filteredSignals) const =0
FMU info.
Definition: FMUInfo.h:45
std::string tempDir
unzipped fmu
Definition: Component.h:168
bool fetchAllVars_
Definition: Component.h:161
ComRef getFullCref() const
Definition: Component.cpp:118
const ComRef & getCref() const
Definition: Component.h:109
Definition: Types.h:44
Definition: ResultWriter.h:68
void setGeometry(const ssd::ElementGeometry &geometry)
Definition: Component.h:124
virtual void getFilteredUnitDefinitionsToSSD(std::map< std::string, std::map< std::string, std::string >> &unitDefinitions)
Definition: Component.h:68
Definition: Model.h:56
virtual oms_status_enu_t saveState()
Definition: Component.h:95
virtual oms_status_enu_t exportToSSD(pugi::xml_node &node, Snapshot &snapshot, std::string variantName) const =0
Definition: ElementGeometry.h:45
virtual oms_status_enu_t addSignalsToResults(const char *regex)=0
virtual oms_status_enu_t getRealOutputDerivative(const ComRef &cref, SignalDerivative &der)
Definition: Component.h:92
Definition: Clock.h:38
oms_status_enu_t deleteConnectorFromTLMBus(const ComRef &busCref, const ComRef &connectorCref)
Definition: Component.cpp:180
System * parentSystem
Definition: Component.h:164
void setGeometry(const oms::ssd::ElementGeometry *newGeometry)
Definition: Element.cpp:69
unsigned int clock_id
Definition: Component.h:160
void fmiLogger(jm_callbacks *c, jm_string module, jm_log_level_enu_t log_level, jm_string message)
Definition: Component.cpp:40
virtual bool getCanGetAndSetState()
Definition: Component.h:79
oms_status_enu_t addTLMBus(const oms::ComRef &cref, oms_tlm_domain_t domain, const int dimensions, const oms_tlm_interpolation_t interpolation)
Definition: Component.cpp:128
Definition: Variable.h:45
oms::TLMBusConnector * getTLMBusConnector(const oms::ComRef &cref)
Definition: Component.cpp:145
virtual oms_status_enu_t getDirectionalDerivative(const ComRef &unknownCref, const ComRef &knownCref, double &value)
Definition: Component.h:93
virtual oms_status_enu_t setReal(const ComRef &cref, double value)
Definition: Component.h:99
virtual oms_status_enu_t setBoolean(const ComRef &cref, bool value)
Definition: Component.h:96
oms_tlm_interpolation_t
Definition: Types.h:70
oms_status_enu_t deleteConnector(const ComRef &cref)
Definition: Component.cpp:202
virtual oms_status_enu_t updateOrDeleteStartValueInReplacedComponent(std::vector< std::string > &warningList)
Definition: Component.h:84
oms_status_enu_t rename(const ComRef &newCref)
rename submodules, e.g., fmu:s
Definition: Component.cpp:223
virtual oms_status_enu_t addResources(std::string &filename)
Definition: Component.h:105
virtual oms_status_enu_t setInteger(const ComRef &cref, int value)
Definition: Component.h:98
std::string path
resource file (fmu, mat)
Definition: Component.h:167
virtual ~Component()
Definition: Component.cpp:105
oms_status_enu_t
Definition: Types.h:43
TLMBusConnector.
Definition: TLMBusConnector.h:96
std::vector< Connector * > connectors
Definition: Component.h:154
virtual oms_status_enu_t reset()=0
virtual oms_status_enu_t getBoolean(const ComRef &cref, bool &value)
Definition: Component.h:88
virtual oms_status_enu_t setUnit(const ComRef &cref, const std::string &value)
Definition: Component.h:101
oms_component_enu_t type
Definition: Component.h:166
virtual oms_status_enu_t exportToSSMTemplate(pugi::xml_node &ssmNode)
Definition: Component.h:85
std::vector< TLMBusConnector * > tlmbusconnectors
Definition: Component.h:156
void fmi2logger(fmi2_component_environment_t env, fmi2_string_t instanceName, fmi2_status_t status, fmi2_string_t category, fmi2_string_t message,...)
Definition: Component.cpp:60
Definition: Snapshot.h:46
TLMBusConnector ** getTLMBusConnectors()
Definition: Component.h:129
Definition: Types.h:47
virtual oms_status_enu_t getReal(const ComRef &cref, double &value)
Definition: Component.h:90
virtual oms_status_enu_t setFaultInjection(const ComRef &signal, oms_fault_type_enu_t faultType, double faultValue)
Definition: Component.h:97
void fetchAllVars(bool enableOption)
Definition: Component.h:121
virtual Variable * getVariable(const ComRef &cref)=0
virtual oms_status_enu_t initialize()=0
virtual oms_status_enu_t updateSignals(ResultWriter &resultWriter)=0
ComRef - component reference.
Definition: ComRef.h:46
void getAllResources(std::vector< std::string > &resources) const
Definition: Component.h:115
DirectedGraph outputsGraph
Definition: Component.h:152
const DirectedGraph & getOutputsGraph()
Definition: Component.h:135
void setTempDir(const std::string &tempDir)
Definition: Component.h:119
Definition: Component.h:60
oms_component_enu_t
Definition: Types.h:128
const std::string & getTempDir() const
Definition: Component.h:117
Connector.
Definition: Connector.h:49
virtual oms_status_enu_t deleteStartValue(const ComRef &cref)
Definition: Component.h:81
virtual oms_status_enu_t deleteReferencesInSSD(const std::string &filename)
Definition: Component.h:106
virtual oms_status_enu_t registerSignalsForResultFile(ResultWriter &resultFile)=0
virtual oms_status_enu_t terminate()=0
virtual oms_status_enu_t setRealInputDerivative(const ComRef &cref, const SignalDerivative &der)
Definition: Component.h:102
virtual oms_status_enu_t restoreState()
Definition: Component.h:94
Definition: AlgLoop.h:44
oms_component_enu_t getType() const
Definition: Component.h:120
oms_fault_type_enu_t
Definition: Types.h:76
#define logError_NotImplemented
Definition: Logging.h:141
Element element
Definition: Component.h:153
virtual std::vector< Values > getValuesResources()
Definition: Component.h:82
virtual oms_status_enu_t exportToSSVTemplate(pugi::xml_node &ssvNode, Snapshot &snapshot)
Definition: Component.h:86
Component & operator=(Component const &)
not implemented
Clock clock
Definition: Component.h:159
const DirectedGraph & getInitialUnknownsGraph()
Definition: Component.h:134
oms_tlm_domain_t
Definition: Types.h:87
DirectedGraph initialUnknownsGraph
Definition: Component.h:151
ComRef cref
Definition: Component.h:165
virtual oms_status_enu_t getInteger(const ComRef &cref, int &value)
Definition: Component.h:89
virtual oms_status_enu_t removeSignalsFromResults(const char *regex)=0
const char * signal
Definition: Tags.cpp:38
oms_status_enu_t addConnectorToTLMBus(const ComRef &busCref, const ComRef &connectorCref, const std::string type)
Definition: Component.cpp:155
System * getParentSystem() const
Definition: Component.h:122
Element.
Definition: Element.h:49
virtual oms_status_enu_t exportToSSV(pugi::xml_node &ssvNode)
Definition: Component.h:67
Connector ** getConnectors()
Definition: Component.h:113
const std::string & getPath() const
Definition: Component.h:116
virtual oms_status_enu_t freeState()
Definition: Component.h:87
Component(const ComRef &cref, oms_component_enu_t type, System *parentSystem, const std::string &path)
Definition: Component.cpp:93
virtual const FMUInfo * getFMUInfo() const
Definition: Component.h:80
virtual oms_status_enu_t instantiate()=0
virtual oms_status_enu_t setString(const ComRef &cref, const std::string &value)
Definition: Component.h:100
void setPath(const std::string &newPath)
Definition: Component.h:118
Definition: System.h:69
Model & getModel() const
Definition: Component.cpp:123
virtual oms_status_enu_t stepUntil(double stopTime)
Definition: Component.h:103
Definition: DirectedGraph.h:65
Element * getElement()
Definition: Component.h:111
virtual oms_status_enu_t newResources(const std::string &ssvFileName, const std::string &ssmFileName, bool externalResources)
Definition: Component.h:104
Connector * getConnector(const ComRef &cref)
Definition: Component.cpp:193
virtual oms_status_enu_t renameValues(const ComRef &oldCref, const ComRef &newCref)
Definition: Component.h:148
virtual oms_status_enu_t deleteResourcesInSSP(const std::string &filename)
Definition: Component.h:107
Definition: SignalDerivative.h:41