OMSimulatorLib
The OMSimulator project is a FMI-based co-simulation environment that supports ordinary (i.e., non-delayed) and TLM connections.
TLMBusConnector.h
Go to the documentation of this file.
1 #ifndef TLMBUSCONNECTOR_H
2 #define TLMBUSCONNECTOR_H
3 
4 
5 #include "ComRef.h"
6 #include "OMSimulator/Types.h"
7 #include "Connector.h"
9 #include "../../OMTLMSimulator/common/Plugin/PluginImplementer.h"
10 
11 #include <string>
12 #include <vector>
13 #include <map>
14 
15 #include <pugixml.hpp>
16 
17 namespace oms
18 {
19 class Component;
20 class System;
21 
22 typedef struct oms_tlm_sigrefs_signal_t {
23  int y = 0;
25 
26 typedef struct oms_tlm_sigrefs_1d_t {
27  int x = 0;
28  int v = 1;
29  int f = 2;
31 
32 typedef struct oms_tlm_sigrefs_1d_cg_t {
33  int x = 0;
34  int v = 1;
35  int c = 2;
36  int Z = 3;
38 
39 typedef struct oms_tlm_sigrefs_1d_fg_t {
40  int x = 0;
41  int v = 1;
42  std::vector<int> c = {2,3,4,5,6,7,8,9,10,11};
43  std::vector<int> t = {12,13,14,15,16,17,18,19,20,21};
44  int Z = 22;
46 
47 typedef struct oms_tlm_sigrefs_2d_t {
48  std::vector<int> x = {0,1};
49  std::vector<int> phi = {2};
50  std::vector<int> v = {3,4};
51  std::vector<int> w = {5};
52  std::vector<int> f = {6,7,8};
54 
55 typedef struct oms_tlm_sigrefs_3d_t {
56  std::vector<int> x = {0,1,2};
57  std::vector<int> A = {3,4,5,6,7,8,9,10,11};
58  std::vector<int> v = {12,13,14};
59  std::vector<int> w = {15,16,17};
60  std::vector<int> f = {18,19,20,21,22,23};
62 
63 typedef struct oms_tlm_sigrefs_3d_cg_t {
64  std::vector<int> x = {0,1,2};
65  std::vector<int> A = {3,4,5,6,7,8,9,10,11};
66  std::vector<int> v = {12,13,14};
67  std::vector<int> w = {15,16,17};
68  std::vector<int> c = {18,19,20,21,22,23};
69  int Zt = 24;
70  int Zr = 25;
72 
73 typedef struct oms_tlm_sigrefs_3d_fg_t {
74  std::vector<int> x = {0,1,2};
75  std::vector<int> A = {3,4,5,6,7,8,9,10,11};
76  std::vector<int> v = {12,13,14};
77  std::vector<int> w = {15,16,17};
78  std::vector< std::vector<int> > c = { {18,28,38,48,58,68},
79  {19,29,39,49,59,69},
80  {20,30,40,50,60,70},
81  {21,31,41,51,61,71},
82  {22,32,42,52,62,72},
83  {23,33,43,53,63,73},
84  {24,34,44,54,64,74},
85  {25,35,45,55,65,75},
86  {26,36,46,56,66,76},
87  {27,37,47,57,67,77} };
88  std::vector<int> t = { 78,79,80,81,82,83,84,85,86,87};
89  int Zt = 88;
90  int Zr = 89;
92 
96  class TLMBusConnector : protected oms_tlmbusconnector_t
97  {
98  public:
99  TLMBusConnector(const oms::ComRef& name, oms_tlm_domain_t domain, const int dimensions, const oms_tlm_interpolation_t interpolation, System* parentSystem=nullptr, Component* component=nullptr);
101 
102  oms_status_enu_t exportToSSD(pugi::xml_node& root) const;
103 
104  // methods to copy the object
105  TLMBusConnector(const TLMBusConnector& rhs);
107 
108  void setName(const oms::ComRef& name);
109  void setGeometry(const oms::ssd::ConnectorGeometry* newGeometry);
110 
111  void setReal(int i, double value);
112  void getReal(int i, double &value);
113  void setReals(std::vector<int> i, std::vector<double> values);
114  void getReals(std::vector<int> i, std::vector<double>& values);
115  void setRealInputDerivatives(int i, int order, double value);
116 
117  const oms::ComRef getName() const {return oms::ComRef(name);}
118  oms_tlm_domain_t getDomain() const {return domain;}
119  const std::string getDomainString() const;
120  const int getDimensions() const {return dimensions;}
121  const oms_causality_enu_t getCausality() const {return causality;}
122  const oms_tlm_interpolation_t getInterpolation() const {return interpolation;}
123  void setDelay(double delay) { this->delay = delay; }
124  double getDelay() { return this->delay; }
125  oms::ComRef getConnector(int id) const;
126  std::vector<oms::ComRef> getConnectors(std::vector<int> ids) const;
127  const oms::ssd::ConnectorGeometry* getGeometry() const {return reinterpret_cast<oms::ssd::ConnectorGeometry*>(geometry);}
128 
129  oms_status_enu_t addConnector(const oms::ComRef& cref, std::string vartype);
130  oms_status_enu_t deleteConnector(const oms::ComRef& cref);
131  void updateConnectors();
132  void sortConnectors();
133  oms_status_enu_t registerToSockets(TLMPlugin *plugin);
134  int getId() const {return id;}
135 
138 
139  static std::vector<std::string> getVariableTypes(oms_tlm_domain_t domain, int dimensions, oms_tlm_interpolation_t interpolation);
140  static std::vector<std::string> getVariableDescriptions(oms_tlm_domain_t domain, int dimensions, oms_tlm_interpolation_t interpolation);
141 
142  private:
143  oms::Component* getComponent(const ComRef &conA, System *system) const;
145 
146  oms_causality_enu_t causality;
147  std::map<std::string, oms::ComRef> connectors;
148  std::vector<oms::ComRef> sortedConnectors;
149  std::vector<std::string> variableTypes; //Used to keep track of TLM variable types
151  Component* component = nullptr;
153 
154  int id;
155  };
156 }
157 
158 #endif // TLMBUSCONNECTOR_H
oms::oms_tlm_sigrefs_2d_t::w
std::vector< int > w
Definition: TLMBusConnector.h:51
oms
Definition: AlgLoop.h:44
oms::oms_tlm_sigrefs_3d_t::f
std::vector< int > f
Definition: TLMBusConnector.h:60
oms::TLMBusConnector::getName
const oms::ComRef getName() const
Definition: TLMBusConnector.h:117
oms::TLMBusConnector::setReal
void setReal(int i, double value)
Definition: TLMBusConnector.cpp:136
ComRef.h
oms::oms_tlm_sigrefs_1d_t::v
int v
Definition: TLMBusConnector.h:28
oms::oms_tlm_sigrefs_3d_cg_t::x
std::vector< int > x
Definition: TLMBusConnector.h:64
oms::ssp::Draft20180219::ssd::system
const char * system
Definition: Tags.cpp:57
oms::oms_tlm_sigrefs_1d_fg_t::v
int v
Definition: TLMBusConnector.h:41
oms::oms_tlm_sigrefs_1d_cg_t::c
int c
Definition: TLMBusConnector.h:35
oms::TLMBusConnector::addConnector
oms_status_enu_t addConnector(const oms::ComRef &cref, std::string vartype)
Definition: TLMBusConnector.cpp:210
oms::oms_tlm_sigrefs_3d_fg_t::Zr
int Zr
Definition: TLMBusConnector.h:90
oms::ComRef
ComRef - component reference.
Definition: ComRef.h:46
oms::TLMBusConnector::deleteConnector
oms_status_enu_t deleteConnector(const oms::ComRef &cref)
Definition: TLMBusConnector.cpp:227
oms::oms_tlm_sigrefs_3d_t::A
std::vector< int > A
Definition: TLMBusConnector.h:57
oms::oms_tlm_sigrefs_3d_fg_t::v
std::vector< int > v
Definition: TLMBusConnector.h:76
oms::TLMBusConnector::getGeometry
const oms::ssd::ConnectorGeometry * getGeometry() const
Definition: TLMBusConnector.h:127
oms::oms_tlm_sigrefs_3d_cg_t
struct oms::oms_tlm_sigrefs_3d_cg_t oms_tlm_sigrefs_3d_cg_t
oms::TLMBusConnector::getDomainString
const std::string getDomainString() const
Definition: TLMBusConnector.cpp:181
oms::TLMBusConnector::getConnectors
std::vector< oms::ComRef > getConnectors(std::vector< int > ids) const
Definition: TLMBusConnector.cpp:201
oms::TLMBusConnector::getCausality
const oms_causality_enu_t getCausality() const
Definition: TLMBusConnector.h:121
oms::oms_tlm_sigrefs_3d_cg_t::v
std::vector< int > v
Definition: TLMBusConnector.h:66
oms::oms_tlm_sigrefs_signal_t
Definition: TLMBusConnector.h:22
oms::oms_tlm_sigrefs_1d_cg_t
struct oms::oms_tlm_sigrefs_1d_cg_t oms_tlm_sigrefs_1d_cg_t
oms::oms_tlm_sigrefs_3d_t
Definition: TLMBusConnector.h:55
oms::oms_tlm_sigrefs_3d_fg_t::t
std::vector< int > t
Definition: TLMBusConnector.h:88
oms::oms_tlm_sigrefs_1d_t::x
int x
Definition: TLMBusConnector.h:27
oms::TLMBusConnector::getActualBus
oms::TLMBusConnector * getActualBus()
Definition: TLMBusConnector.cpp:322
oms::oms_tlm_sigrefs_2d_t::f
std::vector< int > f
Definition: TLMBusConnector.h:52
oms::TLMBusConnector::actualBus
TLMBusConnector * actualBus
Definition: TLMBusConnector.h:152
oms::oms_tlm_sigrefs_1d_fg_t::t
std::vector< int > t
Definition: TLMBusConnector.h:43
oms::TLMBusConnector::variableTypes
std::vector< std::string > variableTypes
Definition: TLMBusConnector.h:149
oms::oms_tlm_sigrefs_3d_fg_t::x
std::vector< int > x
Definition: TLMBusConnector.h:74
oms::oms_tlm_sigrefs_3d_fg_t::A
std::vector< int > A
Definition: TLMBusConnector.h:75
oms::TLMBusConnector::getVariableDescriptions
static std::vector< std::string > getVariableDescriptions(oms_tlm_domain_t domain, int dimensions, oms_tlm_interpolation_t interpolation)
Definition: TLMBusConnector.cpp:412
oms::TLMBusConnector::getVariableTypes
static std::vector< std::string > getVariableTypes(oms_tlm_domain_t domain, int dimensions, oms_tlm_interpolation_t interpolation)
Definition: TLMBusConnector.cpp:364
oms::oms_tlm_sigrefs_3d_fg_t
struct oms::oms_tlm_sigrefs_3d_fg_t oms_tlm_sigrefs_3d_fg_t
oms::TLMBusConnector::getComponent
oms::Component * getComponent()
Recursively find component (i.e. FMU) connected to the TLM bus. Return NULL if not found.
Definition: TLMBusConnector.cpp:311
oms::oms_tlm_sigrefs_3d_cg_t::Zt
int Zt
Definition: TLMBusConnector.h:69
oms::Component
Definition: Component.h:59
oms::TLMBusConnector::updateConnectors
void updateConnectors()
Definition: TLMBusConnector.cpp:566
oms::TLMBusConnector::TLMBusConnector
TLMBusConnector(const oms::ComRef &name, oms_tlm_domain_t domain, const int dimensions, const oms_tlm_interpolation_t interpolation, System *parentSystem=nullptr, Component *component=nullptr)
Definition: TLMBusConnector.cpp:9
oms::TLMBusConnector::parentSystem
System * parentSystem
Definition: TLMBusConnector.h:150
ConnectorGeometry.h
oms::TLMBusConnector::sortedConnectors
std::vector< oms::ComRef > sortedConnectors
Definition: TLMBusConnector.h:148
oms::TLMBusConnector::id
int id
Definition: TLMBusConnector.h:154
oms::oms_tlm_sigrefs_1d_cg_t::x
int x
Definition: TLMBusConnector.h:33
oms::oms_tlm_sigrefs_3d_t
struct oms::oms_tlm_sigrefs_3d_t oms_tlm_sigrefs_3d_t
oms::oms_tlm_sigrefs_signal_t
struct oms::oms_tlm_sigrefs_signal_t oms_tlm_sigrefs_signal_t
oms::TLMBusConnector::causality
oms_causality_enu_t causality
Definition: TLMBusConnector.h:146
oms::oms_tlm_sigrefs_3d_t::x
std::vector< int > x
Definition: TLMBusConnector.h:56
oms::TLMBusConnector::setName
void setName(const oms::ComRef &name)
Definition: TLMBusConnector.cpp:114
oms::TLMBusConnector::setRealInputDerivatives
void setRealInputDerivatives(int i, int order, double value)
Definition: TLMBusConnector.cpp:176
oms::oms_tlm_sigrefs_3d_fg_t
Definition: TLMBusConnector.h:73
oms::oms_tlm_sigrefs_2d_t::x
std::vector< int > x
Definition: TLMBusConnector.h:48
oms::TLMBusConnector::getReal
void getReal(int i, double &value)
Definition: TLMBusConnector.cpp:144
oms::oms_tlm_sigrefs_1d_fg_t::Z
int Z
Definition: TLMBusConnector.h:44
oms::TLMBusConnector::getReals
void getReals(std::vector< int > i, std::vector< double > &values)
Definition: TLMBusConnector.cpp:164
oms::oms_tlm_sigrefs_1d_fg_t
Definition: TLMBusConnector.h:39
oms::oms_tlm_sigrefs_3d_fg_t::Zt
int Zt
Definition: TLMBusConnector.h:89
Connector.h
oms::TLMBusConnector::operator=
TLMBusConnector & operator=(const TLMBusConnector &rhs)
Definition: TLMBusConnector.cpp:93
oms::TLMBusConnector::getId
int getId() const
Definition: TLMBusConnector.h:134
oms::oms_tlm_sigrefs_3d_cg_t
Definition: TLMBusConnector.h:63
oms::oms_tlm_sigrefs_1d_t::f
int f
Definition: TLMBusConnector.h:29
oms::oms_tlm_sigrefs_2d_t::phi
std::vector< int > phi
Definition: TLMBusConnector.h:49
oms::oms_tlm_sigrefs_1d_cg_t
Definition: TLMBusConnector.h:32
oms::TLMBusConnector::getDelay
double getDelay()
Definition: TLMBusConnector.h:124
oms::oms_tlm_sigrefs_1d_fg_t
struct oms::oms_tlm_sigrefs_1d_fg_t oms_tlm_sigrefs_1d_fg_t
oms::TLMBusConnector::setReals
void setReals(std::vector< int > i, std::vector< double > values)
Definition: TLMBusConnector.cpp:152
oms::TLMBusConnector::exportToSSD
oms_status_enu_t exportToSSD(pugi::xml_node &root) const
Definition: TLMBusConnector.cpp:49
oms::oms_tlm_sigrefs_3d_t::w
std::vector< int > w
Definition: TLMBusConnector.h:59
oms::TLMBusConnector::setDelay
void setDelay(double delay)
Definition: TLMBusConnector.h:123
oms::System
Definition: System.h:65
oms::TLMBusConnector::connectors
std::map< std::string, oms::ComRef > connectors
Definition: TLMBusConnector.h:147
oms::oms_tlm_sigrefs_1d_fg_t::x
int x
Definition: TLMBusConnector.h:40
oms::oms_tlm_sigrefs_2d_t
struct oms::oms_tlm_sigrefs_2d_t oms_tlm_sigrefs_2d_t
oms::ssd::ConnectorGeometry
Definition: ConnectorGeometry.h:45
oms::oms_tlm_sigrefs_2d_t::v
std::vector< int > v
Definition: TLMBusConnector.h:50
oms::TLMBusConnector::registerToSockets
oms_status_enu_t registerToSockets(TLMPlugin *plugin)
Definition: TLMBusConnector.cpp:250
oms::TLMBusConnector::getInterpolation
const oms_tlm_interpolation_t getInterpolation() const
Definition: TLMBusConnector.h:122
oms::TLMBusConnector::sortConnectors
void sortConnectors()
Definition: TLMBusConnector.cpp:240
oms::oms_tlm_sigrefs_3d_cg_t::c
std::vector< int > c
Definition: TLMBusConnector.h:68
oms::TLMBusConnector::~TLMBusConnector
~TLMBusConnector()
Definition: TLMBusConnector.cpp:33
oms::oms_tlm_sigrefs_3d_cg_t::Zr
int Zr
Definition: TLMBusConnector.h:70
oms::TLMBusConnector::setGeometry
void setGeometry(const oms::ssd::ConnectorGeometry *newGeometry)
Definition: TLMBusConnector.cpp:124
oms::oms_tlm_sigrefs_signal_t::y
int y
Definition: TLMBusConnector.h:23
oms::oms_tlm_sigrefs_3d_fg_t::w
std::vector< int > w
Definition: TLMBusConnector.h:77
oms::oms_tlm_sigrefs_1d_t
Definition: TLMBusConnector.h:26
oms::TLMBusConnector::getDimensions
const int getDimensions() const
Definition: TLMBusConnector.h:120
oms::TLMBusConnector::getDomain
oms_tlm_domain_t getDomain() const
Definition: TLMBusConnector.h:118
oms::TLMBusConnector
TLMBusConnector.
Definition: TLMBusConnector.h:96
oms::TLMBusConnector::getConnector
oms::ComRef getConnector(int id) const
Definition: TLMBusConnector.cpp:196
oms::oms_tlm_sigrefs_3d_cg_t::w
std::vector< int > w
Definition: TLMBusConnector.h:67
oms::oms_tlm_sigrefs_2d_t
Definition: TLMBusConnector.h:47
oms::oms_tlm_sigrefs_3d_cg_t::A
std::vector< int > A
Definition: TLMBusConnector.h:65
oms::oms_tlm_sigrefs_1d_cg_t::Z
int Z
Definition: TLMBusConnector.h:36
oms::oms_tlm_sigrefs_1d_fg_t::c
std::vector< int > c
Definition: TLMBusConnector.h:42
oms::TLMBusConnector::component
Component * component
Definition: TLMBusConnector.h:151
oms::oms_tlm_sigrefs_1d_t
struct oms::oms_tlm_sigrefs_1d_t oms_tlm_sigrefs_1d_t
oms::oms_tlm_sigrefs_1d_cg_t::v
int v
Definition: TLMBusConnector.h:34
oms::oms_tlm_sigrefs_3d_fg_t::c
std::vector< std::vector< int > > c
Definition: TLMBusConnector.h:78
oms::oms_tlm_sigrefs_3d_t::v
std::vector< int > v
Definition: TLMBusConnector.h:58