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
ComRef - component reference.
Definition: ComRef.h:47
Definition: Component.h:60
Definition: System.h:67
TLMBusConnector.
Definition: TLMBusConnector.h:97
static std::vector< std::string > getVariableDescriptions(oms_tlm_domain_t domain, int dimensions, oms_tlm_interpolation_t interpolation)
Definition: TLMBusConnector.cpp:412
const std::string getDomainString() const
Definition: TLMBusConnector.cpp:181
const oms::ComRef getName() const
Definition: TLMBusConnector.h:117
std::vector< oms::ComRef > getConnectors(std::vector< int > ids) const
Definition: TLMBusConnector.cpp:201
std::map< std::string, oms::ComRef > connectors
Definition: TLMBusConnector.h:147
void setReals(std::vector< int > i, std::vector< double > values)
Definition: TLMBusConnector.cpp:152
void setReal(int i, double value)
Definition: TLMBusConnector.cpp:136
~TLMBusConnector()
Definition: TLMBusConnector.cpp:33
static std::vector< std::string > getVariableTypes(oms_tlm_domain_t domain, int dimensions, oms_tlm_interpolation_t interpolation)
Definition: TLMBusConnector.cpp:364
oms::TLMBusConnector * getActualBus()
Definition: TLMBusConnector.cpp:322
oms_causality_enu_t causality
Definition: TLMBusConnector.h:146
void setRealInputDerivatives(int i, int order, double value)
Definition: TLMBusConnector.cpp:176
int getId() const
Definition: TLMBusConnector.h:134
void updateConnectors()
Definition: TLMBusConnector.cpp:566
const int getDimensions() const
Definition: TLMBusConnector.h:120
std::vector< std::string > variableTypes
Definition: TLMBusConnector.h:149
int id
Definition: TLMBusConnector.h:154
void sortConnectors()
Definition: TLMBusConnector.cpp:240
void getReal(int i, double &value)
Definition: TLMBusConnector.cpp:144
oms_status_enu_t addConnector(const oms::ComRef &cref, std::string vartype)
Definition: TLMBusConnector.cpp:210
void getReals(std::vector< int > i, std::vector< double > &values)
Definition: TLMBusConnector.cpp:164
System * parentSystem
Definition: TLMBusConnector.h:150
oms_status_enu_t registerToSockets(TLMPlugin *plugin)
Definition: TLMBusConnector.cpp:250
Component * component
Definition: TLMBusConnector.h:151
oms_tlm_domain_t getDomain() const
Definition: TLMBusConnector.h:118
TLMBusConnector & operator=(const TLMBusConnector &rhs)
Definition: TLMBusConnector.cpp:93
std::vector< oms::ComRef > sortedConnectors
Definition: TLMBusConnector.h:148
oms::ComRef getConnector(int id) const
Definition: TLMBusConnector.cpp:196
void setName(const oms::ComRef &name)
Definition: TLMBusConnector.cpp:114
double getDelay()
Definition: TLMBusConnector.h:124
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
const oms::ssd::ConnectorGeometry * getGeometry() const
Definition: TLMBusConnector.h:127
void setDelay(double delay)
Definition: TLMBusConnector.h:123
const oms_tlm_interpolation_t getInterpolation() const
Definition: TLMBusConnector.h:122
oms::Component * getComponent()
Recursively find component (i.e. FMU) connected to the TLM bus. Return NULL if not found.
Definition: TLMBusConnector.cpp:311
TLMBusConnector * actualBus
Definition: TLMBusConnector.h:152
const oms_causality_enu_t getCausality() const
Definition: TLMBusConnector.h:121
oms_status_enu_t deleteConnector(const oms::ComRef &cref)
Definition: TLMBusConnector.cpp:227
oms_status_enu_t exportToSSD(pugi::xml_node &root) const
Definition: TLMBusConnector.cpp:49
void setGeometry(const oms::ssd::ConnectorGeometry *newGeometry)
Definition: TLMBusConnector.cpp:124
Definition: ConnectorGeometry.h:46
const char * system
Definition: Tags.cpp:57
Definition: AlgLoop.h:45
struct oms::oms_tlm_sigrefs_1d_fg_t oms_tlm_sigrefs_1d_fg_t
struct oms::oms_tlm_sigrefs_2d_t oms_tlm_sigrefs_2d_t
struct oms::oms_tlm_sigrefs_1d_t oms_tlm_sigrefs_1d_t
struct oms::oms_tlm_sigrefs_3d_fg_t oms_tlm_sigrefs_3d_fg_t
struct oms::oms_tlm_sigrefs_3d_cg_t oms_tlm_sigrefs_3d_cg_t
struct oms::oms_tlm_sigrefs_1d_cg_t oms_tlm_sigrefs_1d_cg_t
struct oms::oms_tlm_sigrefs_signal_t oms_tlm_sigrefs_signal_t
struct oms::oms_tlm_sigrefs_3d_t oms_tlm_sigrefs_3d_t
Definition: TLMBusConnector.h:32
int Z
Definition: TLMBusConnector.h:36
int x
Definition: TLMBusConnector.h:33
int c
Definition: TLMBusConnector.h:35
int v
Definition: TLMBusConnector.h:34
Definition: TLMBusConnector.h:39
std::vector< int > c
Definition: TLMBusConnector.h:42
int Z
Definition: TLMBusConnector.h:44
std::vector< int > t
Definition: TLMBusConnector.h:43
int x
Definition: TLMBusConnector.h:40
int v
Definition: TLMBusConnector.h:41
Definition: TLMBusConnector.h:26
int x
Definition: TLMBusConnector.h:27
int f
Definition: TLMBusConnector.h:29
int v
Definition: TLMBusConnector.h:28
Definition: TLMBusConnector.h:47
std::vector< int > x
Definition: TLMBusConnector.h:48
std::vector< int > phi
Definition: TLMBusConnector.h:49
std::vector< int > w
Definition: TLMBusConnector.h:51
std::vector< int > f
Definition: TLMBusConnector.h:52
std::vector< int > v
Definition: TLMBusConnector.h:50
Definition: TLMBusConnector.h:63
std::vector< int > A
Definition: TLMBusConnector.h:65
std::vector< int > v
Definition: TLMBusConnector.h:66
std::vector< int > c
Definition: TLMBusConnector.h:68
int Zr
Definition: TLMBusConnector.h:70
std::vector< int > w
Definition: TLMBusConnector.h:67
int Zt
Definition: TLMBusConnector.h:69
std::vector< int > x
Definition: TLMBusConnector.h:64
Definition: TLMBusConnector.h:73
std::vector< int > A
Definition: TLMBusConnector.h:75
std::vector< int > x
Definition: TLMBusConnector.h:74
int Zt
Definition: TLMBusConnector.h:89
std::vector< int > t
Definition: TLMBusConnector.h:88
std::vector< std::vector< int > > c
Definition: TLMBusConnector.h:78
std::vector< int > v
Definition: TLMBusConnector.h:76
int Zr
Definition: TLMBusConnector.h:90
std::vector< int > w
Definition: TLMBusConnector.h:77
Definition: TLMBusConnector.h:55
std::vector< int > w
Definition: TLMBusConnector.h:59
std::vector< int > f
Definition: TLMBusConnector.h:60
std::vector< int > A
Definition: TLMBusConnector.h:57
std::vector< int > v
Definition: TLMBusConnector.h:58
std::vector< int > x
Definition: TLMBusConnector.h:56
Definition: TLMBusConnector.h:22
int y
Definition: TLMBusConnector.h:23