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 "OMSimulator/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);
53  oms_status_enu_t importFromSSD_SimulationInformationHelper(const pugi::xml_node& node);
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 
58  oms_status_enu_t instantiate();
59  oms_status_enu_t initialize();
60  oms_status_enu_t terminate();
61  oms_status_enu_t reset();
62  oms_status_enu_t doStep();
63  oms_status_enu_t stepUntil(double stopTime);
64 
65  oms_status_enu_t connectToSockets(const oms::ComRef cref, std::string server);
67  oms_status_enu_t updateInitialValues(const oms::ComRef cref);
68 
69  oms_status_enu_t initializeSubSystem(ComRef cref);
70  oms_status_enu_t simulateSubSystem(ComRef cref, double stopTime);
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);
77  oms_status_enu_t registerSignalsForResultFile(ResultWriter& resultFile);
78  oms_status_enu_t updateSignals(ResultWriter& resultFile);
79 
80  protected:
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
oms::SystemTLM::connectorLogIds
std::map< Connector *, int > connectorLogIds
Definition: SystemTLM.h:117
oms
Definition: AlgLoop.h:44
System.h
oms::SystemTLM::importFromSSD_SimulationInformationHelper
oms_status_enu_t importFromSSD_SimulationInformationHelper(const pugi::xml_node &node)
Definition: SystemTLM.cpp:125
oms::SystemTLM::nextLogTime
double nextLogTime
Definition: SystemTLM.h:113
oms::SystemTLM::interpolate
double interpolate(double t1, double t2, double x1, double x2, double t)
Definition: SystemTLM.h:88
ComRef.h
oms::Model
Definition: Model.h:52
oms::SystemWC
Definition: SystemWC.h:48
oms::SystemTLM::readFromSockets
void readFromSockets(SystemWC *system, double time, Component *component)
Definition: SystemTLM.cpp:691
oms::ssp::Draft20180219::ssd::system
const char * system
Definition: Tags.cpp:57
oms::System::parentSystem
System * parentSystem
Definition: System.h:244
oms::ComRef
ComRef - component reference.
Definition: ComRef.h:46
oms::SystemTLM::setInitializedMutex
std::mutex setInitializedMutex
Definition: SystemTLM.h:107
oms::SystemTLM::~SystemTLM
~SystemTLM()
Definition: SystemTLM.cpp:58
oms::ssp::Draft20180219::ssd::component
const char * component
Definition: Tags.cpp:45
oms::SystemTLM::logMutex
std::mutex logMutex
Definition: SystemTLM.h:109
oms::SystemTLM::socketMutexes
std::map< System *, std::mutex > socketMutexes
Definition: SystemTLM.h:108
oms::SystemTLM::logBuffer
std::map< int, std::vector< std::pair< double, double > > > logBuffer
Definition: SystemTLM.h:112
oms::System::time
double time
Definition: System.h:220
oms::SystemTLM::registerLogVariables
void registerLogVariables(System *system, ResultWriter &resultFile)
Definition: SystemTLM.cpp:932
oms::SystemTLM::actualManagerPort
int actualManagerPort
Definition: SystemTLM.h:99
oms::SystemTLM::busLogIds
std::map< TLMBusConnector *, int > busLogIds
Definition: SystemTLM.h:116
oms::SystemTLM::pluginsMutex
std::mutex pluginsMutex
Definition: SystemTLM.h:105
oms::SystemTLM::simulateSubSystem
oms_status_enu_t simulateSubSystem(ComRef cref, double stopTime)
Definition: SystemTLM.cpp:590
oms::SystemTLM::connectedsubsystems
std::vector< ComRef > connectedsubsystems
Definition: SystemTLM.h:102
oms::SystemTLM::singleModel
std::string singleModel
Definition: SystemTLM.h:118
oms::SystemTLM::logStep
double logStep
Definition: SystemTLM.h:115
oms::SystemTLM::actualMonitorPort
int actualMonitorPort
Definition: SystemTLM.h:100
oms::Component
Definition: Component.h:59
oms::SystemTLM::doStep
oms_status_enu_t doStep()
Definition: SystemTLM.cpp:282
oms::SystemTLM::stepUntil
oms_status_enu_t stepUntil(double stopTime)
Definition: SystemTLM.cpp:287
oms::SystemTLM::sendValueToLogger
void sendValueToLogger(int varId, double time, double value)
Definition: SystemTLM.cpp:839
oms::SystemTLM::operator=
SystemTLM & operator=(SystemTLM const &copy)
not implemented
oms::SystemTLM::registerLogVariable
int registerLogVariable()
Definition: SystemTLM.cpp:927
oms::SystemTLM::model
void * model
Definition: SystemTLM.h:95
oms::SystemTLM::importFromSSD_SimulationInformation
oms_status_enu_t importFromSSD_SimulationInformation(const pugi::xml_node &node, const std::string &sspVersion)
Definition: SystemTLM.cpp:95
oms::SystemTLM::setConnectedMutex
std::mutex setConnectedMutex
Definition: SystemTLM.h:106
oms::ResultWriter
Definition: ResultWriter.h:68
oms::SystemTLM::desiredManagerPort
int desiredManagerPort
Definition: SystemTLM.h:97
oms::SystemTLM::exportToSSD_SimulationInformation
oms_status_enu_t exportToSSD_SimulationInformation(pugi::xml_node &node) const
Definition: SystemTLM.cpp:81
oms::SystemTLM::initializeSubSystem
oms_status_enu_t initializeSubSystem(ComRef cref)
Definition: SystemTLM.cpp:576
oms::SystemTLM::setPositionAndOrientation
oms_status_enu_t setPositionAndOrientation(const ComRef &cref, std::vector< double > x, std::vector< double > A)
Definition: SystemTLM.cpp:435
oms::SystemTLM::terminate
oms_status_enu_t terminate()
Definition: SystemTLM.cpp:266
oms::SystemTLM::plugins
std::map< System *, TLMPlugin * > plugins
Definition: SystemTLM.h:103
oms::SystemTLM::logTime
double logTime
Definition: SystemTLM.h:114
oms::SystemTLM::writeToSockets
void writeToSockets(oms::SystemWC *system, double time, Component *component)
Definition: SystemTLM.cpp:597
oms::SystemTLM::updateInitialValues
oms_status_enu_t updateInitialValues(const oms::ComRef cref)
Definition: SystemTLM.cpp:495
oms::SystemTLM::sendValuesToLogger
void sendValuesToLogger(System *system, double time)
Definition: SystemTLM.cpp:955
oms::System
Definition: System.h:65
oms::SystemTLM::numLogVars
int numLogVars
Definition: SystemTLM.h:111
oms::SystemTLM::setSocketData
oms_status_enu_t setSocketData(const std::string &address, int managerPort, int monitorPort)
Definition: SystemTLM.cpp:424
oms::SystemTLM::address
std::string address
Definition: SystemTLM.h:96
oms::SystemTLM::reset
oms_status_enu_t reset()
Definition: SystemTLM.cpp:274
oms::SystemTLM::initialize
oms_status_enu_t initialize()
Definition: SystemTLM.cpp:150
oms::SystemTLM::NewSystem
static System * NewSystem(const oms::ComRef &cref, Model *parentModel, System *parentSystem)
Definition: SystemTLM.cpp:63
oms::SystemTLM::connectToSockets
oms_status_enu_t connectToSockets(const oms::ComRef cref, std::string server)
Definition: SystemTLM.cpp:352
oms::SystemTLM::desiredMonitorPort
int desiredMonitorPort
Definition: SystemTLM.h:98
oms::System::parentModel
Model * parentModel
Definition: System.h:243
oms::SystemTLM::registerSignalsForResultFile
oms_status_enu_t registerSignalsForResultFile(ResultWriter &resultFile)
Definition: SystemTLM.cpp:861
oms::SystemTLM::instantiate
oms_status_enu_t instantiate()
Definition: SystemTLM.cpp:142
oms::SystemTLM::initializedsubsystems
std::vector< ComRef > initializedsubsystems
Definition: SystemTLM.h:104
oms::SystemTLM::disconnectFromSockets
void disconnectFromSockets(const oms::ComRef cref)
Definition: SystemTLM.cpp:409
oms::SystemTLM
Definition: SystemTLM.h:45
oms::SystemTLM::updateSignals
oms_status_enu_t updateSignals(ResultWriter &resultFile)
Definition: SystemTLM.cpp:980
oms::SystemTLM::fetchInterfaces
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
oms::SystemTLM::SystemTLM
SystemTLM(const ComRef &cref, Model *parentModel, System *parentSystem)
Definition: SystemTLM.cpp:45
oms::System::cref
ComRef cref
Definition: System.h:241