OMSimulatorLib
The OMSimulator project is a FMI-based co-simulation environment.
Loading...
Searching...
No Matches
ComponentFMU3CS.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_3_CS_H_
33#define _OMS_COMPONENT_FMU_3_CS_H_
34
35#include "Component.h"
36#include "ComRef.h"
37#include "ResultWriter.h"
38#include "Snapshot.h"
39#include "Values.h"
40#include "Variable.h"
41
42#include <fmi4c.h>
43#include <map>
44#include <pugixml.hpp>
45#include <string>
46#include <unordered_map>
47#include <vector>
48#include <cmath>
49
50namespace oms
51{
52 class System;
53
55 {
56 public:
58
59 static Component* NewComponent(const ComRef& cref, System* parentSystem, const std::string& fmuPath, std::string replaceComponent = "");
60 static Component* NewComponent(const pugi::xml_node& node, System* parentSystem, const std::string& sspVersion, const Snapshot& snapshot, std::string variantName);
61 const FMUInfo* getFMUInfo() const {return &(this->fmuInfo);}
62
63 oms_status_enu_t exportToSSD(pugi::xml_node& node, Snapshot& snapshot, std::string variantName) const;
64 oms_status_enu_t exportToSSV(pugi::xml_node& ssvNode);
65 void getFilteredUnitDefinitionsToSSD(std::map<std::string, std::map<std::string, std::string>>& unitDefinitions);
66 void getFilteredEnumerationDefinitionsToSSD(std::map<std::string, std::map<std::string, std::string>>& enumerationDefinitions);
67 oms_status_enu_t exportToSSVTemplate(pugi::xml_node& ssvNode, Snapshot& snapshot);
68 oms_status_enu_t exportToSSMTemplate(pugi::xml_node& ssmNode);
69 oms_status_enu_t instantiate();
70 oms_status_enu_t initialize();
71 oms_status_enu_t terminate();
72 oms_status_enu_t reset();
73
74 oms_status_enu_t stepUntil(double stopTime);
75
77 oms_status_enu_t initializeDependencyGraph_outputs();
78
80
81 Values& getValues() { return values; }
82 oms_status_enu_t setValuesResources(Values& values);
83
84 oms_status_enu_t getBoolean(const ComRef& cref, bool& value);
85 oms_status_enu_t getBoolean(const fmi3ValueReference& vr, bool& value);
86 oms_status_enu_t getInteger(const ComRef& cref, int& value);
87 oms_status_enu_t getInteger(const fmi3ValueReference& vr, int& value, oms_signal_numeric_type_enu_t numericType);
88 oms_status_enu_t getReal(const ComRef& cref, double& value);
89 oms_status_enu_t getReal(const fmi3ValueReference& vr, double& value, oms_signal_numeric_type_enu_t numericType);
90 oms_status_enu_t getString(const ComRef& cref, std::string& value);
91 oms_status_enu_t getString(const fmi3ValueReference& vr, std::string& value);
92 oms_status_enu_t setBoolean(const ComRef& cref, bool value);
93 oms_status_enu_t setInteger(const ComRef& cref, int value);
94 oms_status_enu_t setReal(const ComRef& cref, double value);
95 oms_status_enu_t setString(const ComRef& cref, const std::string& value);
96 oms_status_enu_t setUnit(const ComRef& cref, const std::string& value);
97
98 oms_status_enu_t getDirectionalDerivative(const ComRef& unknownCref, const ComRef& knownCref, double& value);
99 oms_status_enu_t getDirectionalDerivativeHeper(const int unknownIndex, const int knownindex, const std::vector<int>& dependencyList, double& value);
100
101 oms_status_enu_t deleteStartValue(const ComRef& cref);
102 oms_status_enu_t updateOrDeleteStartValueInReplacedComponent(std::vector<std::string>& warningList);
103
104 oms_status_enu_t setFmuTime(double time) {this->time = time; return oms_status_ok;}
105 fmiHandle* getFMU() {return fmu;}
106 std::vector<Variable> getAllVariables() {return allVariables;}
107
108 oms_status_enu_t getRealOutputDerivative(const ComRef& cref, SignalDerivative& der);
109 oms_status_enu_t setRealInputDerivative(const ComRef& cref, const SignalDerivative& der);
110
111 oms_status_enu_t registerSignalsForResultFile(ResultWriter& resultFile);
112 oms_status_enu_t updateSignals(ResultWriter& resultWriter);
113 oms_status_enu_t addSignalsToResults(const char* regex);
114 oms_status_enu_t removeSignalsFromResults(const char* regex);
115
117 oms_status_enu_t saveState();
118 oms_status_enu_t freeState();
119 oms_status_enu_t restoreState();
120
121 void getFilteredSignals(std::vector<Connector>& filteredSignals) const;
122
123 oms_status_enu_t newResources(const std::string& ssvFilename, const std::string& ssmFilename, bool externalResources);
124 oms_status_enu_t setResourcesHelper1(Values value);
125 oms_status_enu_t setResourcesHelper2(Values value);
126 oms_status_enu_t setExportName(const std::string & exportName);
127 std::string getExportName() const { return this->exportName; }
128 oms_status_enu_t deleteReferencesInSSD(const std::string& filename);
129 oms_status_enu_t deleteResourcesInSSP(const std::string& filename);
131
132 protected:
133 ComponentFMU3CS(const ComRef& cref, System* parentSystem, const std::string& fmuPath);
134
135 // stop the compiler generating methods copying the object
138
139 oms_status_enu_t renameValues(const ComRef& oldCref, const ComRef& newCref);
140
141 void dumpInitialUnknowns();
142
143 private:
144 fmi3LogMessageCallback omsfmi3logger;
145 fmiHandle *fmu = NULL;
147
148 std::vector<Variable> allVariables;
149 std::vector<unsigned int> calculatedParameters;
150 std::vector<unsigned int> derivatives;
151 std::vector<unsigned int> inputs;
152 std::vector<unsigned int> outputs;
153 std::vector<unsigned int> parameters;
154 std::vector<bool> exportVariables;
155 std::string exportName;
156
158
159 std::unordered_map<unsigned int /*result file var ID*/, unsigned int /*allVariables ID*/> resultFileMapping;
160
161 double time;
162 fmi3FMUState fmuState = NULL;
164
166 };
167}
168
169#endif
ComRef - component reference.
Definition ComRef.h:47
Definition ComponentFMU3CS.h:55
~ComponentFMU3CS()
Definition ComponentFMU3CS.cpp:55
fmiHandle * getFMU()
Definition ComponentFMU3CS.h:105
oms_status_enu_t getDirectionalDerivative(const ComRef &unknownCref, const ComRef &knownCref, double &value)
Definition ComponentFMU3CS.cpp:1372
Values & getValues()
Definition ComponentFMU3CS.h:81
oms_status_enu_t setString(const ComRef &cref, const std::string &value)
Definition ComponentFMU3CS.cpp:1782
oms_status_enu_t newResources(const std::string &ssvFilename, const std::string &ssmFilename, bool externalResources)
Definition ComponentFMU3CS.cpp:775
fmi3FMUState fmuState
Definition ComponentFMU3CS.h:162
double fmuStateTime
Definition ComponentFMU3CS.h:163
oms_status_enu_t getInteger(const ComRef &cref, int &value)
Definition ComponentFMU3CS.cpp:1075
std::vector< Variable > getAllVariables()
Definition ComponentFMU3CS.h:106
oms_status_enu_t setExportName(const std::string &exportName)
Definition ComponentFMU3CS.cpp:614
oms_status_enu_t initializeDependencyGraph_initialUnknowns()
Definition ComponentFMU3CS.cpp:461
std::vector< bool > exportVariables
Definition ComponentFMU3CS.h:154
std::vector< unsigned int > inputs
Definition ComponentFMU3CS.h:151
std::vector< Variable > allVariables
Definition ComponentFMU3CS.h:148
oms_status_enu_t exportToSSMTemplate(pugi::xml_node &ssmNode)
Definition ComponentFMU3CS.cpp:438
void getFilteredUnitDefinitionsToSSD(std::map< std::string, std::map< std::string, std::string > > &unitDefinitions)
Definition ComponentFMU3CS.cpp:399
fmiHandle * fmu
Definition ComponentFMU3CS.h:145
oms_status_enu_t setUnit(const ComRef &cref, const std::string &value)
Definition ComponentFMU3CS.cpp:1837
fmi3LogMessageCallback omsfmi3logger
Definition ComponentFMU3CS.h:144
void dumpInitialUnknowns()
Definition ComponentFMU3CS.cpp:444
oms_status_enu_t updateOrDeleteStartValueInReplacedComponent(std::vector< std::string > &warningList)
Definition ComponentFMU3CS.cpp:1916
oms_status_enu_t getBoolean(const ComRef &cref, bool &value)
Definition ComponentFMU3CS.cpp:916
oms_status_enu_t registerSignalsForResultFile(ResultWriter &resultFile)
Definition ComponentFMU3CS.cpp:1942
oms_status_enu_t setReal(const ComRef &cref, double value)
Definition ComponentFMU3CS.cpp:1708
oms_status_enu_t reset()
Definition ComponentFMU3CS.cpp:860
oms_status_enu_t getString(const ComRef &cref, std::string &value)
Definition ComponentFMU3CS.cpp:1292
oms::ComRef getValidCref(ComRef cref)
Definition ComponentFMU3CS.cpp:765
ComponentFMU3CS & operator=(ComponentFMU3CS const &copy)
not implemented
void copyModelDescriptionUnit(Values &value)
oms_status_enu_t getDirectionalDerivativeHeper(const int unknownIndex, const int knownindex, const std::vector< int > &dependencyList, double &value)
Definition ComponentFMU3CS.cpp:1461
oms_status_enu_t deleteReferencesInSSD(const std::string &filename)
Definition ComponentFMU3CS.cpp:817
oms_status_enu_t freeState()
Definition ComponentFMU3CS.cpp:2113
oms_status_enu_t setFmuTime(double time)
Definition ComponentFMU3CS.h:104
const FMUInfo * getFMUInfo() const
Definition ComponentFMU3CS.h:61
oms_status_enu_t exportToSSV(pugi::xml_node &ssvNode)
Definition ComponentFMU3CS.cpp:426
std::string exportName
export name for the component, used in the result file
Definition ComponentFMU3CS.h:155
oms_status_enu_t instantiate()
Definition ComponentFMU3CS.cpp:627
oms_status_enu_t initializeDependencyGraph_outputs()
Definition ComponentFMU3CS.cpp:564
oms_status_enu_t terminate()
Definition ComponentFMU3CS.cpp:848
oms_status_enu_t exportToSSD(pugi::xml_node &node, Snapshot &snapshot, std::string variantName) const
Definition ComponentFMU3CS.cpp:375
oms_status_enu_t setResourcesHelper1(Values value)
Definition ComponentFMU3CS.cpp:684
ComponentFMU3CS(ComponentFMU3CS const &copy)
not implemented
oms_status_enu_t getReal(const ComRef &cref, double &value)
Definition ComponentFMU3CS.cpp:1199
oms_status_enu_t setResourcesHelper2(Values value)
Definition ComponentFMU3CS.cpp:708
oms_status_enu_t stepUntil(double stopTime)
Definition ComponentFMU3CS.cpp:877
std::vector< unsigned int > outputs
Definition ComponentFMU3CS.h:152
oms_status_enu_t saveState()
Definition ComponentFMU3CS.cpp:2104
oms_status_enu_t restoreState()
Definition ComponentFMU3CS.cpp:2125
oms_status_enu_t updateSignals(ResultWriter &resultWriter)
Definition ComponentFMU3CS.cpp:2010
void getFilteredSignals(std::vector< Connector > &filteredSignals) const
Definition ComponentFMU3CS.cpp:2134
FMUInfo fmuInfo
Definition ComponentFMU3CS.h:146
std::vector< unsigned int > calculatedParameters
Definition ComponentFMU3CS.h:149
std::vector< unsigned int > parameters
Definition ComponentFMU3CS.h:153
Variable * getVariable(const ComRef &cref)
Definition ComponentFMU3CS.cpp:1155
oms_status_enu_t setInteger(const ComRef &cref, int value)
Definition ComponentFMU3CS.cpp:1590
std::string getExportName() const
Definition ComponentFMU3CS.h:127
oms_status_enu_t removeSignalsFromResults(const char *regex)
Definition ComponentFMU3CS.cpp:2077
double time
Definition ComponentFMU3CS.h:161
oms_status_enu_t initialize()
Definition ComponentFMU3CS.cpp:833
oms_status_enu_t deleteStartValue(const ComRef &cref)
Definition ComponentFMU3CS.cpp:1878
oms_status_enu_t getRealOutputDerivative(const ComRef &cref, SignalDerivative &der)
Definition ComponentFMU3CS.cpp:1489
oms_status_enu_t setBoolean(const ComRef &cref, bool value)
Definition ComponentFMU3CS.cpp:1539
oms_status_enu_t exportToSSVTemplate(pugi::xml_node &ssvNode, Snapshot &snapshot)
Definition ComponentFMU3CS.cpp:431
oms_status_enu_t setRealInputDerivative(const ComRef &cref, const SignalDerivative &der)
Definition ComponentFMU3CS.cpp:1510
Values values
start values defined before instantiating the FMU and external inputs defined after initialization
Definition ComponentFMU3CS.h:157
bool getCanGetAndSetState()
Definition ComponentFMU3CS.h:116
static Component * NewComponent(const ComRef &cref, System *parentSystem, const std::string &fmuPath, std::string replaceComponent="")
Definition ComponentFMU3CS.cpp:63
oms_status_enu_t deleteResourcesInSSP(const std::string &filename)
Definition ComponentFMU3CS.cpp:825
oms_status_enu_t addSignalsToResults(const char *regex)
Definition ComponentFMU3CS.cpp:2050
oms_status_enu_t setValuesResources(Values &values)
Definition ComponentFMU3CS.cpp:1903
std::vector< unsigned int > derivatives
Definition ComponentFMU3CS.h:150
oms_status_enu_t renameValues(const ComRef &oldCref, const ComRef &newCref)
Definition ComponentFMU3CS.cpp:2143
void getFilteredEnumerationDefinitionsToSSD(std::map< std::string, std::map< std::string, std::string > > &enumerationDefinitions)
Definition ComponentFMU3CS.cpp:421
std::unordered_map< unsigned int, unsigned int > resultFileMapping
Definition ComponentFMU3CS.h:159
Definition Component.h:60
ComRef cref
Definition Component.h:154
System * parentSystem
Definition Component.h:153
FMU info.
Definition FMUInfo.h:45
bool getCanGetAndSetFMUstate() const
Definition FMUInfo.h:56
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 AlgLoop.h:45