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 "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 {
23  int y = 0;
25 
26 typedef struct {
27  int x = 0;
28  int v = 1;
29  int f = 2;
31 
32 typedef struct {
33  int x = 0;
34  int v = 1;
35  int c = 2;
36  int Z = 3;
38 
39 typedef struct {
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 {
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 {
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 {
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 {
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 
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);
100  ~TLMBusConnector();
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 
137  oms::TLMBusConnector* getActualBus();
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;
144  oms::TLMBusConnector* getActualBus(ComRef cref, System *system);
145 
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;
152  TLMBusConnector *actualBus = nullptr;
153 
154  int id;
155  };
156 }
157 
158 #endif // TLMBUSCONNECTOR_H
std::map< std::string, oms::ComRef > connectors
Definition: TLMBusConnector.h:147
oms_tlm_domain_t getDomain() const
Definition: TLMBusConnector.h:118
int getId() const
Definition: TLMBusConnector.h:134
System * parentSystem
Definition: TLMBusConnector.h:150
System & operator=(System const &copy)
not implemented
oms_causality_enu_t
Definition: Types.h:61
oms_tlm_interpolation_t
Definition: Types.h:69
oms_status_enu_t getReals(const std::vector< ComRef > &crefs, std::vector< double > &values)
Definition: System.cpp:1677
std::vector< oms::ComRef > sortedConnectors
Definition: TLMBusConnector.h:148
oms_status_enu_t
Definition: Types.h:43
TLMBusConnector.
Definition: TLMBusConnector.h:96
ComRef cref
Definition: System.h:174
void setDelay(double delay)
Definition: TLMBusConnector.h:123
oms_status_enu_t getReal(const ComRef &cref, double &value)
Definition: System.cpp:1567
Connector * getConnector(const ComRef &cref)
Definition: System.cpp:734
Definition: TLMBusConnector.h:55
const int getDimensions() const
Definition: TLMBusConnector.h:120
void setGeometry(const ssd::ElementGeometry &geometry)
Definition: System.h:79
const oms_tlm_interpolation_t getInterpolation() const
Definition: TLMBusConnector.h:122
oms_status_enu_t addConnector(const ComRef &cref, oms_causality_enu_t causality, oms_signal_type_enu_t type)
Definition: System.cpp:711
ComRef - component reference.
Definition: ComRef.h:43
Definition: Component.h:54
oms_status_enu_t setReals(const std::vector< ComRef > &crefs, std::vector< double > values)
Definition: System.cpp:1688
Definition: TLMBusConnector.h:22
const oms::ssd::ConnectorGeometry * getGeometry() const
Definition: TLMBusConnector.h:127
const oms::ComRef getName() const
Definition: TLMBusConnector.h:117
Definition: BusConnector.h:15
std::vector< std::string > variableTypes
Definition: TLMBusConnector.h:149
oms_tlm_domain_t
Definition: Types.h:75
Definition: TLMBusConnector.h:73
Definition: TLMBusConnector.h:39
Definition: TLMBusConnector.h:63
oms_status_enu_t setReal(const ComRef &cref, double value)
Definition: System.cpp:1651
int id
Definition: TLMBusConnector.h:154
Definition: TLMBusConnector.h:32
const oms_causality_enu_t getCausality() const
Definition: TLMBusConnector.h:121
TLM Bus connector.
Definition: Types.h:380
Definition: ConnectorGeometry.h:45
oms_status_enu_t setRealInputDerivatives(const ComRef &cref, int order, double value)
Definition: System.cpp:1699
Component * getComponent(const ComRef &cref)
Definition: System.cpp:184
Definition: System.h:58
double getDelay()
Definition: TLMBusConnector.h:124
System * parentSystem
Definition: System.h:177
Connector ** getConnectors()
Definition: System.h:82
Definition: TLMBusConnector.h:26
oms_causality_enu_t causality
Definition: TLMBusConnector.h:146
Definition: TLMBusConnector.h:47
oms_status_enu_t exportToSSD(pugi::xml_node &node) const
Definition: System.cpp:380