OMSimulatorLib
The OMSimulator project is a FMI-based co-simulation environment.
Loading...
Searching...
No Matches
Variable.h
Go to the documentation of this file.
1/*
2 * This file is part of OpenModelica.
3 *
4 * Copyright (c) 1998-2026, 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 AGPL VERSION 3 LICENSE OR
11 * THIS OSMC PUBLIC LICENSE (OSMC-PL) VERSION 1.8.
12 * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS PROGRAM CONSTITUTES
13 * RECIPIENT'S ACCEPTANCE OF THE OSMC PUBLIC LICENSE OR THE GNU AGPL
14 * VERSION 3, ACCORDING TO RECIPIENTS CHOICE.
15 *
16 * The OpenModelica software and the OSMC (Open Source Modelica Consortium)
17 * Public License (OSMC-PL) are obtained from OSMC, either from the above
18 * address, from the URLs:
19 * http://www.openmodelica.org or
20 * https://github.com/OpenModelica/ or
21 * http://www.ida.liu.se/projects/OpenModelica,
22 * and in the OpenModelica distribution.
23 *
24 * GNU AGPL version 3 is obtained from:
25 * https://www.gnu.org/licenses/licenses.html#GPL
26 *
27 * This program is distributed WITHOUT ANY WARRANTY; without
28 * even the implied warranty of MERCHANTABILITY or FITNESS
29 * FOR A PARTICULAR PURPOSE, EXCEPT AS EXPRESSLY SET FORTH
30 * IN THE BY RECIPIENT SELECTED SUBSIDIARY LICENSE CONDITIONS OF OSMC-PL.
31 *
32 * See the full OSMC Public License conditions for more details.
33 *
34 */
35
36#ifndef _OMS_VARIABLE_H_
37#define _OMS_VARIABLE_H_
38
39#include "ComRef.h"
40#include "Connector.h"
41#include "OMSimulator/Types.h"
42#include <dcp/model/DcpTypes.hpp>
43#include <dcp/xml/DcpSlaveDescriptionElements.hpp>
44
45#include <fmi4c.h>
46#include <string>
47#include <vector>
48
49// TODO: Maybe move this to separate file (dcp)
52
53class SlaveDescription_t;
54
55namespace oms
56{
58 {
59 public:
61 Variable(std::shared_ptr<SlaveDescription_t> desc, int index); //For DCP components, component type is implicit
62 ~Variable();
63
64 void markAsState(size_t der_index) { is_state = true; this->der_index = der_index; }
65 void markAsContinuousTimeState(size_t der_index) { is_continuous_time_state = true; this->der_index = der_index; }
67
68 unsigned int getStateIndex() const { return state_index; }
69
70 bool isFmi2() const {return fmi2;}
71 bool isFmi3() const {return fmi3;}
72 bool isDcp() const {return dcp;}
73
74 // causality attribute
77 bool isInput() const;
78 bool isOutput() const;
81
82 bool isState() const { return is_state; }
83 bool isDer() const { return is_der; }
86
87 // initial attribute
91
92 bool isInitialUnknown() const {
93 return (isOutput() && (isApprox() || isCalculated()))
96 || (isContinuousTimeDer() && (isApprox() || isCalculated()));
97 }
98
99 const ComRef& getCref() const { return cref; }
100 operator std::string() const { return std::string(cref); }
101
107 const std::string& getDescription() const { return description; }
108
109 bool isTypeBoolean() const { return oms_signal_type_boolean == type; }
111 bool isTypeReal() const { return oms_signal_type_real == type; }
112 bool isTypeString() const { return oms_signal_type_string == type; }
113
114 std::string getCausalityString() const;
116
117 unsigned int getIndex() const { return index; }
119
120 private:
121
124 void configureDCPVariable(std::shared_ptr<SlaveDescription_t> desc, int index);
125
127 std::string description;
129
130 // FMI 2.0 specific members
135
136 // FMI 3.0 specific members
141
142 // DCP specific members
147
149 bool is_der;
154 unsigned int index;
155 size_t state_index;
156 size_t der_index;
157 bool dcp;
158 bool fmi2;
159 bool fmi3;
160 friend bool operator==(const oms::Variable& v1, const oms::Variable& v2);
161 friend bool operator!=(const oms::Variable& v1, const oms::Variable& v2);
162 };
163
164 bool operator==(const oms::Variable& v1, const oms::Variable& v2);
165 bool operator!=(const oms::Variable& v1, const oms::Variable& v2);
166}
167
168#endif
dcpDataType_t
Definition Variable.h:51
@ dcpString
Definition Variable.h:51
@ dcpInt64
Definition Variable.h:51
@ dcpBinary
Definition Variable.h:51
@ dcpUInt64
Definition Variable.h:51
@ dcpUInt16
Definition Variable.h:51
@ dcpUInt32
Definition Variable.h:51
@ dcpFloat32
Definition Variable.h:51
@ dcpUInt8
Definition Variable.h:51
@ dcpFloat64
Definition Variable.h:51
@ dcpInt16
Definition Variable.h:51
@ dcpInt8
Definition Variable.h:51
@ dcpInt32
Definition Variable.h:51
dcpCausality_t
Definition Variable.h:50
@ dcpCausalityStructuralParameter
Definition Variable.h:50
@ dcpCausalityLocal
Definition Variable.h:50
@ dcpCausalityParameter
Definition Variable.h:50
@ dcpCausalityInput
Definition Variable.h:50
@ dcpCausalityOutput
Definition Variable.h:50
ComRef - component reference.
Definition ComRef.h:51
Connector.
Definition Connector.h:54
Definition Variable.h:58
friend bool operator==(const oms::Variable &v1, const oms::Variable &v2)
void markAsState(size_t der_index)
Definition Variable.h:64
unsigned int getStateIndex() const
Definition Variable.h:68
bool isLocal() const
Definition Variable.h:79
bool isFmi2() const
Definition Variable.h:70
const std::string & getDescription() const
Definition Variable.h:107
bool isDer() const
Definition Variable.h:83
oms_causality_enu_t getCausality() const
Definition Variable.cpp:426
unsigned int getIndex() const
Definition Variable.h:117
bool isInitialUnknown() const
Definition Variable.h:92
oms_signal_type_enu_t type
Definition Variable.h:152
void markAsContinuousTimeDer()
Definition Variable.h:66
bool isTypeBoolean() const
Definition Variable.h:109
bool fmi3
Definition Variable.h:159
dcpDataType_t dcpDataType
Definition Variable.h:146
bool is_continuous_time_state
Definition Variable.h:150
bool isTypeReal() const
Definition Variable.h:111
ComRef cref
Definition Variable.h:126
fmi2Variability fmi2Variability_
Definition Variable.h:133
dcpCausality_t dcpCausality
Definition Variable.h:144
fmi2Causality fmi2Causality_
Definition Variable.h:132
bool dcp
Definition Variable.h:157
bool isCalculated() const
Definition Variable.h:90
bool isCalculatedParameter() const
Definition Variable.h:76
valueReference_t getValueReferenceDCP() const
Definition Variable.h:104
std::string description
Definition Variable.h:127
bool isTypeString() const
Definition Variable.h:112
oms_signal_numeric_type_enu_t getNumericType() const
Definition Variable.h:106
bool is_continuous_time_der
Definition Variable.h:151
std::string getCausalityString() const
Definition Variable.cpp:490
bool is_der
Definition Variable.h:149
const ComRef & getCref() const
Definition Variable.h:99
bool isState() const
Definition Variable.h:82
oms_signal_type_enu_t getType() const
Definition Variable.h:105
friend bool operator!=(const oms::Variable &v1, const oms::Variable &v2)
size_t der_index
index origin = 0
Definition Variable.h:156
Variability dcpVariability
Definition Variable.h:145
oms::Connector makeConnector(const oms::ComRef &owner) const
Definition Variable.h:118
bool isApprox() const
Definition Variable.h:89
bool isContinuousTimeDer() const
Definition Variable.h:85
bool is_state
Definition Variable.h:148
size_t state_index
index origin = 0
Definition Variable.h:155
fmi3Causality fmi3Causality_
Definition Variable.h:138
void configureFMI2Variable(fmuHandle *fmi4c, int index)
Definition Variable.cpp:71
unsigned int index
index origin = 0
Definition Variable.h:154
bool isIndependent() const
Definition Variable.h:80
fmi2ValueReference fmi2Vr
Definition Variable.h:131
oms_component_enu_t componentType
Definition Variable.h:128
bool isDcp() const
Definition Variable.h:72
void markAsContinuousTimeState(size_t der_index)
Definition Variable.h:65
fmi2ValueReference getValueReference() const
Definition Variable.h:102
void configureFMI3Variable(fmuHandle *fmi4c, int index)
Definition Variable.cpp:123
bool isContinuousTimeState() const
Definition Variable.h:84
void configureDCPVariable(std::shared_ptr< SlaveDescription_t > desc, int index)
Definition Variable.cpp:212
valueReference_t dcpVr
Definition Variable.h:143
oms_signal_numeric_type_enu_t numericType
Definition Variable.h:153
bool isTypeInteger() const
Definition Variable.h:110
fmi3Initial fmi3InitialProperty
Definition Variable.h:140
~Variable()
Definition Variable.cpp:394
fmi3Variability fmi3Variability_
Definition Variable.h:139
bool isExact() const
Definition Variable.h:88
bool isParameter() const
Definition Variable.h:75
bool isFmi3() const
Definition Variable.h:71
bool isInput() const
Definition Variable.cpp:398
fmi3ValueReference getValueReferenceFMI3() const
Definition Variable.h:103
bool isOutput() const
Definition Variable.cpp:412
fmi3ValueReference fmi3Vr
Definition Variable.h:137
fmi2Initial fmi2InitialProperty
Definition Variable.h:134
bool fmi2
Definition Variable.h:158
Definition AlgLoop.h:52
bool operator==(const ComRef &lhs, const ComRef &rhs)
Definition ComRef.cpp:227
bool operator!=(const ComRef &lhs, const ComRef &rhs)
Definition ComRef.cpp:232