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);
53  oms_status_enu_t setSocketData(const std::string& address, int managerPort, int monitorPort);
54  oms_status_enu_t setPositionAndOrientation(const ComRef &cref, std::vector<double> x, std::vector<double> A);
55 
60  oms_status_enu_t stepUntil(double stopTime, void (*cb)(const char* ident, double time, oms_status_enu_t status));
61 
62  oms_status_enu_t connectToSockets(const oms::ComRef cref, std::string server);
63  void disconnectFromSockets(const oms::ComRef cref);
65 
67  oms_status_enu_t simulateSubSystem(ComRef cref, double stopTime);
68  void writeToSockets(oms::SystemWC *system, double time, Component *component);
69  void readFromSockets(SystemWC *system, double time, Component *component);
70  void sendValueToLogger(int varId, double time, double value);
71  int registerLogVariable();
72  void registerLogVariables(System* system, ResultWriter& resultFile);
73  void sendValuesToLogger(System* system, double time);
76 
77  protected:
78  SystemTLM(const ComRef& cref, Model* parentModel, System* parentSystem);
79 
80  // stop the compiler generating methods copying the object
81  SystemTLM(SystemTLM const& copy);
82  SystemTLM& operator=(SystemTLM const& copy);
83 
84  private:
85  double interpolate(double t1, double t2, double x1, double x2, double t)
86  {
87  if(t2 == t1)
88  return x2;
89  return x1 + (x2-x1)/(t2-t1)*(t-t1);
90  }
91 
92  void* model;
93  std::string address = "";
98 
99  std::vector<ComRef> connectedsubsystems;
100  std::map<System*, TLMPlugin*> plugins;
101  std::vector<ComRef> initializedsubsystems;
102  std::mutex pluginsMutex;
103  std::mutex setConnectedMutex;
105  std::map<System*, std::mutex> socketMutexes;
106  std::mutex logMutex;
107 
108  int numLogVars = 0;
109  std::map<int, std::vector<std::pair<double,double> > > logBuffer;
110  double nextLogTime;
111  double logTime;
112  double logStep = 1e-2;
113  std::map<TLMBusConnector*, int> busLogIds;
114  std::map<Connector*, int> connectorLogIds;
115 
116  // simulation information
117  };
118 }
119 
120 #endif
double logStep
Definition: SystemTLM.h:112
Definition: ResultWriter.h:67
Definition: Model.h:48
oms_status_enu_t simulateSubSystem(ComRef cref, double stopTime)
Definition: SystemTLM.cpp:519
int actualMonitorPort
Definition: SystemTLM.h:97
int desiredMonitorPort
Definition: SystemTLM.h:95
std::mutex pluginsMutex
Definition: SystemTLM.h:102
oms_status_enu_t instantiate()
Definition: SystemTLM.cpp:121
oms_status_enu_t registerSignalsForResultFile(ResultWriter &resultFile)
Definition: SystemTLM.cpp:790
oms_status_enu_t initializeSubSystem(ComRef cref)
Definition: SystemTLM.cpp:505
Definition: SystemWC.h:44
int registerLogVariable()
Definition: SystemTLM.cpp:856
oms_status_enu_t initialize()
Definition: SystemTLM.cpp:129
std::vector< ComRef > initializedsubsystems
Definition: SystemTLM.h:101
std::mutex setConnectedMutex
Definition: SystemTLM.h:103
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:174
oms_status_enu_t setPositionAndOrientation(const ComRef &cref, std::vector< double > x, std::vector< double > A)
Definition: SystemTLM.cpp:404
int desiredManagerPort
Definition: SystemTLM.h:94
double nextLogTime
Definition: SystemTLM.h:110
double logTime
Definition: SystemTLM.h:111
std::map< Connector *, int > connectorLogIds
Definition: SystemTLM.h:114
double interpolate(double t1, double t2, double x1, double x2, double t)
Definition: SystemTLM.h:85
void readFromSockets(SystemWC *system, double time, Component *component)
Definition: SystemTLM.cpp:620
oms_status_enu_t updateInitialValues(const oms::ComRef cref)
Definition: SystemTLM.cpp:424
std::map< int, std::vector< std::pair< double, double > > > logBuffer
Definition: SystemTLM.h:109
int numLogVars
Definition: SystemTLM.h:108
oms_status_enu_t connectToSockets(const oms::ComRef cref, std::string server)
Definition: SystemTLM.cpp:322
~SystemTLM()
Definition: SystemTLM.cpp:58
ComRef - component reference.
Definition: ComRef.h:43
std::string address
Definition: SystemTLM.h:93
std::map< System *, std::mutex > socketMutexes
Definition: SystemTLM.h:105
Definition: Component.h:54
void registerLogVariables(System *system, ResultWriter &resultFile)
Definition: SystemTLM.cpp:861
oms_status_enu_t reset()
Definition: SystemTLM.cpp:246
oms_status_enu_t setSocketData(const std::string &address, int managerPort, int monitorPort)
Definition: SystemTLM.cpp:393
static System * NewSystem(const oms::ComRef &cref, Model *parentModel, System *parentSystem)
Definition: SystemTLM.cpp:63
int actualManagerPort
Definition: SystemTLM.h:96
oms_status_enu_t updateSignals(ResultWriter &resultFile)
Definition: SystemTLM.cpp:909
Definition: BusConnector.h:15
void * model
Definition: SystemTLM.h:92
oms_status_enu_t importFromSSD_SimulationInformation(const pugi::xml_node &node)
Definition: SystemTLM.cpp:98
void disconnectFromSockets(const oms::ComRef cref)
Definition: SystemTLM.cpp:378
oms_status_enu_t stepUntil(double stopTime, void(*cb)(const char *ident, double time, oms_status_enu_t status))
Definition: SystemTLM.cpp:254
std::vector< ComRef > connectedsubsystems
Definition: SystemTLM.h:99
oms_status_enu_t exportToSSD_SimulationInformation(pugi::xml_node &node) const
Definition: SystemTLM.cpp:81
Model * parentModel
Definition: System.h:176
std::mutex setInitializedMutex
Definition: SystemTLM.h:104
void sendValueToLogger(int varId, double time, double value)
Definition: SystemTLM.cpp:768
Definition: SystemTLM.h:45
std::mutex logMutex
Definition: SystemTLM.h:106
oms_status_enu_t terminate()
Definition: SystemTLM.cpp:238
SystemTLM & operator=(SystemTLM const &copy)
not implemented
void writeToSockets(oms::SystemWC *system, double time, Component *component)
Definition: SystemTLM.cpp:526
Definition: System.h:58
System * parentSystem
Definition: System.h:177
std::map< System *, TLMPlugin * > plugins
Definition: SystemTLM.h:100
void sendValuesToLogger(System *system, double time)
Definition: SystemTLM.cpp:884
std::map< TLMBusConnector *, int > busLogIds
Definition: SystemTLM.h:113