Skip to content

Commit

Permalink
- FMI 1.0 co-simulation API skeleton.
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@24968 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
adeas31 committed Mar 6, 2015
1 parent 49c5578 commit e873912
Show file tree
Hide file tree
Showing 3 changed files with 178 additions and 4 deletions.
80 changes: 78 additions & 2 deletions SimulationRuntime/fmi/export/fmi1/fmiModelFunctions.h
Expand Up @@ -47,7 +47,7 @@
- Dec. 3 , 2008: First version by Martin Otter (DLR) and Hans Olsson (Dynasim).
Copyright © 2008-2009, MODELISAR consortium. All rights reserved.
Copyright (C) 2008-2009, MODELISAR consortium. All rights reserved.
This file is licensed by the copyright holders under the BSD License
(http://www.opensource.org/licenses/bsd-license.html):
Expand Down Expand Up @@ -101,6 +101,7 @@
#define fmiFullName(name) fmiPasteB(MODEL_IDENTIFIER, name)

#define fmiGetModelTypesPlatform fmiFullName(_fmiGetModelTypesPlatform)
#define fmiGetTypesPlatform fmiFullName(_fmiGetTypesPlatform)
#define fmiGetVersion fmiFullName(_fmiGetVersion)
#define fmiInstantiateModel fmiFullName(_fmiInstantiateModel)
#define fmiFreeModelInstance fmiFullName(_fmiFreeModelInstance)
Expand All @@ -126,6 +127,23 @@
#define fmiTerminate fmiFullName(_fmiTerminate)
#define fmiSetExternalFunction fmiFullName(_fmiSetExternalFunction)

/***************************************************
Functions for FMI for Co-Simulation
****************************************************/
#define fmiInstantiateSlave fmiFullName(_fmiInstantiateSlave)
#define fmiInitializeSlave fmiFullName(_fmiInitializeSlave)
#define fmiTerminateSlave fmiFullName(_fmiTerminateSlave)
#define fmiResetSlave fmiFullName(_fmiResetSlave)
#define fmiFreeSlaveInstance fmiFullName(_fmiFreeSlaveInstance)
#define fmiSetRealInputDerivatives fmiFullName(_fmiSetRealInputDerivatives)
#define fmiGetRealOutputDerivatives fmiFullName(_fmiGetRealOutputDerivatives)
#define fmiDoStep fmiFullName(_fmiDoStep)
#define fmiCancelStep fmiFullName(_fmiCancelStep)
#define fmiGetStatus fmiFullName(_fmiGetStatus)
#define fmiGetRealStatus fmiFullName(_fmiGetRealStatus)
#define fmiGetIntegerStatus fmiFullName(_fmiGetIntegerStatus)
#define fmiGetBooleanStatus fmiFullName(_fmiGetBooleanStatus)
#define fmiGetStringStatus fmiFullName(_fmiGetStringStatus)

/* Version number */
#define fmiVersion "1.0"
Expand All @@ -134,6 +152,7 @@ extern "C" {
#endif
/* Inquire version numbers of header files */
DllExport const char* fmiGetModelTypesPlatform();
DllExport const char* fmiGetTypesPlatform();
DllExport const char* fmiGetVersion();

/* make sure all compiler use the same alignment policies for structures */
Expand All @@ -146,17 +165,20 @@ extern "C" {
fmiWarning,
fmiDiscard,
fmiError,
fmiFatal} fmiStatus;
fmiFatal,
fmiPending} fmiStatus;

typedef void (*fmiCallbackLogger) (fmiComponent c, fmiString instanceName, fmiStatus status,
fmiString category, fmiString message, ...);
typedef void* (*fmiCallbackAllocateMemory)(size_t nobj, size_t size);
typedef void (*fmiCallbackFreeMemory) (void* obj);
typedef void (*fmiStepFinished) (fmiComponent c, fmiStatus status);

typedef struct {
fmiCallbackLogger logger;
fmiCallbackAllocateMemory allocateMemory;
fmiCallbackFreeMemory freeMemory;
fmiStepFinished stepFinished;
} fmiCallbackFunctions;

typedef struct {
Expand Down Expand Up @@ -210,6 +232,60 @@ extern "C" {
DllExport fmiStatus fmiGetStateValueReferences (fmiComponent c, fmiValueReference vrx[], size_t nx);
DllExport fmiStatus fmiTerminate (fmiComponent c);
DllExport fmiStatus fmiSetExternalFunction (fmiComponent c, fmiValueReference vr[], size_t nvr, const void* value[]);

/***************************************************
Functions for FMI for Co-Simulation
****************************************************/

/* Creation and destruction of slave instances and setting debug status */
DllExport fmiComponent fmiInstantiateSlave(fmiString instanceName,
fmiString fmuGUID,
fmiString fmuLocation,
fmiString mimeType,
fmiReal timeout,
fmiBoolean visible,
fmiBoolean interactive,
fmiCallbackFunctions functions,
fmiBoolean loggingOn);

DllExport fmiStatus fmiInitializeSlave(fmiComponent c,
fmiReal tStart,
fmiBoolean StopTimeDefined,
fmiReal tStop);

DllExport fmiStatus fmiTerminateSlave (fmiComponent c);
DllExport fmiStatus fmiResetSlave (fmiComponent c);
DllExport void fmiFreeSlaveInstance(fmiComponent c);

DllExport fmiStatus fmiSetRealInputDerivatives(fmiComponent c,
const fmiValueReference vr[],
size_t nvr,
const fmiInteger order[],
const fmiReal value[]);

DllExport fmiStatus fmiGetRealOutputDerivatives(fmiComponent c,
const fmiValueReference vr[],
size_t nvr,
const fmiInteger order[],
fmiReal value[]);

DllExport fmiStatus fmiCancelStep(fmiComponent c);
DllExport fmiStatus fmiDoStep (fmiComponent c,
fmiReal currentCommunicationPoint,
fmiReal communicationStepSize,
fmiBoolean newStep);


typedef enum {fmiDoStepStatus,
fmiPendingStatus,
fmiLastSuccessfulTime} fmiStatusKind;

DllExport fmiStatus fmiGetStatus (fmiComponent c, const fmiStatusKind s, fmiStatus* value);
DllExport fmiStatus fmiGetRealStatus (fmiComponent c, const fmiStatusKind s, fmiReal* value);
DllExport fmiStatus fmiGetIntegerStatus(fmiComponent c, const fmiStatusKind s, fmiInteger* value);
DllExport fmiStatus fmiGetBooleanStatus(fmiComponent c, const fmiStatusKind s, fmiBoolean* value);
DllExport fmiStatus fmiGetStringStatus (fmiComponent c, const fmiStatusKind s, fmiString* value);

#ifdef __cplusplus
}
#endif
Expand Down
3 changes: 2 additions & 1 deletion SimulationRuntime/fmi/export/fmi1/fmiModelTypes.h
Expand Up @@ -24,7 +24,7 @@
Hans Olsson (Dynasim).
Copyright © 2008-2010, MODELISAR consortium. All rights reserved.
Copyright (C) 2008-2010, MODELISAR consortium. All rights reserved.
This file is licensed by the copyright holders under the BSD License
(http://www.opensource.org/licenses/bsd-license.html)
Expand Down Expand Up @@ -62,6 +62,7 @@

/* Platform (combination of machine, compiler, operating system) */
#define fmiModelTypesPlatform "standard32"
#define fmiPlatform "standard32"

/* Type definitions of variables passed as arguments
Version "standard32" means:
Expand Down
99 changes: 98 additions & 1 deletion SimulationRuntime/fmi/export/fmi1/fmu1_model_interface.c
Expand Up @@ -101,17 +101,27 @@ static fmiBoolean vrOutOfRange(ModelInstance* comp, const char* f, fmiValueRefer
// ---------------------------------------------------------------------------
// FMI functions: class methods not depending of a specific model instance
// ---------------------------------------------------------------------------

/***************************************************
Common Functions
****************************************************/
const char* fmiGetModelTypesPlatform()
{
return fmiModelTypesPlatform;
}

const char* fmiGetTypesPlatform()
{
return fmiPlatform;
}

const char* fmiGetVersion()
{
return fmiVersion;
}

/***************************************************
Functions for FMI for Model Exchange
****************************************************/
fmiComponent fmiInstantiateModel(fmiString instanceName, fmiString GUID, fmiCallbackFunctions functions, fmiBoolean loggingOn)
{
ModelInstance* comp;
Expand Down Expand Up @@ -849,6 +859,93 @@ fmiStatus fmiTerminate(fmiComponent c)
return fmiOK;
}

/***************************************************
Functions for FMI for Co-Simulation
****************************************************/
fmiComponent fmiInstantiateSlave(fmiString instanceName, fmiString fmuGUID, fmiString fmuLocation, fmiString mimeType, fmiReal timeout, fmiBoolean visible,
fmiBoolean interactive, fmiCallbackFunctions functions, fmiBoolean loggingOn)
{
// TODO Write code here
return 0;
}

fmiStatus fmiInitializeSlave(fmiComponent c, fmiReal tStart, fmiBoolean StopTimeDefined, fmiReal tStop)
{
// TODO Write code here
return fmiOK;
}

fmiStatus fmiTerminateSlave(fmiComponent c)
{
// TODO Write code here
return fmiOK;
}

fmiStatus fmiResetSlave(fmiComponent c)
{
// TODO Write code here
return fmiOK;
}

void fmiFreeSlaveInstance(fmiComponent c)
{
// TODO Write code here
}

fmiStatus fmiSetRealInputDerivatives(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger order[], const fmiReal value[])
{
// TODO Write code here
return fmiOK;
}

fmiStatus fmiGetRealOutputDerivatives(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger order[], fmiReal value[])
{
// TODO Write code here
return fmiOK;
}

fmiStatus fmiCancelStep(fmiComponent c)
{
// TODO Write code here
return fmiOK;
}

fmiStatus fmiDoStep(fmiComponent c, fmiReal currentCommunicationPoint, fmiReal communicationStepSize, fmiBoolean newStep)
{
// TODO Write code here
return fmiOK;
}

fmiStatus fmiGetStatus(fmiComponent c, const fmiStatusKind s, fmiStatus* value)
{
// TODO Write code here
return fmiOK;
}

fmiStatus fmiGetRealStatus(fmiComponent c, const fmiStatusKind s, fmiReal* value)
{
// TODO Write code here
return fmiOK;
}

fmiStatus fmiGetIntegerStatus(fmiComponent c, const fmiStatusKind s, fmiInteger* value)
{
// TODO Write code here
return fmiOK;
}

fmiStatus fmiGetBooleanStatus(fmiComponent c, const fmiStatusKind s, fmiBoolean* value)
{
// TODO Write code here
return fmiOK;
}

fmiStatus fmiGetStringStatus(fmiComponent c, const fmiStatusKind s, fmiString* value)
{
// TODO Write code here
return fmiOK;
}

// ---------------------------------------------------------------------------
// FMI functions: set external functions
// ---------------------------------------------------------------------------
Expand Down

0 comments on commit e873912

Please sign in to comment.