fmi2Functions.h 17 KB

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