Changeset 13379
- Timestamp:
- 2012-10-14T22:49:11+02:00 (12 years ago)
- Location:
- trunk/Compiler
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Compiler/Template/CodegenFMU.tpl
r13346 r13379 1206 1206 input fmiImportInstance fmi; 1207 1207 input Real in_time; 1208 output Integer status; 1209 external "C" status = fmiSetTime_OMC(fmi, in_time) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1208 input Real inFlow; 1209 output Real status; 1210 external "C" status = fmiSetTime_OMC(fmi, in_time, inFlow) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1210 1211 end fmiSetTime; 1211 1212 … … 1219 1220 input fmiImportInstance fmi; 1220 1221 input Integer numberOfContinuousStates; 1222 input Real inFlow; 1221 1223 output Real fmi_x[numberOfContinuousStates]; 1222 external "C" fmiGetContinuousStates_OMC(fmi, numberOfContinuousStates, fmi_x ) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>});1224 external "C" fmiGetContinuousStates_OMC(fmi, numberOfContinuousStates, fmi_x, inFlow) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1223 1225 end fmiGetContinuousStates; 1224 1226 … … 1226 1228 input fmiImportInstance fmi; 1227 1229 input Real fmi_x[:]; 1228 output Integer status; 1229 external "C" status = fmiSetContinuousStates_OMC(fmi, size(fmi_x, 1), fmi_x) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1230 input Real inFlow; 1231 output Real status; 1232 external "C" status = fmiSetContinuousStates_OMC(fmi, size(fmi_x, 1), fmi_x, inFlow) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1230 1233 end fmiSetContinuousStates; 1231 1234 … … 1233 1236 input fmiImportInstance fmi; 1234 1237 input Integer numberOfEventIndicators; 1238 input Real inFlow; 1235 1239 output Real fmi_z[numberOfEventIndicators]; 1236 external "C" fmiGetEventIndicators_OMC(fmi, numberOfEventIndicators, fmi_z ) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>});1240 external "C" fmiGetEventIndicators_OMC(fmi, numberOfEventIndicators, fmi_z, inFlow) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1237 1241 end fmiGetEventIndicators; 1238 1242 … … 1240 1244 input fmiImportInstance fmi; 1241 1245 input Integer numberOfContinuousStates; 1246 input Real inFlow; 1242 1247 output Real fmi_x[numberOfContinuousStates]; 1243 external "C" fmiGetDerivatives_OMC(fmi, numberOfContinuousStates, fmi_x ) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>});1248 external "C" fmiGetDerivatives_OMC(fmi, numberOfContinuousStates, fmi_x, inFlow) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1244 1249 end fmiGetDerivatives; 1245 1250 … … 1247 1252 input fmiImportInstance fmi; 1248 1253 input Integer realValuesReferences[:]; 1254 input Real inFlow; 1249 1255 output Real realValues[size(realValuesReferences, 1)]; 1250 external "C" fmiGetReal_OMC(fmi, size(realValuesReferences, 1), realValuesReferences, realValues ) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>});1256 external "C" fmiGetReal_OMC(fmi, size(realValuesReferences, 1), realValuesReferences, realValues, inFlow) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1251 1257 end fmiGetReal; 1252 1258 … … 1262 1268 input fmiImportInstance fmi; 1263 1269 input Integer integerValuesReferences[:]; 1270 input Real inFlow; 1264 1271 output Integer integerValues[size(integerValuesReferences, 1)]; 1265 external "C" fmiGetInteger_OMC(fmi, size(integerValuesReferences, 1), integerValuesReferences, integerValues ) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>});1272 external "C" fmiGetInteger_OMC(fmi, size(integerValuesReferences, 1), integerValuesReferences, integerValues, inFlow) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1266 1273 end fmiGetInteger; 1267 1274 … … 1277 1284 input fmiImportInstance fmi; 1278 1285 input Integer booleanValuesReferences[:]; 1286 input Real inFlow; 1279 1287 output Boolean booleanValues[size(booleanValuesReferences, 1)]; 1280 external "C" fmiGetBoolean_OMC(fmi, size(booleanValuesReferences, 1), booleanValuesReferences, booleanValues ) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>});1288 external "C" fmiGetBoolean_OMC(fmi, size(booleanValuesReferences, 1), booleanValuesReferences, booleanValues, inFlow) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1281 1289 end fmiGetBoolean; 1282 1290 … … 1292 1300 input fmiImportInstance fmi; 1293 1301 input Integer stringValuesReferences[:]; 1302 input Real inFlow; 1294 1303 output String stringValues[size(stringValuesReferences, 1)]; 1295 external "C" fmiGetString_OMC(fmi, size(stringValuesReferences, 1), stringValuesReferences, stringValues ) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>});1304 external "C" fmiGetString_OMC(fmi, size(stringValuesReferences, 1), stringValuesReferences, stringValues, inFlow) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1296 1305 end fmiGetString; 1297 1306 … … 1315 1324 input fmiImportInstance fmi; 1316 1325 input Boolean in_callEventUpdate; 1317 output Boolean out_callEventUpdate; 1318 external "C" out_callEventUpdate = fmiCompletedIntegratorStep_OMC(fmi, in_callEventUpdate) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1326 input Real inFlow; 1327 output Real out_Flow; 1328 external "C" out_Flow = fmiCompletedIntegratorStep_OMC(fmi, in_callEventUpdate, inFlow) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1319 1329 end fmiCompletedIntegratorStep; 1320 1330 … … 1340 1350 constant Integer jmWarning=2; 1341 1351 end jmStatus; 1352 Real flowControlTime; 1353 Real flowControlEvent; 1354 Real flowControlStatesInputs; 1355 Boolean initializationDone(start=false); 1342 1356 initial algorithm 1343 fmiFunctions.fmiInstantiateModel(fmi, "<%fmiInfo.fmiModelIdentifier%>"); 1344 fmi_status := fmiFunctions.fmiSetDebugLogging(fmi, debugLogging); 1345 fmi_status := fmiFunctions.fmiSetTime(fmi, time); 1346 <%/*if not stringEq(realStartVariables, "0") then "fmi_status := fmiFunctions.fmiSetReal(fmi, {"+dumpStartRealVariablesValueReference(fmiModelVariablesList)+"}, {"+dumpStartRealVariablesName(fmiModelVariablesList)+"});"%> 1347 <%if not stringEq(integerStartVariables, "0") then "fmi_status := fmiFunctions.fmiSetInteger(fmi, {"+dumpStartIntegerVariablesValueReference(fmiModelVariablesList)+"}, {"+dumpStartIntegerVariablesName(fmiModelVariablesList)+"});"%> 1348 <%if not stringEq(booleanStartVariables, "0") then "fmi_status := fmiFunctions.fmiSetBoolean(fmi, {"+dumpStartBooleanVariablesValueReference(fmiModelVariablesList)+"}, {"+dumpStartBooleanVariablesName(fmiModelVariablesList)+"});"%> 1349 <%if not stringEq(stringStartVariables, "0") then "fmi_status := fmiFunctions.fmiSetString(fmi, {"+dumpStartStringVariablesValueReference(fmiModelVariablesList)+"}, {"+dumpStartStringVariablesName(fmiModelVariablesList)+"});"*/%> 1350 eventInfo := fmiFunctions.fmiInitialize(fmi); 1351 <%if intGt(listLength(fmiInfo.fmiNumberOfContinuousStates), 0) then "fmi_x := fmiFunctions.fmiGetContinuousStates(fmi, numberOfContinuousStates);"%> 1352 equation 1353 <%if intGt(listLength(fmiInfo.fmiNumberOfContinuousStates), 0) then "der(fmi_x) = fmiFunctions.fmiGetDerivatives(fmi, numberOfContinuousStates);"%> 1354 <%if intGt(listLength(fmiInfo.fmiNumberOfContinuousStates), 0) then "fmiFunctions.fmiSetTime(fmi, time);" else "fmi_status = fmiFunctions.fmiSetTime(fmi, time);"%> 1357 // ensure that all initialization 1358 // functions are called only once! 1359 if not initializationDone then 1360 fmiFunctions.fmiInstantiateModel(fmi, "<%fmiInfo.fmiModelIdentifier%>"); 1361 fmiFunctions.fmiSetDebugLogging(fmi, debugLogging); 1362 flowControlTime := fmiFunctions.fmiSetTime(fmi, time, 1); 1363 <%/*if not stringEq(realStartVariables, "0") then "fmi_status := fmiFunctions.fmiSetReal(fmi, {"+dumpStartRealVariablesValueReference(fmiModelVariablesList)+"}, {"+dumpStartRealVariablesName(fmiModelVariablesList)+"});"%> 1364 <%if not stringEq(integerStartVariables, "0") then "fmi_status := fmiFunctions.fmiSetInteger(fmi, {"+dumpStartIntegerVariablesValueReference(fmiModelVariablesList)+"}, {"+dumpStartIntegerVariablesName(fmiModelVariablesList)+"});"%> 1365 <%if not stringEq(booleanStartVariables, "0") then "fmi_status := fmiFunctions.fmiSetBoolean(fmi, {"+dumpStartBooleanVariablesValueReference(fmiModelVariablesList)+"}, {"+dumpStartBooleanVariablesName(fmiModelVariablesList)+"});"%> 1366 <%if not stringEq(stringStartVariables, "0") then "fmi_status := fmiFunctions.fmiSetString(fmi, {"+dumpStartStringVariablesValueReference(fmiModelVariablesList)+"}, {"+dumpStartStringVariablesName(fmiModelVariablesList)+"});"*/%> 1367 eventInfo := fmiFunctions.fmiInitialize(fmi); 1368 initializationDone := true; 1369 end if; 1370 // fmiSet* is only needed to set startValues 1355 1371 <%/*if not stringEq(realStartVariables, "0") then "fmi_status = fmiFunctions.fmiSetReal(fmi, {"+dumpStartRealVariablesValueReference(fmiModelVariablesList)+"}, {"+dumpStartRealVariablesName(fmiModelVariablesList)+"});"%> 1356 1372 <%if not stringEq(integerStartVariables, "0") then "fmi_status = fmiFunctions.fmiSetInteger(fmi, {"+dumpStartIntegerVariablesValueReference(fmiModelVariablesList)+"}, {"+dumpStartIntegerVariablesName(fmiModelVariablesList)+"});"%> 1357 1373 <%if not stringEq(booleanStartVariables, "0") then "fmi_status = fmiFunctions.fmiSetBoolean(fmi, {"+dumpStartBooleanVariablesValueReference(fmiModelVariablesList)+"}, {"+dumpStartBooleanVariablesName(fmiModelVariablesList)+"});"%> 1358 1374 <%if not stringEq(stringStartVariables, "0") then "fmi_status = fmiFunctions.fmiSetString(fmi, {"+dumpStartStringVariablesValueReference(fmiModelVariablesList)+"}, {"+dumpStartStringVariablesName(fmiModelVariablesList)+"});"*/%> 1359 <%if intGt(listLength(fmiInfo.fmiNumberOfContinuousStates), 0) then "fmi_status = fmiFunctions.fmiSetContinuousStates(fmi, fmi_x);"%> 1375 <%if intGt(listLength(fmiInfo.fmiNumberOfContinuousStates), 0) then "fmi_x := fmiFunctions.fmiGetContinuousStates(fmi, numberOfContinuousStates, 1);"%> 1376 algorithm 1377 initializationDone := true; 1378 equation 1379 <%if intGt(listLength(fmiInfo.fmiNumberOfContinuousStates), 0) then "der(fmi_x) = fmiFunctions.fmiGetDerivatives(fmi, numberOfContinuousStates, flowControlStatesInputs);"%> 1380 flowControlTime = fmiFunctions.fmiSetTime(fmi, time, 1); 1381 <%if intGt(listLength(fmiInfo.fmiNumberOfContinuousStates), 0) then "flowControlStatesInputs = fmiFunctions.fmiSetContinuousStates(fmi, fmi_x, flowControlTime);"%> 1360 1382 <%if intGt(listLength(fmiInfo.fmiNumberOfEventIndicators), 0) then 1361 1383 << 1362 fmi_z = fmiFunctions.fmiGetEventIndicators(fmi, numberOfEventIndicators );1384 fmi_z = fmiFunctions.fmiGetEventIndicators(fmi, numberOfEventIndicators, flowControlEvent); 1363 1385 for i in 1:size(fmi_z,1) loop 1364 1386 fmi_z_positive[i] = fmi_z[i] > 0; … … 1372 1394 //eventInfo := fmiFunctions.fmiEventUpdate(fmi, callEventUpdate, eventInfo); 1373 1395 fmiFunctions.fmiEventUpdate(fmi, callEventUpdate, eventInfo); 1374 fmi_x_new := fmiFunctions.fmiGetContinuousStates(fmi, numberOfContinuousStates );1396 fmi_x_new := fmiFunctions.fmiGetContinuousStates(fmi, numberOfContinuousStates, flowControlEvent); 1375 1397 <%fmiInfo.fmiNumberOfContinuousStates |> continuousStates => "reinit(fmi_x["+continuousStates+"], fmi_x_new["+continuousStates+"]);" ;separator="\n"%> 1376 1398 end when; … … 1378 1400 %> 1379 1401 when terminal() then 1380 fmi Functions.fmiTerminate(fmi);1402 fmi_status := fmiFunctions.fmiTerminate(fmi); 1381 1403 end when; 1382 1404 equation 1383 f miFunctions.fmiCompletedIntegratorStep(fmi, callEventUpdate);1384 <%if not stringEq(realVariables, "0") then "{"+dumpRealVariablesName(fmiModelVariablesList)+"} = fmiFunctions.fmiGetReal(fmi, {"+dumpRealVariablesVR(fmiModelVariablesList)+"} );"%>1385 <%if not stringEq(integerVariables, "0") then "{"+dumpIntegerVariablesName(fmiModelVariablesList)+"} = fmiFunctions.fmiGetInteger(fmi, {"+dumpIntegerVariablesVR(fmiModelVariablesList)+"} );"%>1386 <%if not stringEq(booleanVariables, "0") then "{"+dumpBooleanVariablesName(fmiModelVariablesList)+"} = fmiFunctions.fmiGetBoolean(fmi, {"+dumpBooleanVariablesVR(fmiModelVariablesList)+"} );"%>1387 <%if not stringEq(stringVariables, "0") then "{"+dumpStringVariablesName(fmiModelVariablesList)+"} = fmiFunctions.fmiGetString(fmi, {"+dump BooleanVariablesVR(fmiModelVariablesList)+"});"%>1405 flowControlEvent = fmiFunctions.fmiCompletedIntegratorStep(fmi, callEventUpdate, flowControlStatesInputs); 1406 <%if not stringEq(realVariables, "0") then "{"+dumpRealVariablesName(fmiModelVariablesList)+"} = fmiFunctions.fmiGetReal(fmi, {"+dumpRealVariablesVR(fmiModelVariablesList)+"}, flowControlStatesInputs);"%> 1407 <%if not stringEq(integerVariables, "0") then "{"+dumpIntegerVariablesName(fmiModelVariablesList)+"} = fmiFunctions.fmiGetInteger(fmi, {"+dumpIntegerVariablesVR(fmiModelVariablesList)+"}, flowControlStatesInputs);"%> 1408 <%if not stringEq(booleanVariables, "0") then "{"+dumpBooleanVariablesName(fmiModelVariablesList)+"} = fmiFunctions.fmiGetBoolean(fmi, {"+dumpBooleanVariablesVR(fmiModelVariablesList)+"}, flowControlStatesInputs);"%> 1409 <%if not stringEq(stringVariables, "0") then "{"+dumpStringVariablesName(fmiModelVariablesList)+"} = fmiFunctions.fmiGetString(fmi, {"+dumpStringVariablesVR(fmiModelVariablesList)+"}, flowControlStatesInputs);"%> 1388 1410 annotation(experiment(StartTime=<%fmiExperimentAnnotation.fmiExperimentStartTime%>, StopTime=<%fmiExperimentAnnotation.fmiExperimentStopTime%>, Tolerance=<%fmiExperimentAnnotation.fmiExperimentTolerance%>)); 1389 1411 end <%fmiInfo.fmiModelIdentifier%>_<%getFMIType(fmiInfo)%>_FMU; -
trunk/Compiler/runtime/FMIWrapper.c
r13273 r13379 158 158 * Returns status. 159 159 */ 160 int fmiSetTime_OMC(void* fmi, double time) 161 { 162 return fmi1_import_set_time((fmi1_import_t*)fmi, time); 160 double fmiSetTime_OMC(void* fmi, double time, double dummy) 161 { 162 fmi1_import_set_time((fmi1_import_t*)fmi, time); 163 return dummy; 163 164 } 164 165 … … 197 198 * Returns states. 198 199 */ 199 void fmiGetContinuousStates_OMC(void* fmi, int numberOfContinuousStates, double* states )200 void fmiGetContinuousStates_OMC(void* fmi, int numberOfContinuousStates, double* states, double dummy) 200 201 { 201 202 fmi1_status_t fmistatus = fmi1_import_get_continuous_states((fmi1_import_t*)fmi, (fmi1_real_t*)states, numberOfContinuousStates); … … 214 215 * Returns status. 215 216 */ 216 int fmiSetContinuousStates_OMC(void* fmi, int numberOfContinuousStates, double* states) 217 { 218 return fmi1_import_set_continuous_states((fmi1_import_t*)fmi, (fmi1_real_t*)states, numberOfContinuousStates); 217 double fmiSetContinuousStates_OMC(void* fmi, int numberOfContinuousStates, double* states, double dummy) 218 { 219 fmi1_import_set_continuous_states((fmi1_import_t*)fmi, (fmi1_real_t*)states, numberOfContinuousStates); 220 return dummy; 219 221 } 220 222 … … 223 225 * Returns events. 224 226 */ 225 void fmiGetEventIndicators_OMC(void* fmi, int numberOfEventIndicators, double* events )227 void fmiGetEventIndicators_OMC(void* fmi, int numberOfEventIndicators, double* events, double dummy) 226 228 { 227 229 fmi1_status_t fmistatus = fmi1_import_get_event_indicators((fmi1_import_t*)fmi, (fmi1_real_t*)events, numberOfEventIndicators); … … 240 242 * Returns states. 241 243 */ 242 void fmiGetDerivatives_OMC(void* fmi, int numberOfContinuousStates, double* states )244 void fmiGetDerivatives_OMC(void* fmi, int numberOfContinuousStates, double* states, double dummy) 243 245 { 244 246 fmi1_status_t fmistatus = fmi1_import_get_derivatives((fmi1_import_t*)fmi, (fmi1_real_t*)states, numberOfContinuousStates); … … 257 259 * Returns realValues. 258 260 */ 259 void fmiGetReal_OMC(void* fmi, int numberOfValueReferences, int* realValuesReferences, double* realValues )261 void fmiGetReal_OMC(void* fmi, int numberOfValueReferences, int* realValuesReferences, double* realValues, double dummy) 260 262 { 261 263 fmi1_status_t fmistatus = fmi1_import_get_real((fmi1_import_t*)fmi, (fmi1_value_reference_t*)realValuesReferences, numberOfValueReferences, (fmi1_real_t*)realValues); … … 283 285 * Returns integerValues. 284 286 */ 285 void fmiGetInteger_OMC(void* fmi, int numberOfValueReferences, int* integerValuesReferences, int* integerValues )287 void fmiGetInteger_OMC(void* fmi, int numberOfValueReferences, int* integerValuesReferences, int* integerValues, double dummy) 286 288 { 287 289 fmi1_status_t fmistatus = fmi1_import_get_integer((fmi1_import_t*)fmi, (fmi1_value_reference_t*)integerValuesReferences, numberOfValueReferences, (fmi1_integer_t*)integerValues); … … 300 302 * Returns status. 301 303 */ 302 int fmiSetInteger_OMC(void* fmi, int numberOfValueReferences, int* integerValuesReferences, int* integerValues )304 int fmiSetInteger_OMC(void* fmi, int numberOfValueReferences, int* integerValuesReferences, int* integerValues, double dummy) 303 305 { 304 306 return fmi1_import_set_integer((fmi1_import_t*)fmi, (fmi1_value_reference_t*)integerValuesReferences, numberOfValueReferences, (fmi1_integer_t*)integerValues); … … 326 328 * Returns status. 327 329 */ 328 int fmiSetBoolean_OMC(void* fmi, int numberOfValueReferences, int* booleanValuesReferences, int* booleanValues )330 int fmiSetBoolean_OMC(void* fmi, int numberOfValueReferences, int* booleanValuesReferences, int* booleanValues, double dummy) 329 331 { 330 332 return fmi1_import_set_boolean((fmi1_import_t*)fmi, (fmi1_value_reference_t*)booleanValuesReferences, numberOfValueReferences, (fmi1_boolean_t*)booleanValues); … … 352 354 * Returns status. 353 355 */ 354 int fmiSetString_OMC(void* fmi, int numberOfValueReferences, int* stringValuesReferences, char** stringValues )356 int fmiSetString_OMC(void* fmi, int numberOfValueReferences, int* stringValuesReferences, char** stringValues, double dummy) 355 357 { 356 358 return fmi1_import_set_string((fmi1_import_t*)fmi, (fmi1_value_reference_t*)stringValuesReferences, numberOfValueReferences, (fmi1_string_t*)stringValues); … … 371 373 * Wrapper for the FMI function fmiCompletedIntegratorStep. 372 374 */ 373 int fmiCompletedIntegratorStep_OMC(void* fmi, int in_callEventUpdate)375 double fmiCompletedIntegratorStep_OMC(void* fmi, int in_callEventUpdate, double dummy) 374 376 { 375 377 fmi1_status_t fmistatus = fmi1_import_completed_integrator_step((fmi1_import_t*)fmi, (fmi1_boolean_t*)&in_callEventUpdate); 376 378 //fprintf(stderr, "fmiCompletedIntegratorStep_OMC in_callEventUpdate = %d\n", in_callEventUpdate);fflush(NULL); 377 return in_callEventUpdate;379 return dummy; 378 380 } 379 381
Note: See TracChangeset
for help on using the changeset viewer.