Skip to content

Commit 5497eec

Browse files
committed
- source code documentation.
- some small fixes in the code generation. git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@13160 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 57e6841 commit 5497eec

File tree

5 files changed

+101
-18
lines changed

5 files changed

+101
-18
lines changed

Compiler/Template/CodegenFMU.tpl

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,10 +1115,10 @@ case FMIIMPORT(fmiInfo=INFO(__),fmiExperimentAnnotation=EXPERIMENTANNOTATION(__)
11151115
constant String fmuWorkingDir = "<%fmuWorkingDirectory%>";
11161116
constant Integer fmiLogLevel = <%fmiLogLevel%>;
11171117
<%dumpFMIModelVariablesList(fmiModelVariablesList)%>
1118-
constant Integer numberOfContinuousStates = <%fmiInfo.fmiNumberOfContinuousStates%>;
1118+
constant Integer numberOfContinuousStates = <%listLength(fmiInfo.fmiNumberOfContinuousStates)%>;
11191119
Real fmi_x[numberOfContinuousStates] "States";
11201120
Real fmi_x_new[numberOfContinuousStates] "New States";
1121-
constant Integer numberOfEventIndicators = <%fmiInfo.fmiNumberOfEventIndicators%>;
1121+
constant Integer numberOfEventIndicators = <%listLength(fmiInfo.fmiNumberOfEventIndicators)%>;
11221122
Real fmi_z[numberOfEventIndicators] "Events Indicators";
11231123
Boolean fmi_z_positive[numberOfEventIndicators];
11241124
constant Boolean debugLogging = true;
@@ -1213,8 +1213,6 @@ case FMIIMPORT(fmiInfo=INFO(__),fmiExperimentAnnotation=EXPERIMENTANNOTATION(__)
12131213
input fmiImportInstance fmi;
12141214
input Integer numberOfEventIndicators;
12151215
output Real fmi_z[numberOfEventIndicators];
1216-
//output Integer status;
1217-
//external "C" status = fmiGetEventIndicators_OMC(fmi, numberOfEventIndicators, fmi_z) annotation(Library = {"omcruntime", "fmilib"});
12181216
external "C" fmiGetEventIndicators_OMC(fmi, numberOfEventIndicators, fmi_z) annotation(Library = {"omcruntime", "fmilib"});
12191217
end fmiGetEventIndicators;
12201218

@@ -1339,11 +1337,11 @@ case FMIIMPORT(fmiInfo=INFO(__),fmiExperimentAnnotation=EXPERIMENTANNOTATION(__)
13391337
fmi_z_positive[i] = fmi_z[i] > 0;
13401338
end for;
13411339
algorithm
1342-
when change(fmi_z_positive) and not initial() then
1340+
when (<%fmiInfo.fmiNumberOfEventIndicators |> eventIndicator => "change(fmi_z_positive["+eventIndicator+"])" ;separator=" or "%>) and not initial() then
13431341
//eventInfo := fmiFunctions.fmiEventUpdate(fmi, callEventUpdate, eventInfo);
13441342
fmiFunctions.fmiEventUpdate(fmi, callEventUpdate, eventInfo);
13451343
fmi_x_new := fmiFunctions.fmiGetContinuousStates(fmi, numberOfContinuousStates);
1346-
reinit(fmi_x, fmi_x_new);
1344+
<%fmiInfo.fmiNumberOfContinuousStates |> continuousStates => "reinit(fmi_x["+continuousStates+"], fmi_x_new["+continuousStates+"]);" ;separator="\n"%>
13471345
end when;
13481346
equation
13491347
fmiFunctions.fmiCompletedIntegratorStep(fmi, callEventUpdate);

Compiler/Template/SimCodeTV.mo

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2571,8 +2571,8 @@ package FMI
25712571
String fmiGenerationTool;
25722572
String fmiGenerationDateAndTime;
25732573
String fmiVariableNamingConvention;
2574-
Integer fmiNumberOfContinuousStates;
2575-
Integer fmiNumberOfEventIndicators;
2574+
list<Integer> fmiNumberOfContinuousStates;
2575+
list<Integer> fmiNumberOfEventIndicators;
25762576
end INFO;
25772577
end Info;
25782578

Compiler/Util/FMI.mo

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ public uniontype Info
4343
String fmiGenerationTool;
4444
String fmiGenerationDateAndTime;
4545
String fmiVariableNamingConvention;
46-
Integer fmiNumberOfContinuousStates;
47-
Integer fmiNumberOfEventIndicators;
46+
list<Integer> fmiNumberOfContinuousStates;
47+
list<Integer> fmiNumberOfEventIndicators;
4848
end INFO;
4949
end Info;
5050

Compiler/runtime/FMIImpl.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,9 +280,21 @@ int FMIImpl__initializeFMIImport(const char* file_name, const char* working_dire
280280
unsigned int numberOfContinuousStates = fmi1_import_get_number_of_continuous_states(fmi);
281281
/* Read the FMI number of event indicators from FMU's modelDescription.xml file. */
282282
unsigned int numberOfEventIndicators = fmi1_import_get_number_of_event_indicators(fmi);
283+
/* construct continuous states list record */
284+
int i = 1;
285+
void* continuousStatesList = mk_nil();
286+
for (i ; i <= numberOfContinuousStates ; i++) {
287+
continuousStatesList = mk_cons(mk_icon(i), continuousStatesList);
288+
}
289+
/* construct event indicators list record */
290+
i = 1;
291+
void* eventIndicatorsList = mk_nil();
292+
for (i ; i <= numberOfContinuousStates ; i++) {
293+
eventIndicatorsList = mk_cons(mk_icon(i), eventIndicatorsList);
294+
}
283295
/* construct FMIINFO record */
284296
*fmiInfo = FMI__INFO(mk_scon(fmi_version_to_string(version)), mk_scon(modelName), mk_scon(modelIdentifier), mk_scon(guid), mk_scon(description),
285-
mk_scon(generationTool), mk_scon(generationDateAndTime), mk_scon(namingConvention), mk_icon(numberOfContinuousStates), mk_icon(numberOfEventIndicators));
297+
mk_scon(generationTool), mk_scon(generationDateAndTime), mk_scon(namingConvention), continuousStatesList, eventIndicatorsList);
286298
/* Read the FMI Default Experiment Start value from FMU's modelDescription.xml file. */
287299
double experimentStartTime = fmi1_import_get_default_experiment_start(fmi);
288300
/* Read the FMI Default Experiment Stop value from FMU's modelDescription.xml file. */
@@ -296,7 +308,7 @@ int FMIImpl__initializeFMIImport(const char* file_name, const char* working_dire
296308
size_t model_variables_list_size = fmi1_import_get_variable_list_size(model_variables_list);
297309
/* get model variables value reference list */
298310
const fmi1_value_reference_t* model_variables_value_reference_list = fmi1_import_get_value_referece_list(model_variables_list);
299-
int i = 0;
311+
i = 0;
300312
*modelVariablesList = mk_nil();
301313
int realCount, integerCount, booleanCount, stringCount, enumerationCount;
302314
realCount = integerCount = booleanCount = stringCount = enumerationCount = 0;

Compiler/runtime/FMIWrapper.c

Lines changed: 79 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,12 +133,18 @@ void fmiImportFreeInstance_OMC(void* fmi)
133133
fmi1_import_free(fmi1);
134134
}
135135

136+
/*
137+
* Destroys the instance of the FMI Event Info i.e fmi1_event_info_t
138+
*/
136139
void fmiFreeEventInfo_OMC(void* eventInfo)
137140
{
138141
if ((fmi1_event_info_t*)eventInfo != NULL)
139142
free((fmi1_event_info_t*)eventInfo);
140143
}
141144

145+
/*
146+
* Wrapper for the FMI function fmiInstantiateModel.
147+
*/
142148
void fmiInstantiateModel_OMC(void* fmi, const char* instanceName)
143149
{
144150
jm_status_enu_t status = fmi1_import_instantiate_model((fmi1_import_t*)fmi, instanceName);
@@ -147,11 +153,19 @@ void fmiInstantiateModel_OMC(void* fmi, const char* instanceName)
147153
}
148154
}
149155

156+
/*
157+
* Wrapper for the FMI function fmiSetTime.
158+
* Returns status.
159+
*/
150160
int fmiSetTime_OMC(void* fmi, double time)
151161
{
152162
return fmi1_import_set_time((fmi1_import_t*)fmi, time);
153163
}
154164

165+
/*
166+
* Wrapper for the FMI function fmiInitialize.
167+
* Returns FMI Event Info i.e fmi1_event_info_t.
168+
*/
155169
void* fmiInitialize_OMC(void* fmi)
156170
{
157171
fmi1_boolean_t toleranceControlled = fmi1_true;
@@ -168,11 +182,19 @@ void* fmiInitialize_OMC(void* fmi)
168182
return eventInfo;
169183
}
170184

185+
/*
186+
* Wrapper for the FMI function fmiSetDebugLogging.
187+
* Returns status.
188+
*/
171189
int fmiSetDebugLogging_OMC(void* fmi, int debugLogging)
172190
{
173191
return fmi1_import_set_debug_logging((fmi1_import_t*)fmi, debugLogging);
174192
}
175193

194+
/*
195+
* Wrapper for the FMI function fmiGetContinuousStates.
196+
* Returns states.
197+
*/
176198
void fmiGetContinuousStates_OMC(void* fmi, int numberOfContinuousStates, double* states)
177199
{
178200
fmi1_status_t fmistatus = fmi1_import_get_continuous_states((fmi1_import_t*)fmi, (fmi1_real_t*)states, numberOfContinuousStates);
@@ -185,11 +207,19 @@ void fmiGetContinuousStates_OMC(void* fmi, int numberOfContinuousStates, double*
185207
}
186208
}
187209

210+
/*
211+
* Wrapper for the FMI function fmiSetContinuousStates.
212+
* Returns status.
213+
*/
188214
int fmiSetContinuousStates_OMC(void* fmi, int numberOfContinuousStates, double* states)
189215
{
190216
return fmi1_import_set_continuous_states((fmi1_import_t*)fmi, (fmi1_real_t*)states, numberOfContinuousStates);
191217
}
192218

219+
/*
220+
* Wrapper for the FMI function fmiGetEventIndicators.
221+
* Returns events.
222+
*/
193223
void fmiGetEventIndicators_OMC(void* fmi, int numberOfEventIndicators, double* events)
194224
{
195225
fmi1_status_t fmistatus = fmi1_import_get_event_indicators((fmi1_import_t*)fmi, (fmi1_real_t*)events, numberOfEventIndicators);
@@ -207,6 +237,10 @@ void fmiGetEventIndicators_OMC(void* fmi, int numberOfEventIndicators, double* e
207237
}
208238
}
209239

240+
/*
241+
* Wrapper for the FMI function fmiGetDerivatives.
242+
* Returns states.
243+
*/
210244
void fmiGetDerivatives_OMC(void* fmi, int numberOfContinuousStates, double* states)
211245
{
212246
fmi1_status_t fmistatus = fmi1_import_get_derivatives((fmi1_import_t*)fmi, (fmi1_real_t*)states, numberOfContinuousStates);
@@ -219,6 +253,10 @@ void fmiGetDerivatives_OMC(void* fmi, int numberOfContinuousStates, double* stat
219253
}
220254
}
221255

256+
/*
257+
* Wrapper for the FMI function fmiGetReal.
258+
* Returns realValues.
259+
*/
222260
void fmiGetReal_OMC(void* fmi, int numberOfValueReferences, int* realValuesReferences, double* realValues)
223261
{
224262
fmi1_status_t fmistatus = fmi1_import_get_real((fmi1_import_t*)fmi, (fmi1_value_reference_t*)realValuesReferences, numberOfValueReferences, (fmi1_real_t*)realValues);
@@ -231,11 +269,19 @@ void fmiGetReal_OMC(void* fmi, int numberOfValueReferences, int* realValuesRefer
231269
}
232270
}
233271

272+
/*
273+
* Wrapper for the FMI function fmiSetReal.
274+
* Returns status.
275+
*/
234276
int fmiSetReal_OMC(void* fmi, int numberOfValueReferences, int* realValuesReferences, double* realValues)
235277
{
236278
return fmi1_import_set_real((fmi1_import_t*)fmi, (fmi1_value_reference_t*)realValuesReferences, numberOfValueReferences, (fmi1_real_t*)realValues);
237279
}
238280

281+
/*
282+
* Wrapper for the FMI function fmiGetInteger.
283+
* Returns integerValues.
284+
*/
239285
void fmiGetInteger_OMC(void* fmi, int numberOfValueReferences, int* integerValuesReferences, int* integerValues)
240286
{
241287
fmi1_status_t fmistatus = fmi1_import_get_integer((fmi1_import_t*)fmi, (fmi1_value_reference_t*)integerValuesReferences, numberOfValueReferences, (fmi1_integer_t*)integerValues);
@@ -248,11 +294,19 @@ void fmiGetInteger_OMC(void* fmi, int numberOfValueReferences, int* integerValue
248294
}
249295
}
250296

297+
/*
298+
* Wrapper for the FMI function fmiSetInteger.
299+
* Returns status.
300+
*/
251301
int fmiSetInteger_OMC(void* fmi, int numberOfValueReferences, int* integerValuesReferences, int* integerValues)
252302
{
253303
return fmi1_import_set_integer((fmi1_import_t*)fmi, (fmi1_value_reference_t*)integerValuesReferences, numberOfValueReferences, (fmi1_integer_t*)integerValues);
254304
}
255305

306+
/*
307+
* Wrapper for the FMI function fmiGetBoolean.
308+
* Returns booleanValues.
309+
*/
256310
void fmiGetBoolean_OMC(void* fmi, int numberOfValueReferences, int* booleanValuesReferences, int* booleanValues)
257311
{
258312
fmi1_status_t fmistatus = fmi1_import_get_boolean((fmi1_import_t*)fmi, (fmi1_value_reference_t*)booleanValuesReferences, numberOfValueReferences, (fmi1_boolean_t*)booleanValues);
@@ -265,11 +319,19 @@ void fmiGetBoolean_OMC(void* fmi, int numberOfValueReferences, int* booleanValue
265319
}
266320
}
267321

322+
/*
323+
* Wrapper for the FMI function fmiSetBoolean.
324+
* Returns status.
325+
*/
268326
int fmiSetBoolean_OMC(void* fmi, int numberOfValueReferences, int* booleanValuesReferences, int* booleanValues)
269327
{
270328
return fmi1_import_set_boolean((fmi1_import_t*)fmi, (fmi1_value_reference_t*)booleanValuesReferences, numberOfValueReferences, (fmi1_boolean_t*)booleanValues);
271329
}
272330

331+
/*
332+
* Wrapper for the FMI function fmiGetString.
333+
* Returns stringValues.
334+
*/
273335
void fmiGetString_OMC(void* fmi, int numberOfValueReferences, int* stringValuesReferences, char** stringValues)
274336
{
275337
fmi1_status_t fmistatus = fmi1_import_get_string((fmi1_import_t*)fmi, (fmi1_value_reference_t*)stringValuesReferences, numberOfValueReferences, (fmi1_string_t*)stringValues);
@@ -282,18 +344,29 @@ void fmiGetString_OMC(void* fmi, int numberOfValueReferences, int* stringValuesR
282344
}
283345
}
284346

347+
/*
348+
* Wrapper for the FMI function fmiSetString.
349+
* Returns status.
350+
*/
285351
int fmiSetString_OMC(void* fmi, int numberOfValueReferences, int* stringValuesReferences, char** stringValues)
286352
{
287353
return fmi1_import_set_string((fmi1_import_t*)fmi, (fmi1_value_reference_t*)stringValuesReferences, numberOfValueReferences, (fmi1_string_t*)stringValues);
288354
}
289355

356+
/*
357+
* Wrapper for the FMI function fmiEventUpdate.
358+
* Returns FMI Event Info i.e fmi1_event_info_t
359+
*/
290360
void* fmiEventUpdate_OMC(void* fmi, int intermediateResults, void* eventInfo)
291361
{
292362
//fprintf(stderr, "yesss in fmiEventUpdate\n");fflush(NULL);
293363
fmi1_import_eventUpdate((fmi1_import_t*)fmi, intermediateResults, (fmi1_event_info_t*)eventInfo);
294364
return eventInfo;
295365
}
296366

367+
/*
368+
* Wrapper for the FMI function fmiCompletedIntegratorStep.
369+
*/
297370
int fmiCompletedIntegratorStep_OMC(void* fmi, int in_callEventUpdate)
298371
{
299372
fmi1_status_t fmistatus = fmi1_import_completed_integrator_step((fmi1_import_t*)fmi, (fmi1_boolean_t*)&in_callEventUpdate);
@@ -303,12 +376,12 @@ int fmiCompletedIntegratorStep_OMC(void* fmi, int in_callEventUpdate)
303376

304377
void printZ_OMC(int len, int* zVals)
305378
{
306-
//fprintf(stderr, "yesss in fmiEventUpdate %d \n", len);fflush(NULL);
307-
int i = 0;
308-
for (i;i<len;i++)
309-
{
310-
//fprintf(stderr, "%d value is = %d\n", i, zVals[i]);fflush(NULL);
311-
}
379+
// fprintf(stderr, "yesss in fmiEventUpdate %d \n", len);fflush(NULL);
380+
// int i = 0;
381+
// for (i;i<len;i++)
382+
// {
383+
// fprintf(stderr, "%d value is = %d\n", i, zVals[i]);fflush(NULL);
384+
// }
312385
}
313386

314387
#ifdef __cplusplus

0 commit comments

Comments
 (0)