OMSimulatorLib
The OMSimulator project is a FMI-based co-simulation environment that supports ordinary (i.e., non-delayed) and TLM connections.
SystemTLM.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_SYSTEM_TLM_H_
33 #define _OMS_SYSTEM_TLM_H_
34 
35 #include "ComRef.h"
36 #include "System.h"
37 #include "Types.h"
38 #include "../../OMTLMSimulator/common/Plugin/PluginImplementer.h"
39 
40 namespace oms
41 {
42  class Model;
43  class SystemWC;
44 
45  class SystemTLM : public System
46  {
47  public:
48  ~SystemTLM();
49 
51  oms_status_enu_t exportToSSD_SimulationInformation(pugi::xml_node& node) const;
52  oms_status_enu_t importFromSSD_SimulationInformation(const pugi::xml_node& node, const std::string& sspVersion);
54  oms_status_enu_t setSocketData(const std::string& address, int managerPort, int monitorPort);
55  oms_status_enu_t setPositionAndOrientation(const ComRef &cref, std::vector<double> x, std::vector<double> A);
56  oms_status_enu_t fetchInterfaces(const ComRef &cref, std::vector<std::string> &name, std::vector<int> &dimensions, std::vector<std::string> &domain);
57 
62  oms_status_enu_t stepUntil(double stopTime, void (*cb)(const char* ident, double time, oms_status_enu_t status));
63 
64  oms_status_enu_t connectToSockets(const oms::ComRef cref, std::string server);
65  void disconnectFromSockets(const oms::ComRef cref);
67 
69  oms_status_enu_t simulateSubSystem(ComRef cref, double stopTime);
71  void readFromSockets(SystemWC *system, double time, Component *component);
72  void sendValueToLogger(int varId, double time, double value);
73  int registerLogVariable();
74  void registerLogVariables(System* system, ResultWriter& resultFile);
75  void sendValuesToLogger(System* system, double time);
78 
79  protected:
80  SystemTLM(const ComRef& cref, Model* parentModel, System* parentSystem);
81 
82  // stop the compiler generating methods copying the object
83  SystemTLM(SystemTLM const& copy);
84  SystemTLM& operator=(SystemTLM const& copy);
85 
86  private:
87  double interpolate(double t1, double t2, double x1, double x2, double t)
88  {
89  if(t2 == t1)
90  return x2;
91  return x1 + (x2-x1)/(t2-t1)*(t-t1);
92  }
93 
94  void* model;
95  std::string address = "";
100 
101  std::vector<ComRef> connectedsubsystems;
102  std::map<System*, TLMPlugin*> plugins;
103  std::vector<ComRef> initializedsubsystems;
104  std::mutex pluginsMutex;
105  std::mutex setConnectedMutex;
107  std::map<System*, std::mutex> socketMutexes;
108  std::mutex logMutex;
109 
110  int numLogVars = 0;
111  std::map<int, std::vector<std::pair<double,double> > > logBuffer;
112  double nextLogTime;
113  double logTime;
114  double logStep = 1e-2;
115  std::map<TLMBusConnector*, int> busLogIds;
116  std::map<Connector*, int> connectorLogIds;
117  std::string singleModel;
118 
119  // simulation information
120  };
121 }
122 
123 #endif
double logStep
Definition: SystemTLM.h:114
Definition: ResultWriter.h:68
Definition: Model.h:54
oms_status_enu_t simulateSubSystem(ComRef cref, double stopTime)
Definition: SystemTLM.cpp:585
int actualMonitorPort
Definition: SystemTLM.h:99
oms_status_enu_t fetchInterfaces(const ComRef &cref, std::vector< std::string > &name, std::vector< int > &dimensions, std::vector< std::string > &domain)
Definition: SystemTLM.cpp:450
int desiredMonitorPort
Definition: SystemTLM.h:97
std::mutex pluginsMutex
Definition: SystemTLM.h:104
std::string singleModel
Definition: SystemTLM.h:117
oms_status_enu_t instantiate()
Definition: SystemTLM.cpp:142
oms_status_enu_t registerSignalsForResultFile(ResultWriter &resultFile)
Definition: SystemTLM.cpp:856
oms_status_enu_t initializeSubSystem(ComRef cref)
Definition: SystemTLM.cpp:571
Definition: SystemWC.h:47
int registerLogVariable()
Definition: SystemTLM.cpp:922
oms_status_enu_t initialize()
Definition: SystemTLM.cpp:150
std::vector< ComRef > initializedsubsystems
Definition: SystemTLM.h:103
std::mutex setConnectedMutex
Definition: SystemTLM.h:105
SystemTLM(const ComRef &cref, Model *parentModel, System *parentSystem)
Definition: SystemTLM.cpp:45
oms_status_enu_t
Definition: Types.h:43
ComRef cref
Definition: System.h:207
oms_status_enu_t setPositionAndOrientation(const ComRef &cref, std::vector< double > x, std::vector< double > A)
Definition: SystemTLM.cpp:430
int desiredManagerPort
Definition: SystemTLM.h:96
double nextLogTime
Definition: SystemTLM.h:112
double logTime
Definition: SystemTLM.h:113
std::map< Connector *, int > connectorLogIds
Definition: SystemTLM.h:116
double interpolate(double t1, double t2, double x1, double x2, double t)
Definition: SystemTLM.h:87
oms_status_enu_t importFromSSD_SimulationInformationHelper(const pugi::xml_node &node)
Definition: SystemTLM.cpp:125
void readFromSockets(SystemWC *system, double time, Component *component)
Definition: SystemTLM.cpp:686
oms_status_enu_t updateInitialValues(const oms::ComRef cref)
Definition: SystemTLM.cpp:490
std::map< int, std::vector< std::pair< double, double > > > logBuffer
Definition: SystemTLM.h:111
int numLogVars
Definition: SystemTLM.h:110
oms_status_enu_t connectToSockets(const oms::ComRef cref, std::string server)
Definition: SystemTLM.cpp:347
~SystemTLM()
Definition: SystemTLM.cpp:58
ComRef - component reference.
Definition: ComRef.h:43
std::string address
Definition: SystemTLM.h:95
std::map< System *, std::mutex > socketMutexes
Definition: SystemTLM.h:107
Definition: Component.h:56
void registerLogVariables(System *system, ResultWriter &resultFile)
Definition: SystemTLM.cpp:927
oms_status_enu_t reset()
Definition: SystemTLM.cpp:274
oms_status_enu_t setSocketData(const std::string &address, int managerPort, int monitorPort)
Definition: SystemTLM.cpp:419
static System * NewSystem(const oms::ComRef &cref, Model *parentModel, System *parentSystem)
Definition: SystemTLM.cpp:63
int actualManagerPort
Definition: SystemTLM.h:98
oms_status_enu_t updateSignals(ResultWriter &resultFile)
Definition: SystemTLM.cpp:975
Definition: AlgLoop.h:44
void * model
Definition: SystemTLM.h:94
void disconnectFromSockets(const oms::ComRef cref)
Definition: SystemTLM.cpp:404
oms_status_enu_t stepUntil(double stopTime, void(*cb)(const char *ident, double time, oms_status_enu_t status))
Definition: SystemTLM.cpp:282
std::vector< ComRef > connectedsubsystems
Definition: SystemTLM.h:101
double time
Definition: System.h:178
oms_status_enu_t exportToSSD_SimulationInformation(pugi::xml_node &node) const
Definition: SystemTLM.cpp:81
oms_status_enu_t importFromSSD_SimulationInformation(const pugi::xml_node &node, const std::string &sspVersion)
Definition: SystemTLM.cpp:95
Model * parentModel
Definition: System.h:209
std::mutex setInitializedMutex
Definition: SystemTLM.h:106
void sendValueToLogger(int varId, double time, double value)
Definition: SystemTLM.cpp:834
const char * system
Definition: Tags.cpp:57
Definition: SystemTLM.h:45
std::mutex logMutex
Definition: SystemTLM.h:108
oms_status_enu_t terminate()
Definition: SystemTLM.cpp:266
SystemTLM & operator=(SystemTLM const &copy)
not implemented
void writeToSockets(oms::SystemWC *system, double time, Component *component)
Definition: SystemTLM.cpp:592
const char * component
Definition: Tags.cpp:45
Definition: System.h:67
System * parentSystem
Definition: System.h:210
std::map< System *, TLMPlugin * > plugins
Definition: SystemTLM.h:102
void sendValuesToLogger(System *system, double time)
Definition: SystemTLM.cpp:950
std::map< TLMBusConnector *, int > busLogIds
Definition: SystemTLM.h:115