20 #include "config_test.h" 35 void fmilogger(fmi2_component_t
c, fmi2_string_t instanceName,
fmi2_status_t status, fmi2_string_t category, fmi2_string_t message, ...)
40 va_start(argp, message);
48 printf(
"Press 'Enter' to exit\n");
58 fmi2_string_t instanceName =
"Test CS model instance";
59 fmi2_string_t fmuGUID;
60 fmi2_string_t fmuLocation =
"";
62 fmi2_real_t relativeTol = 1e-4;
66 fmi2_real_t simulation_results[] = {0.0143633, -1.62417};
67 fmi2_value_reference_t compare_real_variables_vr[] = {0, 1};
70 fmi2_real_t tstart = 0.0;
71 fmi2_real_t tcur = tstart;
72 fmi2_real_t hstep = 0.1;
73 fmi2_real_t tend = 2.0;
76 if (
sizeof(compare_real_variables_vr)/
sizeof(fmi2_value_reference_t) !=
sizeof(simulation_results)/
sizeof(fmi2_real_t)) {
77 printf(
"Number of simulation values and reference values are different\n");
85 printf(
"GUID: %s\n", fmuGUID);
90 printf(
"fmi2_import_instantiate failed\n");
95 relativeTol, tstart, StopTimeDefined, tend);
97 printf(
"fmi2_import_setup_experiment failed\n");
103 printf(
"fmi2_import_enter_initialization_mode failed\n");
109 printf(
"fmi2_import_exit_initialization_mode failed\n");
114 printf(
"%10s %10s\n",
"Ball height",
"Ball speed");
115 while (tcur < tend) {
119 fmi2_value_reference_t vr = 0;
122 printf(
"rvalue = %f\n", rvalue);
126 for (k = 0; k <
sizeof(compare_real_variables_vr)/
sizeof(fmi2_value_reference_t); k++) {
127 fmi2_value_reference_t vr = compare_real_variables_vr[k];
134 printf(
"%10g %10g\n", val[0],val[1]);
140 printf(
"Simulation finished. Checking results\n");
143 for (k = 0; k <
sizeof(compare_real_variables_vr)/
sizeof(fmi2_value_reference_t); k++) {
144 fmi2_value_reference_t vr = compare_real_variables_vr[k];
148 res = rvalue - simulation_results[k];
149 res = res > 0 ? res: -res;
151 printf(
"Simulation results is wrong!\n");
152 printf(
"State [%u] %g != %g, |res| = %g\n", (
unsigned)k, rvalue, simulation_results[k], res);
165 int main(
int argc,
char *argv[])
179 printf(
"Usage: %s <fmu_file> <temporary_dir>\n", argv[0]);
182 for (k = 0; k < argc; k ++)
183 printf(
"argv[%d] = %s\n", k, argv[k]);
189 callbacks.
malloc = malloc;
190 callbacks.
calloc = calloc;
192 callbacks.
free = free;
197 #ifdef FMILIB_GENERATE_BUILD_STAMP 198 printf(
"Library build stamp:\n%s\n", fmilib_get_build_stamp());
206 printf(
"The code only supports version 2.0\n");
213 printf(
"Error parsing XML, exiting\n");
218 printf(
"Only CS 2.0 is supported by this code\n");
240 printf(
"Everything seems to be OK since you got this far=)!\n");
jm_calloc_f calloc
Allocate zero initialized memory.
void fmilogger(fmi2_component_t c, fmi2_string_t instanceName, fmi2_status_t status, fmi2_string_t category, fmi2_string_t message,...)
FMILIB_EXPORT void fmi2_import_free_instance(fmi2_import_t *fmu)
Wrapper for the FMI function fmiFreeInstance(...)
FMILIB_EXPORT void fmi2_log_forwarding_v(fmi2_component_t c, fmi2_string_t instanceName, fmi2_status_t status, fmi2_string_t category, fmi2_string_t message, va_list args)
An implementation of FMI 2.0 logger that forwards the messages to logger function inside jm_callbacks...
void importlogger(jm_callbacks *c, jm_string module, jm_log_level_enu_t log_level, jm_string message)
fmi_version_enu_t
Suported versions of FMI standard.
fmi2_callback_allocate_memory_ft allocateMemory
FMILIB_EXPORT const char * jm_log_level_to_string(jm_log_level_enu_t level)
Convert log level into a string.
FMILIB_EXPORT const char * fmi2_import_get_version(fmi2_import_t *fmu)
Wrapper for the FMI function fmiGetVersion()
jm_log_level_enu_t
Log levels supported via the logger functions in jm_callbacks.
FMILIB_EXPORT fmi2_import_t * fmi2_import_parse_xml(fmi_import_context_t *context, const char *dirPath, fmi2_xml_callbacks_t *xml_callbacks)
Create fmi2_import_t structure and parse the FMI 2.0 XML file found in the directory dirName...
int test_simulate_cs(fmi2_import_t *fmu)
FMILIB_EXPORT fmi2_fmu_kind_enu_t fmi2_import_get_fmu_kind(fmi2_import_t *fmu)
Get the type of the FMU (model exchange or co-simulation)
FMILIB_EXPORT fmi2_status_t fmi2_import_do_step(fmi2_import_t *fmu, fmi2_real_t currentCommunicationPoint, fmi2_real_t communicationStepSize, fmi2_boolean_t newStep)
Wrapper for the FMI function fmiDoStep(...)
jm_log_level_enu_t log_level
Logging level.
FMILIB_EXPORT void fmi2_import_destroy_dllfmu(fmi2_import_t *fmu)
Free a C-API struct. All memory allocated since the struct was created is freed.
FMILIB_EXPORT fmi2_status_t fmi2_import_exit_initialization_mode(fmi2_import_t *fmu)
Calls the FMI function fmiExitInitializationMode(...)
fmi2_callback_logger_ft logger
Include file to be used in client applications of the FMI Library.
jm_malloc_f malloc
Allocate non-initialized memory.
fmi2_callback_free_memory_ft freeMemory
jm_voidp context
Arbitrary context pointer passed to the logger function.
const char * jm_string
A constant string.
fmi2_component_environment_t componentEnvironment
FMILIB_EXPORT fmi2_status_t fmi2_import_setup_experiment(fmi2_import_t *fmu, fmi2_boolean_t toleranceDefined, fmi2_real_t tolerance, fmi2_real_t startTime, fmi2_boolean_t stopTimeDefined, fmi2_real_t stopTime)
Calls the FMI function fmiSetupExperiment(...)
FMILIB_EXPORT jm_status_enu_t fmi2_import_create_dllfmu(fmi2_import_t *fmu, fmi2_fmu_kind_enu_t fmuKind, const fmi2_callback_functions_t *callBackFunctions)
Create a C-API struct. The C-API struct is a placeholder for the FMI DLL functions.
The callbacks struct is sent to all the modules in the library.
FMILIB_EXPORT fmi2_status_t fmi2_import_enter_initialization_mode(fmi2_import_t *fmu)
Calls the FMI function fmiEnterInitializationMode(...)
struct fmi_xml_context_t fmi_import_context_t
FMI version independent library context. Opaque struct returned from fmi_import_allocate_context() ...
FMILIB_EXPORT void fmi2_import_free(fmi2_import_t *fmu)
Release the memory allocated.
FMILIB_EXPORT fmi_import_context_t * fmi_import_allocate_context(jm_callbacks *callbacks)
Create fmi_import_context_t structure.
FMILIB_EXPORT const char * fmi2_import_get_types_platform(fmi2_import_t *fmu)
Wrapper for the FMI function fmiGetTypesPlatform(...)
FMILIB_EXPORT const char * fmi2_import_get_GUID(fmi2_import_t *fmu)
Get FMU GUID.
FMILIB_EXPORT fmi2_status_t fmi2_import_terminate(fmi2_import_t *fmu)
Wrapper for the FMI function fmiTerminate(...)
FMILIB_EXPORT fmi2_status_t fmi2_import_get_real(fmi2_import_t *fmu, const fmi2_value_reference_t vr[], size_t nvr, fmi2_real_t value[])
Wrapper for the FMI function fmiGetReal(...)
FMILIB_EXPORT fmi_version_enu_t fmi_import_get_fmi_version(fmi_import_context_t *c, const char *fileName, const char *dirName)
Unzip an FMU specified by the fileName into directory dirName and parse XML to get FMI standard versi...
FMILIB_EXPORT void fmi_import_free_context(fmi_import_context_t *c)
Free memory allocated for the library context.
jm_realloc_f realloc
Re-allocate memory.
FMILIB_EXPORT const char * fmi2_import_get_last_error(fmi2_import_t *fmu)
Retrieve the last error message.
jm_status_enu_t
Return status codes.
FMILIB_EXPORT jm_status_enu_t fmi2_import_instantiate(fmi2_import_t *fmu, fmi2_string_t instanceName, fmi2_type_t fmuType, fmi2_string_t fmuResourceLocation, fmi2_boolean_t visible)
Wrapper for the FMI function fmiInstantiate(...)
jm_free_f free
Free-allocated memory.
jm_logger_f logger
Logging callback.
FMILIB_EXPORT void fmi2_log_forwarding(fmi2_component_t c, fmi2_string_t instanceName, fmi2_status_t status, fmi2_string_t category, fmi2_string_t message,...)
An implementation of FMI 2.0 logger that forwards the messages to logger function inside jm_callbacks...
int main(int argc, char *argv[])
struct fmi2_import_t fmi2_import_t
FMU version 2.0 object.