OMSimulatorLib
The OMSimulator project is a FMI-based co-simulation environment.
Loading...
Searching...
No Matches
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 "OMSimulator/Types.h"
46#include "Values.h"
47
48#include <fmi4c.h>
49#include <pugixml.hpp>
50
51namespace oms
52{
53 class System;
54 class Model;
55 class Variable;
56
57 void fmi2logger(fmi2ComponentEnvironment env, fmi2String instanceName, fmi2Status status, fmi2String category, fmi2String message, ...);
58 void fmi3logger(fmi3InstanceEnvironment env, fmi3Status status, fmi3String category, fmi3String message);
60 {
61 public:
62 virtual ~Component();
63
64 virtual oms_status_enu_t addSignalsToResults(const char* regex) = 0;
65 virtual oms_status_enu_t exportToSSD(pugi::xml_node& node, Snapshot& snapshot, std::string variantName) const = 0;
66 virtual oms_status_enu_t exportToSSV(pugi::xml_node& ssvNode) { return logError_NotImplemented; }
67 virtual void getFilteredUnitDefinitionsToSSD(std::map<std::string, std::map<std::string, std::string>>& unitDefinitions) { return ; }
68 virtual void getFilteredEnumerationDefinitionsToSSD(std::map<std::string, std::map<std::string, std::string>>& enumerationDefinitions) { return ; }
69
70 virtual oms_status_enu_t initialize() = 0;
71 virtual oms_status_enu_t instantiate() = 0;
72 virtual oms_status_enu_t registerSignalsForResultFile(ResultWriter& resultFile) = 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 Values& getValues() {return values;}
84 virtual oms_status_enu_t setValuesResources(Values& values) { return oms_status_ok; }
85 virtual oms_status_enu_t updateOrDeleteStartValueInReplacedComponent(std::vector<std::string> &warningList) { return oms_status_ok; }
86 virtual oms_status_enu_t exportToSSMTemplate(pugi::xml_node& ssmNode) { return logError_NotImplemented; }
87 virtual oms_status_enu_t exportToSSVTemplate(pugi::xml_node& ssvNode, Snapshot& snapshot) { return logError_NotImplemented; }
88 virtual oms_status_enu_t freeState() { return logError_NotImplemented; }
89 virtual oms_status_enu_t getBoolean(const ComRef& cref, bool& value) { return logError_NotImplemented; }
90 virtual oms_status_enu_t getInteger(const ComRef& cref, int& value) { return logError_NotImplemented; }
91 virtual oms_status_enu_t getReal(const ComRef& cref, double& value) { return logError_NotImplemented; }
92 virtual oms_status_enu_t getString(const ComRef& cref, std::string& value) { return logError_NotImplemented; }
93 virtual oms_status_enu_t getRealOutputDerivative(const ComRef& cref, SignalDerivative& der) { return logError_NotImplemented; }
94 virtual oms_status_enu_t getDirectionalDerivative(const ComRef& unknownCref, const ComRef& knownCref, double& value) { return logError_NotImplemented; }
95 virtual oms_status_enu_t restoreState() { return logError_NotImplemented; }
96 virtual oms_status_enu_t saveState() { 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 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; }
102 virtual oms_status_enu_t setRealInputDerivative(const ComRef& cref, const SignalDerivative& der) { return logError_NotImplemented; }
103 virtual oms_status_enu_t stepUntil(double stopTime) { return logError_NotImplemented; }
104 virtual oms_status_enu_t setTime(double time) { return logError_NotImplemented; }
105 virtual oms_status_enu_t setExportName(const std::string & exportName) { return oms_status_ok; }
106 virtual oms_status_enu_t newResources(const std::string& ssvFileName, const std::string& ssmFileName, bool externalResources) { return logError_NotImplemented; }
107 virtual oms_status_enu_t addResources(std::string& filename) { return logError_NotImplemented; }
108 virtual oms_status_enu_t deleteReferencesInSSD(const std::string& filename) {return logError_NotImplemented;}
109 virtual oms_status_enu_t deleteResourcesInSSP(const std::string& filename) {return logError_NotImplemented;}
110
111 const ComRef& getCref() const { return cref; }
112 ComRef getFullCref() const;
113 Element* getElement() { return &element; }
116 oms_status_enu_t deleteConnector(const ComRef& cref);
117 void getAllResources(std::vector<std::string>& resources) const { resources.push_back(path); }
118 const std::string& getPath() const { return path; }
119 const std::string& getTempDir() const { return tempDir; }
120 void setPath(const std::string& newPath) { this->path = newPath; }
121 void setTempDir(const std::string& tempDir) { this->tempDir = tempDir; }
122 oms_component_enu_t getType() const { return type; }
124 Model& getModel() const;
125 void setGeometry(const ssd::ElementGeometry& geometry) { element.setGeometry(&geometry); }
126
129
130 oms_status_enu_t rename(const ComRef& newCref);
131
132 virtual void getFilteredSignals(std::vector<Connector>& filteredSignals) const = 0;
133
134 protected:
135 Component(const ComRef& cref, oms_component_enu_t type, System* parentSystem, const std::string& path);
136
137 // stop the compiler generating methods copying the object
140
141 virtual oms_status_enu_t renameValues(const ComRef& oldCref, const ComRef& newCref) { return oms_status_ok; }
142
143 protected:
147 std::vector<Connector*> connectors;
148
150 unsigned int clock_id;
151
152 private:
155 oms_component_enu_t type;
156 std::string path;
157 std::string tempDir;
159 };
160}
161
162#endif
#define logError_NotImplemented
Definition Logging.h:107
Definition Clock.h:39
ComRef - component reference.
Definition ComRef.h:47
Definition Component.h:60
oms_status_enu_t deleteConnector(const ComRef &cref)
Definition Component.cpp:158
std::string tempDir
unzipped fmu
Definition Component.h:157
virtual oms_status_enu_t setReal(const ComRef &cref, double value)
Definition Component.h:99
const ComRef & getCref() const
Definition Component.h:111
virtual oms_status_enu_t setExportName(const std::string &exportName)
Definition Component.h:105
Element element
Definition Component.h:146
virtual oms_status_enu_t freeState()
Definition Component.h:88
virtual oms_status_enu_t restoreState()
Definition Component.h:95
virtual oms_status_enu_t setString(const ComRef &cref, const std::string &value)
Definition Component.h:100
virtual oms_status_enu_t setValuesResources(Values &values)
Definition Component.h:84
std::string path
resource file (fmu, mat)
Definition Component.h:156
virtual std::vector< Values > getValuesResources()
Definition Component.h:82
virtual bool getCanGetAndSetState()
Definition Component.h:79
virtual oms_status_enu_t deleteStartValue(const ComRef &cref)
Definition Component.h:81
std::vector< Connector * > connectors
Definition Component.h:147
virtual Values & getValues()
Definition Component.h:83
ComRef cref
Definition Component.h:154
virtual oms_status_enu_t deleteResourcesInSSP(const std::string &filename)
Definition Component.h:109
virtual oms_status_enu_t getDirectionalDerivative(const ComRef &unknownCref, const ComRef &knownCref, double &value)
Definition Component.h:94
virtual void getFilteredUnitDefinitionsToSSD(std::map< std::string, std::map< std::string, std::string > > &unitDefinitions)
Definition Component.h:67
virtual oms_status_enu_t getInteger(const ComRef &cref, int &value)
Definition Component.h:90
void setTempDir(const std::string &tempDir)
Definition Component.h:121
virtual oms_status_enu_t setTime(double time)
Definition Component.h:104
virtual Variable * getVariable(const ComRef &cref)=0
void setPath(const std::string &newPath)
Definition Component.h:120
virtual oms_status_enu_t addResources(std::string &filename)
Definition Component.h:107
virtual oms_status_enu_t getBoolean(const ComRef &cref, bool &value)
Definition Component.h:89
virtual oms_status_enu_t removeSignalsFromResults(const char *regex)=0
virtual oms_status_enu_t getString(const ComRef &cref, std::string &value)
Definition Component.h:92
unsigned int clock_id
Definition Component.h:150
virtual oms_status_enu_t setInteger(const ComRef &cref, int value)
Definition Component.h:98
Clock clock
Definition Component.h:149
virtual oms_status_enu_t initialize()=0
oms_component_enu_t getType() const
Definition Component.h:122
virtual oms_status_enu_t newResources(const std::string &ssvFileName, const std::string &ssmFileName, bool externalResources)
Definition Component.h:106
Element * getElement()
Definition Component.h:113
const DirectedGraph & getOutputsGraph()
Definition Component.h:128
virtual oms_status_enu_t setUnit(const ComRef &cref, const std::string &value)
Definition Component.h:101
virtual oms_status_enu_t saveState()
Definition Component.h:96
virtual oms_status_enu_t exportToSSVTemplate(pugi::xml_node &ssvNode, Snapshot &snapshot)
Definition Component.h:87
const DirectedGraph & getInitialUnknownsGraph()
Definition Component.h:127
Connector * getConnector(const ComRef &cref)
Definition Component.cpp:149
virtual oms_status_enu_t terminate()=0
System * parentSystem
Definition Component.h:153
virtual oms_status_enu_t exportToSSMTemplate(pugi::xml_node &ssmNode)
Definition Component.h:86
Component & operator=(Component const &)
not implemented
Values values
Definition Component.h:158
virtual oms_status_enu_t stepUntil(double stopTime)
Definition Component.h:103
virtual oms_status_enu_t addSignalsToResults(const char *regex)=0
virtual oms_status_enu_t deleteReferencesInSSD(const std::string &filename)
Definition Component.h:108
virtual oms_status_enu_t registerSignalsForResultFile(ResultWriter &resultFile)=0
ComRef getFullCref() const
Definition Component.cpp:139
virtual oms_status_enu_t setRealInputDerivative(const ComRef &cref, const SignalDerivative &der)
Definition Component.h:102
virtual oms_status_enu_t renameValues(const ComRef &oldCref, const ComRef &newCref)
Definition Component.h:141
DirectedGraph initialUnknownsGraph
Definition Component.h:144
System * getParentSystem() const
Definition Component.h:123
virtual void getFilteredEnumerationDefinitionsToSSD(std::map< std::string, std::map< std::string, std::string > > &enumerationDefinitions)
Definition Component.h:68
virtual oms_status_enu_t exportToSSD(pugi::xml_node &node, Snapshot &snapshot, std::string variantName) const =0
virtual oms_status_enu_t getReal(const ComRef &cref, double &value)
Definition Component.h:91
virtual void getFilteredSignals(std::vector< Connector > &filteredSignals) const =0
virtual oms_status_enu_t reset()=0
DirectedGraph outputsGraph
Definition Component.h:145
oms_status_enu_t rename(const ComRef &newCref)
rename submodules, e.g., fmu:s
Definition Component.cpp:179
virtual oms_status_enu_t getRealOutputDerivative(const ComRef &cref, SignalDerivative &der)
Definition Component.h:93
virtual oms_status_enu_t setBoolean(const ComRef &cref, bool value)
Definition Component.h:97
virtual oms_status_enu_t instantiate()=0
virtual oms_status_enu_t updateOrDeleteStartValueInReplacedComponent(std::vector< std::string > &warningList)
Definition Component.h:85
void getAllResources(std::vector< std::string > &resources) const
Definition Component.h:117
Component(Component const &)
not implemented
Model & getModel() const
Definition Component.cpp:144
oms_component_enu_t type
Definition Component.h:155
virtual const FMUInfo * getFMUInfo() const
Definition Component.h:80
Connector ** getConnectors()
Definition Component.h:115
const std::string & getPath() const
Definition Component.h:118
void setGeometry(const ssd::ElementGeometry &geometry)
Definition Component.h:125
virtual oms_status_enu_t exportToSSV(pugi::xml_node &ssvNode)
Definition Component.h:66
const std::string & getTempDir() const
Definition Component.h:119
virtual oms_status_enu_t updateSignals(ResultWriter &resultWriter)=0
virtual ~Component()
Definition Component.cpp:132
Connector.
Definition Connector.h:50
Definition DirectedGraph.h:65
Element.
Definition Element.h:47
void setGeometry(const oms::ssd::ElementGeometry *newGeometry)
Definition Element.cpp:66
FMU info.
Definition FMUInfo.h:45
Definition Model.h:53
Definition ResultWriter.h:69
Definition SignalDerivative.h:42
Definition Snapshot.h:47
Definition System.h:62
Definition Values.h:46
Definition Variable.h:46
Definition ElementGeometry.h:46
Definition AlgLoop.h:45
void fmi3logger(fmi3InstanceEnvironment env, fmi3Status status, fmi3String category, fmi3String message)
Definition Component.cpp:92
void fmi2logger(fmi2ComponentEnvironment env, fmi2String instanceName, fmi2Status status, fmi2String category, fmi2String message,...)
Definition Component.cpp:42