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 "DirectedGraph.h"
38 #include "Element.h"
39 #include "FMUInfo.h"
40 #include "Logging.h"
41 #include "ResultWriter.h"
42 #include "SignalDerivative.h"
43 #include "Types.h"
44 #include <fmilib.h>
45 #include <pugixml.hpp>
46 
47 namespace oms
48 {
49  class System;
50  class Model;
51  class Variable;
52 
53  void fmiLogger(jm_callbacks* c, jm_string module, jm_log_level_enu_t log_level, jm_string message);
54  void fmi2logger(fmi2_component_environment_t env, fmi2_string_t instanceName, fmi2_status_t status, fmi2_string_t category, fmi2_string_t message, ...);
55 
56  class Component
57  {
58  public:
59  virtual ~Component();
60 
61  const ComRef& getCref() const {return cref;}
62  ComRef getFullCref() const;
63  Element* getElement() {return &element;}
67  oms_status_enu_t getAllResources(std::vector<std::string>& resources) const {resources.push_back(path); return oms_status_ok;}
68  const std::string& getPath() const {return path;}
69  const std::string& getTempDir() const {return tempDir;}
70  void setTempDir(const std::string& tempDir) {this->tempDir = tempDir;}
71  oms_component_enu_t getType() const {return type;}
72  virtual const FMUInfo* getFMUInfo() const {return NULL;}
73  void fetchAllVars(bool enableOption) {fetchAllVars_ = enableOption;}
74  System* getParentSystem() const {return parentSystem;}
75  Model* getModel() const;
76  void setGeometry(const ssd::ElementGeometry& geometry) {element.setGeometry(&geometry);}
77  virtual oms_status_enu_t setFaultInjection(const ComRef& signal, oms_fault_type_enu_t faultType, double faultValue) {return oms_status_error;}
78 
79  oms_status_enu_t addTLMBus(const oms::ComRef& cref, oms_tlm_domain_t domain, const int dimensions, const oms_tlm_interpolation_t interpolation);
80 #if !defined(NO_TLM)
83 #endif
84  oms_status_enu_t addConnectorToTLMBus(const ComRef& busCref, const ComRef& connectorCref, const std::string type);
85  oms_status_enu_t deleteConnectorFromTLMBus(const ComRef& busCref, const ComRef& connectorCref);
86 
87  virtual oms_status_enu_t exportToSSD(pugi::xml_node& node, pugi::xml_node& ssvNode) const = 0;
88  virtual oms_status_enu_t exportToSSVTemplate(pugi::xml_node& ssvNode) {return logError_NotImplemented;}
89  virtual oms_status_enu_t exportToSSMTemplate(pugi::xml_node& ssmNode) {return logError_NotImplemented;}
90  virtual oms_status_enu_t instantiate() = 0;
91  virtual oms_status_enu_t initialize() = 0;
92  virtual oms_status_enu_t terminate() = 0;
93  virtual oms_status_enu_t reset() = 0;
94  virtual oms_status_enu_t stepUntil(double stopTime) {return oms_status_ok;}
95 
98 
99  virtual oms_status_enu_t getBoolean(const ComRef& cref, bool& value) {return logError_NotImplemented;}
100  virtual oms_status_enu_t getInteger(const ComRef& cref, int& value) {return logError_NotImplemented;}
101  virtual oms_status_enu_t getReal(const ComRef& cref, double& value) {return logError_NotImplemented;}
102  virtual oms_status_enu_t setBoolean(const ComRef& cref, bool value) {return logError_NotImplemented;}
103  virtual oms_status_enu_t setInteger(const ComRef& cref, int value) {return logError_NotImplemented;}
104  virtual oms_status_enu_t setReal(const ComRef& cref, double value) {return logError_NotImplemented;}
105 
106  virtual oms_status_enu_t deleteStartValue(const ComRef& cref) {return oms_status_ok;}
107 
110 
111  virtual Variable* getVariable(const ComRef& cref) = 0;
112 
114  virtual oms_status_enu_t updateSignals(ResultWriter& resultWriter) = 0;
115  virtual oms_status_enu_t addSignalsToResults(const char* regex) = 0;
116  virtual oms_status_enu_t removeSignalsFromResults(const char* regex) = 0;
117 
118  virtual bool getCanGetAndSetState() {return false;}
122 
123  protected:
124  Component(const ComRef& cref, oms_component_enu_t type, System* parentSystem, const std::string& path);
125 
126  // stop the compiler generating methods copying the object
127  Component(Component const&);
128  Component& operator=(Component const&);
129 
133  std::vector<Connector*> connectors;
134 #if !defined(NO_TLM)
135  std::vector<TLMBusConnector*> tlmbusconnectors;
136 #endif
137 
139  unsigned int clock_id;
140  bool fetchAllVars_ = false;
141 
142  private:
146  std::string path;
147  std::string tempDir;
148  };
149 }
150 
151 #endif
FMU info.
Definition: FMUInfo.h:45
std::string tempDir
unzipped fmu
Definition: Component.h:147
bool fetchAllVars_
Definition: Component.h:140
ComRef getFullCref() const
Definition: Component.cpp:118
const ComRef & getCref() const
Definition: Component.h:61
Definition: Types.h:44
Definition: ResultWriter.h:68
void setGeometry(const ssd::ElementGeometry &geometry)
Definition: Component.h:76
Definition: Model.h:54
virtual oms_status_enu_t saveState()
Definition: Component.h:119
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:108
Definition: Clock.h:38
oms_status_enu_t deleteConnectorFromTLMBus(const ComRef &busCref, const ComRef &connectorCref)
Definition: Component.cpp:180
System * parentSystem
Definition: Component.h:143
void setGeometry(const oms::ssd::ElementGeometry *newGeometry)
Definition: Element.cpp:84
unsigned int clock_id
Definition: Component.h:139
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:118
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:44
oms::TLMBusConnector * getTLMBusConnector(const oms::ComRef &cref)
Definition: Component.cpp:145
virtual oms_status_enu_t setReal(const ComRef &cref, double value)
Definition: Component.h:104
virtual oms_status_enu_t setBoolean(const ComRef &cref, bool value)
Definition: Component.h:102
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 setInteger(const ComRef &cref, int value)
Definition: Component.h:103
std::string path
resource file (fmu, mat)
Definition: Component.h:146
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:133
virtual oms_status_enu_t reset()=0
virtual oms_status_enu_t getBoolean(const ComRef &cref, bool &value)
Definition: Component.h:99
oms_component_enu_t type
Definition: Component.h:145
virtual oms_status_enu_t exportToSSMTemplate(pugi::xml_node &ssmNode)
Definition: Component.h:89
std::vector< TLMBusConnector * > tlmbusconnectors
Definition: Component.h:135
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
TLMBusConnector ** getTLMBusConnectors()
Definition: Component.h:82
Definition: Types.h:47
virtual oms_status_enu_t getReal(const ComRef &cref, double &value)
Definition: Component.h:101
virtual oms_status_enu_t setFaultInjection(const ComRef &signal, oms_fault_type_enu_t faultType, double faultValue)
Definition: Component.h:77
void fetchAllVars(bool enableOption)
Definition: Component.h:73
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:43
DirectedGraph outputsGraph
Definition: Component.h:131
const DirectedGraph & getOutputsGraph()
Definition: Component.h:97
void setTempDir(const std::string &tempDir)
Definition: Component.h:70
Definition: Component.h:56
oms_component_enu_t
Definition: Types.h:128
Model * getModel() const
Definition: Component.cpp:123
const std::string & getTempDir() const
Definition: Component.h:69
Connector.
Definition: Connector.h:48
virtual oms_status_enu_t deleteStartValue(const ComRef &cref)
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:109
virtual oms_status_enu_t restoreState()
Definition: Component.h:121
Definition: AlgLoop.h:44
oms_component_enu_t getType() const
Definition: Component.h:71
oms_status_enu_t getAllResources(std::vector< std::string > &resources) const
Definition: Component.h:67
oms_fault_type_enu_t
Definition: Types.h:76
#define logError_NotImplemented
Definition: Logging.h:142
Element element
Definition: Component.h:132
virtual oms_status_enu_t exportToSSD(pugi::xml_node &node, pugi::xml_node &ssvNode) const =0
Component & operator=(Component const &)
not implemented
Clock clock
Definition: Component.h:138
const DirectedGraph & getInitialUnknownsGraph()
Definition: Component.h:96
oms_tlm_domain_t
Definition: Types.h:87
DirectedGraph initialUnknownsGraph
Definition: Component.h:130
ComRef cref
Definition: Component.h:144
virtual oms_status_enu_t getInteger(const ComRef &cref, int &value)
Definition: Component.h:100
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:74
Element.
Definition: Element.h:52
Connector ** getConnectors()
Definition: Component.h:65
const std::string & getPath() const
Definition: Component.h:68
virtual oms_status_enu_t freeState()
Definition: Component.h:120
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:72
virtual oms_status_enu_t instantiate()=0
Definition: System.h:67
virtual oms_status_enu_t stepUntil(double stopTime)
Definition: Component.h:94
Definition: DirectedGraph.h:55
virtual oms_status_enu_t exportToSSVTemplate(pugi::xml_node &ssvNode)
Definition: Component.h:88
Element * getElement()
Definition: Component.h:63
Connector * getConnector(const ComRef &cref)
Definition: Component.cpp:193
Definition: SignalDerivative.h:41