2 Copyright (C) 2012 Modelon AB
\r
4 This program is free software: you can redistribute it and/or modify
\r
5 it under the terms of the BSD style license.
\r
7 the Free Software Foundation, version 3 of the License.
\r
9 This program is distributed in the hope that it will be useful,
\r
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
12 FMILIB_License.txt file for more details.
\r
14 You should have received a copy of the FMILIB_License.txt file
\r
15 along with this program. If not, contact Modelon AB <http://www.modelon.com>.
\r
18 #ifndef FMU2_MODEL_H_
\r
19 #define FMU2_MODEL_H_
\r
20 #include <FMI2/fmi2Functions.h>
\r
22 #include <fmu_dummy/fmu2_model_defines.h>
\r
24 #define FMI2_Export DllExport
\r
27 /*************** FMI ME 2.0 ****************/
\r
28 fmi2Real states [N_STATES];
\r
29 fmi2Real states_nom [N_STATES];
\r
30 fmi2Real states_der [N_STATES];
\r
31 fmi2Real event_indicators[N_EVENT_INDICATORS];
\r
32 fmi2Real reals [N_REAL];
\r
33 fmi2Integer integers [N_INTEGER];
\r
34 fmi2Boolean booleans [N_BOOLEAN];
\r
35 fmi2String strings [N_STRING];
\r
37 /* fmiInstantiateModel */
\r
38 fmi2Boolean loggingOn;
\r
39 char instanceName [BUFFER];
\r
41 const fmi2CallbackFunctions* functions;
\r
46 /* fmiInitializeModel */
\r
47 fmi2Boolean toleranceControlled;
\r
48 fmi2Real relativeTolerance;
\r
49 fmi2EventInfo eventInfo;
\r
51 /*************** FMI CS 2.0. Depends on the ME fields above and functions ****************/
\r
52 fmi2Real states_prev [N_STATES];
\r
54 /* fmiInstantiateSlave */
\r
55 char fmuLocation [BUFFER];
\r
56 fmi2Boolean visible;
\r
58 /* fmiInitializeSlave */
\r
60 fmi2Boolean StopTimeDefined;
\r
63 /* fmiSetRealInputDerivatives */
\r
64 fmi2Real input_real [N_INPUT_REAL][N_INPUT_REAL_MAX_ORDER + 1];
\r
66 /* fmiGetRealOutputDerivatives */
\r
67 fmi2Real output_real [N_OUTPUT_REAL][N_OUTPUT_REAL_MAX_ORDER + 1];
\r
71 typedef component_t* component_ptr_t;
\r
73 /* FMI 2.0 Common Functions */
\r
74 const char* fmi_get_version();
\r
76 fmi2Status fmi_set_debug_logging(
\r
78 fmi2Boolean loggingOn);
\r
80 fmi2Component fmi_instantiate (
\r
81 fmi2String instanceName,
\r
84 fmi2String fmuLocation,
\r
85 const fmi2CallbackFunctions* functions,
\r
86 fmi2Boolean visible,
\r
87 fmi2Boolean loggingOn);
\r
89 void fmi_free_instance(
\r
92 fmi2Status fmi_setup_experiment(fmi2Component c,
\r
93 fmi2Boolean toleranceDefined, fmi2Real tolerance,
\r
94 fmi2Real startTime, fmi2Boolean stopTimeDefined,
\r
96 fmi2Status fmi_enter_initialization_mode(fmi2Component c);
\r
97 fmi2Status fmi_exit_initialization_mode(fmi2Component c);
\r
99 fmi2Status fmi_terminate(fmi2Component c);
\r
101 fmi2Status fmi_reset(
\r
105 fmi2Status fmi_get_real(
\r
107 const fmi2ValueReference vr[],
\r
108 size_t nvr, fmi2Real value[]);
\r
110 fmi2Status fmi_get_integer(
\r
112 const fmi2ValueReference vr[],
\r
114 fmi2Integer value[]);
\r
115 fmi2Status fmi_get_boolean(
\r
117 const fmi2ValueReference vr[],
\r
119 fmi2Boolean value[]);
\r
121 fmi2Status fmi_get_string(
\r
123 const fmi2ValueReference vr[],
\r
125 fmi2String value[]);
\r
127 fmi2Status fmi_set_real(
\r
129 const fmi2ValueReference vr[],
\r
131 const fmi2Real value[]);
\r
132 fmi2Status fmi_set_integer(
\r
134 const fmi2ValueReference vr[],
\r
136 const fmi2Integer value[]);
\r
138 fmi2Status fmi_set_boolean(
\r
140 const fmi2ValueReference vr[],
\r
142 const fmi2Boolean value[]);
\r
144 fmi2Status fmi_set_string(
\r
146 const fmi2ValueReference vr[],
\r
148 const fmi2String value[]);
\r
150 /* FMI 2.0 ME Functions */
\r
151 const char* fmi_get_model_types_platform();
\r
153 fmi2Status fmi_enter_event_mode(fmi2Component c);
\r
154 fmi2Status fmi_new_discrete_states(fmi2Component c, fmi2EventInfo* eventInfo);
\r
155 fmi2Status fmi_enter_continuous_time_mode(fmi2Component c);
\r
157 fmi2Status fmi_set_time(
\r
161 fmi2Status fmi_set_continuous_states(
\r
163 const fmi2Real x[],
\r
166 fmi2Status fmi_completed_integrator_step(
\r
168 fmi2Boolean noSetFMUStatePriorToCurrentPoint,
\r
169 fmi2Boolean* enterEventMode, fmi2Boolean* terminateSimulation);
\r
171 fmi2Status fmi_get_derivatives(
\r
173 fmi2Real derivatives[],
\r
176 fmi2Status fmi_get_event_indicators(
\r
178 fmi2Real eventIndicators[],
\r
181 fmi2Status fmi_get_continuous_states(
\r
186 fmi2Status fmi_get_nominals_of_continuousstates(
\r
188 fmi2Real x_nominal[],
\r
192 /* FMI 2.0 CS Functions */
\r
193 #ifdef fmi2Functions_h
\r
195 const char* fmi_get_types_platform();
\r
197 void fmi_free_slave_instance(
\r
200 fmi2Status fmi_set_real_input_derivatives(
\r
202 const fmi2ValueReference vr[],
\r
204 const fmi2Integer order[],
\r
205 const fmi2Real value[]);
\r
207 fmi2Status fmi_get_real_output_derivatives(
\r
209 const fmi2ValueReference vr[],
\r
211 const fmi2Integer order[],
\r
214 fmi2Status fmi_cancel_step(
\r
216 fmi2Status fmi_do_step(
\r
218 fmi2Real currentCommunicationPoint,
\r
219 fmi2Real communicationStepSize,
\r
220 fmi2Boolean newStep);
\r
222 fmi2Status fmi_get_status(
\r
224 const fmi2StatusKind s,
\r
225 fmi2Status* value);
\r
227 fmi2Status fmi_get_real_status(
\r
229 const fmi2StatusKind s,
\r
232 fmi2Status fmi_get_integer_status(
\r
234 const fmi2StatusKind s,
\r
235 fmi2Integer* value);
\r
237 fmi2Status fmi_get_boolean_status(
\r
239 const fmi2StatusKind s,
\r
240 fmi2Boolean* value);
\r
242 fmi2Status fmi_get_string_status(
\r
244 const fmi2StatusKind s,
\r
245 fmi2String* value);
\r
247 #endif /* End of fmi2Functions_h */
\r
248 #endif /* End of header FMU2_MODEL_H_ */
\r