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 
63  oms_status_enu_t stepUntil(double stopTime);
64 
65  oms_status_enu_t connectToSockets(const oms::ComRef cref, std::string server);
66  void disconnectFromSockets(const oms::ComRef cref);
68 
70  oms_status_enu_t simulateSubSystem(ComRef cref, double stopTime);
72  void readFromSockets(SystemWC *system, double time, Component *component);
73  void sendValueToLogger(int varId, double time, double value);
74  int registerLogVariable();
75  void registerLogVariables(System* system, ResultWriter& resultFile);
76  void sendValuesToLogger(System* system, double time);
79 
80  protected:
81  SystemTLM(const ComRef& cref, Model* parentModel, System* parentSystem);
82 
83  // stop the compiler generating methods copying the object
84  SystemTLM(SystemTLM const& copy);
85  SystemTLM& operator=(SystemTLM const& copy);
86 
87  private:
88  double interpolate(double t1, double t2, double x1, double x2, double t)
89  {
90  if(t2 == t1)
91  return x2;
92  return x1 + (x2-x1)/(t2-t1)*(t-t1);
93  }
94 
95  void* model;
96  std::string address = "";
101 
102  std::vector<ComRef> connectedsubsystems;
103  std::map<System*, TLMPlugin*> plugins;
104  std::vector<ComRef> initializedsubsystems;
105  std::mutex pluginsMutex;
106  std::mutex setConnectedMutex;
108  std::map<System*, std::mutex> socketMutexes;
109  std::mutex logMutex;
110 
111  int numLogVars = 0;
112  std::map<int, std::vector<std::pair<double,double> > > logBuffer;
113  double nextLogTime;
114  double logTime;
115  double logStep = 1e-2;
116  std::map<TLMBusConnector*, int> busLogIds;
117  std::map<Connector*, int> connectorLogIds;
118  std::string singleModel;
119 
120  // simulation information
121  };
122 }
123 
124 #endif
double logStep
Definition: SystemTLM.h:115
Definition: ResultWriter.h:68
Definition: Model.h:56
oms_status_enu_t simulateSubSystem(ComRef cref, double stopTime)
Definition: SystemTLM.cpp:590
int actualMonitorPort
Definition: SystemTLM.h:100
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:455
int desiredMonitorPort
Definition: SystemTLM.h:98
std::mutex pluginsMutex
Definition: SystemTLM.h:105
std::string singleModel
Definition: SystemTLM.h:118
oms_status_enu_t stepUntil(double stopTime)
Definition: SystemTLM.cpp:287
oms_status_enu_t instantiate()
Definition: SystemTLM.cpp:142
oms_status_enu_t registerSignalsForResultFile(ResultWriter &resultFile)
Definition: SystemTLM.cpp:861
oms_status_enu_t initializeSubSystem(ComRef cref)
Definition: SystemTLM.cpp:576
Definition: SystemWC.h:48
int registerLogVariable()
Definition: SystemTLM.cpp:927
oms_status_enu_t initialize()
Definition: SystemTLM.cpp:150
std::vector< ComRef > initializedsubsystems
Definition: SystemTLM.h:104
std::mutex setConnectedMutex
Definition: SystemTLM.h:106
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:241
oms_status_enu_t setPositionAndOrientation(const ComRef &cref, std::vector< double > x, std::vector< double > A)
Definition: SystemTLM.cpp:435
int desiredManagerPort
Definition: SystemTLM.h:97
double nextLogTime
Definition: SystemTLM.h:113
double logTime
Definition: SystemTLM.h:114
std::map< Connector *, int > connectorLogIds
Definition: SystemTLM.h:117
double interpolate(double t1, double t2, double x1, double x2, double t)
Definition: SystemTLM.h:88
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:691
oms_status_enu_t updateInitialValues(const oms::ComRef cref)
Definition: SystemTLM.cpp:495
std::map< int, std::vector< std::pair< double, double > > > logBuffer
Definition: SystemTLM.h:112
int numLogVars
Definition: SystemTLM.h:111
oms_status_enu_t connectToSockets(const oms::ComRef cref, std::string server)
Definition: SystemTLM.cpp:352
~SystemTLM()
Definition: SystemTLM.cpp:58
ComRef - component reference.
Definition: ComRef.h:46
std::string address
Definition: SystemTLM.h:96
std::map< System *, std::mutex > socketMutexes
Definition: SystemTLM.h:108
Definition: Component.h:60
void registerLogVariables(System *system, ResultWriter &resultFile)
Definition: SystemTLM.cpp:932
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:424
static System * NewSystem(const oms::ComRef &cref, Model *parentModel, System *parentSystem)
Definition: SystemTLM.cpp:63
int actualManagerPort
Definition: SystemTLM.h:99
oms_status_enu_t updateSignals(ResultWriter &resultFile)
Definition: SystemTLM.cpp:980
Definition: AlgLoop.h:44
void * model
Definition: SystemTLM.h:95
void disconnectFromSockets(const oms::ComRef cref)
Definition: SystemTLM.cpp:409
std::vector< ComRef > connectedsubsystems
Definition: SystemTLM.h:102
double time
Definition: System.h:220
oms_status_enu_t doStep()
Definition: SystemTLM.cpp:282
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:243
std::mutex setInitializedMutex
Definition: SystemTLM.h:107
void sendValueToLogger(int varId, double time, double value)
Definition: SystemTLM.cpp:839
const char * system
Definition: Tags.cpp:57
Definition: SystemTLM.h:45
std::mutex logMutex
Definition: SystemTLM.h:109
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:597
const char * component
Definition: Tags.cpp:45
Definition: System.h:69
System * parentSystem
Definition: System.h:244
std::map< System *, TLMPlugin * > plugins
Definition: SystemTLM.h:103
void sendValuesToLogger(System *system, double time)
Definition: SystemTLM.cpp:955
std::map< TLMBusConnector *, int > busLogIds
Definition: SystemTLM.h:116