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 "Types.h"
43 #include <fmilib.h>
44 #include <pugixml.hpp>
45 
46 namespace oms
47 {
48  class System;
49  class Model;
50 
51  void fmiLogger(jm_callbacks* c, jm_string module, jm_log_level_enu_t log_level, jm_string message);
52  void fmi2logger(fmi2_component_environment_t env, fmi2_string_t instanceName, fmi2_status_t status, fmi2_string_t category, fmi2_string_t message, ...);
53 
54  class Component
55  {
56  public:
57  virtual ~Component();
58 
59  const ComRef& getCref() const {return cref;}
60  ComRef getFullCref() const;
61  Element* getElement() {return &element;}
66  oms_status_enu_t getAllResources(std::vector<std::string>& resources) const {resources.push_back(path); return oms_status_ok;}
67  const std::string& getPath() const {return path;}
68  oms_component_enu_t getType() const {return type;}
69  virtual const FMUInfo* getFMUInfo() const {return NULL;}
70  void fetchAllVars() {fetchAllVars_ = true;}
71  System* getParentSystem() const {return parentSystem;}
72  Model* getModel() const;
73  void setGeometry(const ssd::ElementGeometry& geometry) {element.setGeometry(&geometry);}
74 
75  oms_status_enu_t addTLMBus(const oms::ComRef& cref, oms_tlm_domain_t domain, const int dimensions, const oms_tlm_interpolation_t interpolation);
76 #if !defined(NO_TLM)
79 #endif
80  oms_status_enu_t addConnectorToTLMBus(const ComRef& busCref, const ComRef& connectorCref, const std::string type);
81  oms_status_enu_t deleteConnectorFromTLMBus(const ComRef& busCref, const ComRef& connectorCref);
82 
83  virtual oms_status_enu_t exportToSSD(pugi::xml_node& node) const = 0;
84  virtual oms_status_enu_t instantiate() = 0;
85  virtual oms_status_enu_t initialize() = 0;
86  virtual oms_status_enu_t terminate() = 0;
87  virtual oms_status_enu_t reset() = 0;
88  virtual oms_status_enu_t stepUntil(double stopTime) {return oms_status_ok;}
89 
90 
93 
94  virtual oms_status_enu_t getBoolean(const ComRef& cref, bool& value) {return logError_NotImplemented;}
95  virtual oms_status_enu_t getInteger(const ComRef& cref, int& value) {return logError_NotImplemented;}
96  virtual oms_status_enu_t getReal(const ComRef& cref, double& value) {return logError_NotImplemented;}
97  virtual oms_status_enu_t setBoolean(const ComRef& cref, bool value) {return logError_NotImplemented;}
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 
102  virtual oms_status_enu_t updateSignals(ResultWriter& resultWriter) = 0;
103  virtual oms_status_enu_t addSignalsToResults(const char* regex) = 0;
104  virtual oms_status_enu_t removeSignalsFromResults(const char* regex) = 0;
105 
106  protected:
107  Component(const ComRef& cref, oms_component_enu_t type, System* parentSystem, const std::string& path);
108 
109  // stop the compiler generating methods copying the object
110  Component(Component const&);
111  Component& operator=(Component const&);
112 
116  std::vector<Connector*> connectors;
117 #if !defined(NO_TLM)
118  std::vector<TLMBusConnector*> tlmbusconnectors;
119 #endif
120 
122  unsigned int clock_id;
123  bool fetchAllVars_ = false;
124 
125  private:
129  std::string path;
130  };
131 }
132 
133 #endif
FMU info.
Definition: FMUInfo.h:45
bool fetchAllVars_
Definition: Component.h:123
ComRef getFullCref() const
Definition: Component.cpp:118
const ComRef & getCref() const
Definition: Component.h:59
Definition: Types.h:44
Definition: ResultWriter.h:67
void setGeometry(const ssd::ElementGeometry &geometry)
Definition: Component.h:73
Definition: Model.h:48
Definition: ElementGeometry.h:45
virtual oms_status_enu_t addSignalsToResults(const char *regex)=0
Definition: Clock.h:38
oms_status_enu_t deleteConnectorFromTLMBus(const ComRef &busCref, const ComRef &connectorCref)
Definition: Component.cpp:180
System * parentSystem
Definition: Component.h:126
void setGeometry(const oms::ssd::ElementGeometry *newGeometry)
Definition: Element.cpp:84
unsigned int clock_id
Definition: Component.h:122
void fmiLogger(jm_callbacks *c, jm_string module, jm_log_level_enu_t log_level, jm_string message)
Definition: Component.cpp:40
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
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:99
virtual oms_status_enu_t setBoolean(const ComRef &cref, bool value)
Definition: Component.h:97
oms_tlm_interpolation_t
Definition: Types.h:69
oms_status_enu_t deleteConnector(const ComRef &cref)
Definition: Component.cpp:204
virtual oms_status_enu_t setInteger(const ComRef &cref, int value)
Definition: Component.h:98
std::string path
Definition: Component.h:129
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:116
virtual oms_status_enu_t reset()=0
virtual oms_status_enu_t getBoolean(const ComRef &cref, bool &value)
Definition: Component.h:94
oms_component_enu_t type
Definition: Component.h:128
std::vector< TLMBusConnector * > tlmbusconnectors
Definition: Component.h:118
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:78
virtual oms_status_enu_t getReal(const ComRef &cref, double &value)
Definition: Component.h:96
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:114
const DirectedGraph & getOutputsGraph()
Definition: Component.h:92
Definition: Component.h:54
oms_component_enu_t
Definition: Types.h:108
Model * getModel() const
Definition: Component.cpp:123
Connector.
Definition: Connector.h:48
virtual oms_status_enu_t registerSignalsForResultFile(ResultWriter &resultFile)=0
virtual oms_status_enu_t terminate()=0
Definition: BusConnector.h:15
oms_status_enu_t deleteResources()
Definition: Component.cpp:222
oms_component_enu_t getType() const
Definition: Component.h:68
virtual oms_status_enu_t exportToSSD(pugi::xml_node &node) const =0
oms_status_enu_t getAllResources(std::vector< std::string > &resources) const
Definition: Component.h:66
#define logError_NotImplemented
Definition: Logging.h:142
Element element
Definition: Component.h:115
Component & operator=(Component const &)
not implemented
Clock clock
Definition: Component.h:121
const DirectedGraph & getInitialUnknownsGraph()
Definition: Component.h:91
oms_tlm_domain_t
Definition: Types.h:75
DirectedGraph initialUnknownsGraph
Definition: Component.h:113
ComRef cref
Definition: Component.h:127
virtual oms_status_enu_t getInteger(const ComRef &cref, int &value)
Definition: Component.h:95
virtual oms_status_enu_t removeSignalsFromResults(const char *regex)=0
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:71
Element.
Definition: Element.h:52
void fetchAllVars()
Definition: Component.h:70
Connector ** getConnectors()
Definition: Component.h:63
const std::string & getPath() const
Definition: Component.h:67
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:69
virtual oms_status_enu_t instantiate()=0
Definition: System.h:58
virtual oms_status_enu_t stepUntil(double stopTime)
Definition: Component.h:88
Definition: DirectedGraph.h:48
Element * getElement()
Definition: Component.h:61
Connector * getConnector(const ComRef &cref)
Definition: Component.cpp:193