Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/foreign/fmi/fmi2Functions.h
169678 views
1
#ifndef fmi2Functions_h
2
#define fmi2Functions_h
3
4
/* This header file must be utilized when compiling a FMU.
5
It defines all functions of the
6
FMI 2.0.1 Model Exchange and Co-Simulation Interface.
7
8
In order to have unique function names even if several FMUs
9
are compiled together (e.g. for embedded systems), every "real" function name
10
is constructed by prepending the function name by "FMI2_FUNCTION_PREFIX".
11
Therefore, the typical usage is:
12
13
#define FMI2_FUNCTION_PREFIX MyModel_
14
#include "fmi2Functions.h"
15
16
As a result, a function that is defined as "fmi2GetDerivatives" in this header file,
17
is actually getting the name "MyModel_fmi2GetDerivatives".
18
19
This only holds if the FMU is shipped in C source code, or is compiled in a
20
static link library. For FMUs compiled in a DLL/sharedObject, the "actual" function
21
names are used and "FMI2_FUNCTION_PREFIX" must not be defined.
22
23
Revisions:
24
- Sep. 29, 2019: License changed to 2-clause BSD License (without extensions)
25
- Apr. 9, 2014: All prefixes "fmi" renamed to "fmi2" (decision from April 8)
26
- Mar. 26, 2014: FMI_Export set to empty value if FMI_Export and FMI_FUNCTION_PREFIX
27
are not defined (#173)
28
- Oct. 11, 2013: Functions of ModelExchange and CoSimulation merged:
29
fmiInstantiateModel , fmiInstantiateSlave -> fmiInstantiate
30
fmiFreeModelInstance, fmiFreeSlaveInstance -> fmiFreeInstance
31
fmiEnterModelInitializationMode, fmiEnterSlaveInitializationMode -> fmiEnterInitializationMode
32
fmiExitModelInitializationMode , fmiExitSlaveInitializationMode -> fmiExitInitializationMode
33
fmiTerminateModel, fmiTerminateSlave -> fmiTerminate
34
fmiResetSlave -> fmiReset (now also for ModelExchange and not only for CoSimulation)
35
Functions renamed:
36
fmiUpdateDiscreteStates -> fmiNewDiscreteStates
37
- June 13, 2013: Functions removed:
38
fmiInitializeModel
39
fmiEventUpdate
40
fmiCompletedEventIteration
41
fmiInitializeSlave
42
Functions added:
43
fmiEnterModelInitializationMode
44
fmiExitModelInitializationMode
45
fmiEnterEventMode
46
fmiUpdateDiscreteStates
47
fmiEnterContinuousTimeMode
48
fmiEnterSlaveInitializationMode;
49
fmiExitSlaveInitializationMode;
50
- Feb. 17, 2013: Portability improvements:
51
o DllExport changed to FMI_Export
52
o FUNCTION_PREFIX changed to FMI_FUNCTION_PREFIX
53
o Allow undefined FMI_FUNCTION_PREFIX (meaning no prefix is used)
54
Changed function name "fmiTerminate" to "fmiTerminateModel" (due to #113)
55
Changed function name "fmiGetNominalContinuousState" to
56
"fmiGetNominalsOfContinuousStates"
57
Removed fmiGetStateValueReferences.
58
- Nov. 14, 2011: Adapted to FMI 2.0:
59
o Split into two files (fmiFunctions.h, fmiTypes.h) in order
60
that code that dynamically loads an FMU can directly
61
utilize the header files).
62
o Added C++ encapsulation of C-part, in order that the header
63
file can be directly utilized in C++ code.
64
o fmiCallbackFunctions is passed as pointer to fmiInstantiateXXX
65
o stepFinished within fmiCallbackFunctions has as first
66
argument "fmiComponentEnvironment" and not "fmiComponent".
67
o New functions to get and set the complete FMU state
68
and to compute partial derivatives.
69
- Nov. 4, 2010: Adapted to specification text:
70
o fmiGetModelTypesPlatform renamed to fmiGetTypesPlatform
71
o fmiInstantiateSlave: Argument GUID replaced by fmuGUID
72
Argument mimetype replaced by mimeType
73
o tabs replaced by spaces
74
- Oct. 16, 2010: Functions for FMI for Co-simulation added
75
- Jan. 20, 2010: stateValueReferencesChanged added to struct fmiEventInfo (ticket #27)
76
(by M. Otter, DLR)
77
Added WIN32 pragma to define the struct layout (ticket #34)
78
(by J. Mauss, QTronic)
79
- Jan. 4, 2010: Removed argument intermediateResults from fmiInitialize
80
Renamed macro fmiGetModelFunctionsVersion to fmiGetVersion
81
Renamed macro fmiModelFunctionsVersion to fmiVersion
82
Replaced fmiModel by fmiComponent in decl of fmiInstantiateModel
83
(by J. Mauss, QTronic)
84
- Dec. 17, 2009: Changed extension "me" to "fmi" (by Martin Otter, DLR).
85
- Dez. 14, 2009: Added eventInfo to meInitialize and added
86
meGetNominalContinuousStates (by Martin Otter, DLR)
87
- Sept. 9, 2009: Added DllExport (according to Peter Nilsson's suggestion)
88
(by A. Junghanns, QTronic)
89
- Sept. 9, 2009: Changes according to FMI-meeting on July 21:
90
meInquireModelTypesVersion -> meGetModelTypesPlatform
91
meInquireModelFunctionsVersion -> meGetModelFunctionsVersion
92
meSetStates -> meSetContinuousStates
93
meGetStates -> meGetContinuousStates
94
removal of meInitializeModelClass
95
removal of meGetTime
96
change of arguments of meInstantiateModel
97
change of arguments of meCompletedIntegratorStep
98
(by Martin Otter, DLR):
99
- July 19, 2009: Added "me" as prefix to file names (by Martin Otter, DLR).
100
- March 2, 2009: Changed function definitions according to the last design
101
meeting with additional improvements (by Martin Otter, DLR).
102
- Dec. 3 , 2008: First version by Martin Otter (DLR) and Hans Olsson (Dynasim).
103
104
105
Copyright (C) 2008-2011 MODELISAR consortium,
106
2012-2019 Modelica Association Project "FMI"
107
All rights reserved.
108
109
This file is licensed by the copyright holders under the 2-Clause BSD License
110
(https://opensource.org/licenses/BSD-2-Clause):
111
112
----------------------------------------------------------------------------
113
Redistribution and use in source and binary forms, with or without
114
modification, are permitted provided that the following conditions are met:
115
116
- Redistributions of source code must retain the above copyright notice,
117
this list of conditions and the following disclaimer.
118
119
- Redistributions in binary form must reproduce the above copyright notice,
120
this list of conditions and the following disclaimer in the documentation
121
and/or other materials provided with the distribution.
122
123
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
124
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
125
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
126
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
127
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
128
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
129
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
130
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
131
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
132
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
133
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
134
----------------------------------------------------------------------------
135
*/
136
137
#ifdef __cplusplus
138
extern "C" {
139
#endif
140
141
#include "fmi2TypesPlatform.h"
142
#include "fmi2FunctionTypes.h"
143
#include <stdlib.h>
144
145
146
/*
147
Export FMI2 API functions on Windows and under GCC.
148
If custom linking is desired then the FMI2_Export must be
149
defined before including this file. For instance,
150
it may be set to __declspec(dllimport).
151
*/
152
#if !defined(FMI2_Export)
153
#if !defined(FMI2_FUNCTION_PREFIX)
154
#if defined _WIN32 || defined __CYGWIN__
155
/* Note: both gcc & MSVC on Windows support this syntax. */
156
#define FMI2_Export __declspec(dllexport)
157
#else
158
#if __GNUC__ >= 4
159
#define FMI2_Export __attribute__ ((visibility ("default")))
160
#else
161
#define FMI2_Export
162
#endif
163
#endif
164
#else
165
#define FMI2_Export
166
#endif
167
#endif
168
169
/* Macros to construct the real function name
170
(prepend function name by FMI2_FUNCTION_PREFIX) */
171
#if defined(FMI2_FUNCTION_PREFIX)
172
#define fmi2Paste(a,b) a ## b
173
#define fmi2PasteB(a,b) fmi2Paste(a,b)
174
#define fmi2FullName(name) fmi2PasteB(FMI2_FUNCTION_PREFIX, name)
175
#else
176
#define fmi2FullName(name) name
177
#endif
178
179
/***************************************************
180
Common Functions
181
****************************************************/
182
#define fmi2GetTypesPlatform fmi2FullName(fmi2GetTypesPlatform)
183
#define fmi2GetVersion fmi2FullName(fmi2GetVersion)
184
#define fmi2SetDebugLogging fmi2FullName(fmi2SetDebugLogging)
185
#define fmi2Instantiate fmi2FullName(fmi2Instantiate)
186
#define fmi2FreeInstance fmi2FullName(fmi2FreeInstance)
187
#define fmi2SetupExperiment fmi2FullName(fmi2SetupExperiment)
188
#define fmi2EnterInitializationMode fmi2FullName(fmi2EnterInitializationMode)
189
#define fmi2ExitInitializationMode fmi2FullName(fmi2ExitInitializationMode)
190
#define fmi2Terminate fmi2FullName(fmi2Terminate)
191
#define fmi2Reset fmi2FullName(fmi2Reset)
192
#define fmi2GetReal fmi2FullName(fmi2GetReal)
193
#define fmi2GetInteger fmi2FullName(fmi2GetInteger)
194
#define fmi2GetBoolean fmi2FullName(fmi2GetBoolean)
195
#define fmi2GetString fmi2FullName(fmi2GetString)
196
#define fmi2SetReal fmi2FullName(fmi2SetReal)
197
#define fmi2SetInteger fmi2FullName(fmi2SetInteger)
198
#define fmi2SetBoolean fmi2FullName(fmi2SetBoolean)
199
#define fmi2SetString fmi2FullName(fmi2SetString)
200
#define fmi2GetFMUstate fmi2FullName(fmi2GetFMUstate)
201
#define fmi2SetFMUstate fmi2FullName(fmi2SetFMUstate)
202
#define fmi2FreeFMUstate fmi2FullName(fmi2FreeFMUstate)
203
#define fmi2SerializedFMUstateSize fmi2FullName(fmi2SerializedFMUstateSize)
204
#define fmi2SerializeFMUstate fmi2FullName(fmi2SerializeFMUstate)
205
#define fmi2DeSerializeFMUstate fmi2FullName(fmi2DeSerializeFMUstate)
206
#define fmi2GetDirectionalDerivative fmi2FullName(fmi2GetDirectionalDerivative)
207
208
209
/***************************************************
210
Functions for FMI2 for Model Exchange
211
****************************************************/
212
#define fmi2EnterEventMode fmi2FullName(fmi2EnterEventMode)
213
#define fmi2NewDiscreteStates fmi2FullName(fmi2NewDiscreteStates)
214
#define fmi2EnterContinuousTimeMode fmi2FullName(fmi2EnterContinuousTimeMode)
215
#define fmi2CompletedIntegratorStep fmi2FullName(fmi2CompletedIntegratorStep)
216
#define fmi2SetTime fmi2FullName(fmi2SetTime)
217
#define fmi2SetContinuousStates fmi2FullName(fmi2SetContinuousStates)
218
#define fmi2GetDerivatives fmi2FullName(fmi2GetDerivatives)
219
#define fmi2GetEventIndicators fmi2FullName(fmi2GetEventIndicators)
220
#define fmi2GetContinuousStates fmi2FullName(fmi2GetContinuousStates)
221
#define fmi2GetNominalsOfContinuousStates fmi2FullName(fmi2GetNominalsOfContinuousStates)
222
223
224
/***************************************************
225
Functions for FMI2 for Co-Simulation
226
****************************************************/
227
#define fmi2SetRealInputDerivatives fmi2FullName(fmi2SetRealInputDerivatives)
228
#define fmi2GetRealOutputDerivatives fmi2FullName(fmi2GetRealOutputDerivatives)
229
#define fmi2DoStep fmi2FullName(fmi2DoStep)
230
#define fmi2CancelStep fmi2FullName(fmi2CancelStep)
231
#define fmi2GetStatus fmi2FullName(fmi2GetStatus)
232
#define fmi2GetRealStatus fmi2FullName(fmi2GetRealStatus)
233
#define fmi2GetIntegerStatus fmi2FullName(fmi2GetIntegerStatus)
234
#define fmi2GetBooleanStatus fmi2FullName(fmi2GetBooleanStatus)
235
#define fmi2GetStringStatus fmi2FullName(fmi2GetStringStatus)
236
237
/* Version number */
238
#define fmi2Version "2.0"
239
240
241
/***************************************************
242
Common Functions
243
****************************************************/
244
245
/* Inquire version numbers of header files */
246
FMI2_Export fmi2GetTypesPlatformTYPE fmi2GetTypesPlatform;
247
FMI2_Export fmi2GetVersionTYPE fmi2GetVersion;
248
FMI2_Export fmi2SetDebugLoggingTYPE fmi2SetDebugLogging;
249
250
/* Creation and destruction of FMU instances */
251
FMI2_Export fmi2InstantiateTYPE fmi2Instantiate;
252
FMI2_Export fmi2FreeInstanceTYPE fmi2FreeInstance;
253
254
/* Enter and exit initialization mode, terminate and reset */
255
FMI2_Export fmi2SetupExperimentTYPE fmi2SetupExperiment;
256
FMI2_Export fmi2EnterInitializationModeTYPE fmi2EnterInitializationMode;
257
FMI2_Export fmi2ExitInitializationModeTYPE fmi2ExitInitializationMode;
258
FMI2_Export fmi2TerminateTYPE fmi2Terminate;
259
FMI2_Export fmi2ResetTYPE fmi2Reset;
260
261
/* Getting and setting variables values */
262
FMI2_Export fmi2GetRealTYPE fmi2GetReal;
263
FMI2_Export fmi2GetIntegerTYPE fmi2GetInteger;
264
FMI2_Export fmi2GetBooleanTYPE fmi2GetBoolean;
265
FMI2_Export fmi2GetStringTYPE fmi2GetString;
266
267
FMI2_Export fmi2SetRealTYPE fmi2SetReal;
268
FMI2_Export fmi2SetIntegerTYPE fmi2SetInteger;
269
FMI2_Export fmi2SetBooleanTYPE fmi2SetBoolean;
270
FMI2_Export fmi2SetStringTYPE fmi2SetString;
271
272
/* Getting and setting the internal FMU state */
273
FMI2_Export fmi2GetFMUstateTYPE fmi2GetFMUstate;
274
FMI2_Export fmi2SetFMUstateTYPE fmi2SetFMUstate;
275
FMI2_Export fmi2FreeFMUstateTYPE fmi2FreeFMUstate;
276
FMI2_Export fmi2SerializedFMUstateSizeTYPE fmi2SerializedFMUstateSize;
277
FMI2_Export fmi2SerializeFMUstateTYPE fmi2SerializeFMUstate;
278
FMI2_Export fmi2DeSerializeFMUstateTYPE fmi2DeSerializeFMUstate;
279
280
/* Getting partial derivatives */
281
FMI2_Export fmi2GetDirectionalDerivativeTYPE fmi2GetDirectionalDerivative;
282
283
284
/***************************************************
285
Functions for FMI2 for Model Exchange
286
****************************************************/
287
288
/* Enter and exit the different modes */
289
FMI2_Export fmi2EnterEventModeTYPE fmi2EnterEventMode;
290
FMI2_Export fmi2NewDiscreteStatesTYPE fmi2NewDiscreteStates;
291
FMI2_Export fmi2EnterContinuousTimeModeTYPE fmi2EnterContinuousTimeMode;
292
FMI2_Export fmi2CompletedIntegratorStepTYPE fmi2CompletedIntegratorStep;
293
294
/* Providing independent variables and re-initialization of caching */
295
FMI2_Export fmi2SetTimeTYPE fmi2SetTime;
296
FMI2_Export fmi2SetContinuousStatesTYPE fmi2SetContinuousStates;
297
298
/* Evaluation of the model equations */
299
FMI2_Export fmi2GetDerivativesTYPE fmi2GetDerivatives;
300
FMI2_Export fmi2GetEventIndicatorsTYPE fmi2GetEventIndicators;
301
FMI2_Export fmi2GetContinuousStatesTYPE fmi2GetContinuousStates;
302
FMI2_Export fmi2GetNominalsOfContinuousStatesTYPE fmi2GetNominalsOfContinuousStates;
303
304
305
/***************************************************
306
Functions for FMI2 for Co-Simulation
307
****************************************************/
308
309
/* Simulating the slave */
310
FMI2_Export fmi2SetRealInputDerivativesTYPE fmi2SetRealInputDerivatives;
311
FMI2_Export fmi2GetRealOutputDerivativesTYPE fmi2GetRealOutputDerivatives;
312
313
FMI2_Export fmi2DoStepTYPE fmi2DoStep;
314
FMI2_Export fmi2CancelStepTYPE fmi2CancelStep;
315
316
/* Inquire slave status */
317
FMI2_Export fmi2GetStatusTYPE fmi2GetStatus;
318
FMI2_Export fmi2GetRealStatusTYPE fmi2GetRealStatus;
319
FMI2_Export fmi2GetIntegerStatusTYPE fmi2GetIntegerStatus;
320
FMI2_Export fmi2GetBooleanStatusTYPE fmi2GetBooleanStatus;
321
FMI2_Export fmi2GetStringStatusTYPE fmi2GetStringStatus;
322
323
#ifdef __cplusplus
324
} /* end of extern "C" { */
325
#endif
326
327
#endif /* fmi2Functions_h */
328
329