Skip to content

Commit c15067e

Browse files
committed
- Support fmiset* and type generations for the co-simulation FMUs. git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@20113 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 931b061 commit c15067e

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

Compiler/Template/CodegenFMU.tpl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1876,6 +1876,7 @@ case FMIIMPORT(fmiInfo=INFO(__),fmiExperimentAnnotation=EXPERIMENTANNOTATION(__)
18761876
let stringOutputVariablesNames = dumpOutputStringVariablesNames(fmiModelVariablesList)
18771877
<<
18781878
model <%fmiInfo.fmiModelIdentifier%>_<%getFMIType(fmiInfo)%>_FMU<%if stringEq(fmiInfo.fmiDescription, "") then "" else " \""+fmiInfo.fmiDescription+"\""%>
1879+
<%dumpFMITypeDefinitions(fmiTypeDefinitionsList)%>
18791880
constant String fmuLocation = "file://<%fmuWorkingDirectory%>/resources";
18801881
constant String fmuWorkingDir = "<%fmuWorkingDirectory%>";
18811882
parameter Integer logLevel = <%fmiLogLevel%> "log level used during the loading of FMU" annotation (Dialog(tab="FMI", group="Enable logging"));
@@ -1891,7 +1892,15 @@ case FMIIMPORT(fmiInfo=INFO(__),fmiExperimentAnnotation=EXPERIMENTANNOTATION(__)
18911892
FMI1CoSimulation fmi1cs = FMI1CoSimulation(logLevel, fmuWorkingDir, "<%fmiInfo.fmiModelIdentifier%>", debugLogging, fmuLocation, mimeType, timeout, visible, interactive, StartTime, stopTimeDefined, StopTime);
18921893
<%dumpFMIModelVariablesList(fmiModelVariablesList, fmiTypeDefinitionsList, generateInputConnectors, generateOutputConnectors)%>
18931894
Real flowControl;
1895+
<%if not stringEq(realInputVariablesVRs, "") then "Real "+realInputVariablesReturnNames+";"%>
1896+
<%if not stringEq(integerInputVariablesVRs, "") then "Real "+integerInputVariablesReturnNames+";"%>
1897+
<%if not stringEq(booleanInputVariablesVRs, "") then "Real "+booleanInputVariablesReturnNames+";"%>
1898+
<%if not stringEq(stringInputVariablesVRs, "") then "Real "+stringInputVariablesReturnNames+";"%>
18941899
equation
1900+
<%if not stringEq(realInputVariablesVRs, "") then "{"+realInputVariablesReturnNames+"} = fmi1Functions.fmi1SetReal(fmi1cs, {"+realInputVariablesVRs+"}, {"+realInputVariablesNames+"});"%>
1901+
<%if not stringEq(integerInputVariablesVRs, "") then "{"+integerInputVariablesReturnNames+"} = fmi1Functions.fmi1SetInteger(fmi1cs, {"+integerInputVariablesVRs+"}, {"+integerInputVariablesNames+"});"%>
1902+
<%if not stringEq(booleanInputVariablesVRs, "") then "{"+booleanInputVariablesReturnNames+"} = fmi1Functions.fmi1SetBoolean(fmi1cs, {"+booleanInputVariablesVRs+"}, {"+booleanInputVariablesNames+"});"%>
1903+
<%if not stringEq(stringInputVariablesVRs, "") then "{"+stringInputVariablesReturnNames+"} = fmi1Functions.fmi1SetString(fmi1cs, {"+stringInputVariablesVRs+"}, {"+stringStartVariablesNames+"});"%>
18951904
flowControl = fmi1Functions.fmi1DoStep(fmi1cs, time, communicationStepSize, true);
18961905
<%if not boolAnd(stringEq(realOutputVariablesNames, ""), stringEq(realOutputVariablesVRs, "")) then "{"+realOutputVariablesNames+"} = fmi1Functions.fmi1GetReal(fmi1cs, {"+realOutputVariablesVRs+"}, flowControl);"%>
18971906
<%if not boolAnd(stringEq(integerOutputVariablesNames, ""), stringEq(integerOutputVariablesVRs, "")) then "{"+integerOutputVariablesNames+"} = fmi1Functions.fmi1GetInteger(fmi1cs, {"+integerOutputVariablesVRs+"}, flowControl);"%>
@@ -1938,6 +1947,10 @@ case FMIIMPORT(fmiInfo=INFO(__),fmiExperimentAnnotation=EXPERIMENTANNOTATION(__)
19381947
external "C" FMI1CoSimulationDestructor_OMC(fmi1cs) annotation(Library = {"OpenModelicaFMIRuntimeC", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>});
19391948
end destructor;
19401949
end FMI1CoSimulation;
1950+
1951+
<%dumpFMITypeDefinitionsMappingFunctions(fmiTypeDefinitionsList)%>
1952+
1953+
<%dumpFMITypeDefinitionsArrayMappingFunctions(fmiTypeDefinitionsList)%>
19411954

19421955
package fmi1Functions
19431956
function fmi1DoStep

Compiler/runtime/FMIImpl.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,10 @@ void FMIImpl__initializeFMI1Import(fmi1_import_t* fmi, void** fmiInfo, fmi_versi
399399
void* typeName = mk_scon_check_null(name_safe);
400400
free(name_safe);
401401
const char* description = fmi1_import_get_type_description(variableTypeDef);
402+
/* check if type is enum */
403+
if (fmi1_import_get_base_type(variableTypeDef) != fmi1_base_type_enum) {
404+
continue;
405+
}
402406
/* get the TypeDefinition as EnumerationType */
403407
fmi1_import_enumeration_typedef_t* enumTypeDef = fmi1_import_get_type_as_enum(variableTypeDef);
404408
const char* quantity = "";

0 commit comments

Comments
 (0)