30 comp->
functions.logger(comp, comp->
instanceName, fmiOK,
"INFO",
"###### Initializing component ######");
63 comp->
eventInfo.iterationConverged = fmiTrue;
64 comp->
eventInfo.stateValueReferencesChanged = fmiFalse;
65 comp->
eventInfo.stateValuesChanged = fmiTrue;
66 comp->
eventInfo.terminateSimulation = fmiFalse;
67 comp->
eventInfo.upcomingTimeEvent = fmiFalse;
100 for (k = 0; k < nvr; k++) {
103 value[k] = comp->
states[cvr];
106 value[k] = comp->
reals[cvr];
120 for (k = 0; k < nvr; k++) {
134 for (k = 0; k < nvr; k++) {
148 for (k = 0; k < nvr; k++) {
149 value[k] = comp->
strings[vr[k]];
162 for (k = 0; k < nvr; k++) {
165 comp->
states[cvr] = value[k];
168 comp->
reals[cvr] = value[k];
182 for (k = 0; k < nvr; k++) {
196 for (k = 0; k < nvr; k++) {
210 for (k = 0; k < nvr; k++) {
215 len = strlen((
char*)s_src) + 1;
216 s_dist = comp->
functions.allocateMemory(len,
sizeof(
char));
217 if (s_dist == NULL) {
220 strcpy((
char*)s_dist, (
char*)s_src);
229 for (k = 0; k < nvr; k++) {
244 return FMI_PLATFORM_TYPE;
247 #define FMI_TEST_LOGGER_TEST_RESULT_FILE "C:\\P510-JModelica\\FMIToolbox\\trunk\\external\\FMIL\\build\\testfolder\\" 248 #define FMI_TEST_LOGGER_TEST_SOURCE_FILE "C:\\P510-JModelica\\FMIToolbox\\trunk\\external\\FMIL\\build\\testfolder\\" 262 }
else if (strcmp(GUID,
FMI_GUID) != 0) {
266 sprintf(comp->
GUID,
"%s",GUID);
331 for (k = 0; k < nx; k++) {
356 comp->
eventInfo.iterationConverged = fmiFalse;
357 comp->
eventInfo.stateValueReferencesChanged = fmiFalse;
358 comp->
eventInfo.stateValuesChanged = fmiFalse;
359 comp->
eventInfo.terminateSimulation = fmiFalse;
360 comp->
eventInfo.upcomingTimeEvent = fmiFalse;
384 for (k = 0; k < nx; k++) {
401 for (k = 0; k < ni; k++) {
429 for (k = 0; k < nx; k++) {
430 states[k] = comp->
states[k];
443 for (k = 0; k < nx; k++) {
457 for (k = 0; k < nx; k++) {
477 return FMI_PLATFORM_TYPE;
487 }
else if (strcmp(fmuGUID,
FMI_GUID) != 0) {
491 sprintf(comp->
mimeType,
"%s",mimeType);
503 fmiEventInfo eventInfo;
511 toleranceControlled = fmiTrue;
512 relativeTolerance = 1e-4;
538 for (k = 0; k < nvr; k++) {
553 for (k = 0; k < nvr; k++) {
572 fmiReal tstart = currentCommunicationPoint;
574 fmiReal tend = currentCommunicationPoint + communicationStepSize;
581 fmiEventInfo eventInfo;
593 callEventUpdate = fmiFalse;
596 while (tcur < tend && counter < 100) {
598 int zero_crossning_event = 0;
606 if (z_cur[k]*z_pre[k] < 0) {
607 zero_crossning_event = 1;
613 if (callEventUpdate || zero_crossning_event || (eventInfo.upcomingTimeEvent && tcur == eventInfo.nextEventTime)) {
621 if (eventInfo.upcomingTimeEvent) {
622 if (tcur + hdef < eventInfo.nextEventTime) {
625 hcur = eventInfo.nextEventTime - tcur;
632 double t_full = tcur + hcur;
634 hcur = (tend - tcur);
644 states[k] = states[k] + hcur*states_der[k];
653 if(fmistatus != fmiOK)
break;
706 *value =
"Did fmiDoStep really return with fmiPending? Then its time to implement this function";
fmiStatus fmi_cancel_step(fmiComponent c)
fmiBoolean StopTimeDefined
fmiStatus fmi_event_update(fmiComponent c, fmiBoolean intermediateResults, fmiEventInfo *eventInfo)
fmiComponent fmi_instantiate_slave(fmiString instanceName, fmiString fmuGUID, fmiString fmuLocation, fmiString mimeType, fmiReal timeout, fmiBoolean visible, fmiBoolean interactive, fmiCallbackFunctions functions, fmiBoolean loggingOn)
fmiReal output_real[N_OUTPUT_REAL][N_OUTPUT_REAL_MAX_ORDER+1]
fmiBoolean callEventUpdate
fmiStatus fmi_set_debug_logging(fmiComponent c, fmiBoolean loggingOn)
fmiComponent fmi_instantiate_model(fmiString instanceName, fmiString GUID, fmiCallbackFunctions functions, fmiBoolean loggingOn)
fmiStatus fmi_initialize_slave(fmiComponent c, fmiReal tStart, fmiBoolean StopTimeDefined, fmiReal tStop)
fmiStatus fmi_reset_slave(fmiComponent c)
fmiStatus fmi_get_string(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiString value[])
fmiReal event_indicators[N_EVENT_INDICATORS]
fmiString strings[N_STRING]
fmiStatus fmi_initialize(fmiComponent c, fmiBoolean toleranceControlled, fmiReal relativeTolerance, fmiEventInfo *eventInfo)
#define N_OUTPUT_REAL_MAX_ORDER
fmiStatus fmi_set_boolean(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiBoolean value[])
fmiStatus fmi_completed_integrator_step(fmiComponent c, fmiBoolean *callEventUpdate)
fmiStatus fmi_get_real(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiReal value[])
fmiStatus fmi_get_status(fmiComponent c, const fmiStatusKind s, fmiStatus *value)
fmiStatus fmi_get_boolean_status(fmiComponent c, const fmiStatusKind s, fmiBoolean *value)
fmiStatus fmi_get_nominal_continuousstates(fmiComponent c, fmiReal x_nominal[], size_t nx)
fmiReal states_prev[N_STATES]
fmiStatus fmi_set_string(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiString value[])
static int calc_get_derivatives(component_ptr_t comp)
fmiStatus fmi_set_real_input_derivatives(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger order[], const fmiReal value[])
fmiStatus fmi_get_event_indicators(fmiComponent c, fmiReal eventIndicators[], size_t ni)
#define VAR_R_BOUNCE_CONF
fmiStatus fmi_get_derivatives(fmiComponent c, fmiReal derivatives[], size_t nx)
fmiStatus fmi_get_continuous_states(fmiComponent c, fmiReal states[], size_t nx)
fmiStatus fmi_get_state_value_references(fmiComponent c, fmiValueReference vrx[], size_t nx)
#define N_INPUT_REAL_MAX_ORDER
void fmi_free_model_instance(fmiComponent c)
#define VAR_S_LOGGER_TEST
#define fmiValueReference
fmiStatus fmi_get_integer(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiInteger value[])
static int calc_initialize(component_ptr_t comp)
fmiStatus fmi_set_continuous_states(fmiComponent c, const fmiReal x[], size_t nx)
fmiReal relativeTolerance
fmiReal states_nom[N_STATES]
static int calc_event_update(component_ptr_t comp)
fmiInteger integers[N_INTEGER]
fmiBoolean booleans[N_BOOLEAN]
const char * fmi_get_version()
fmiStatus fmi_get_string_status(fmiComponent c, const fmiStatusKind s, fmiString *value)
#define VAR_R_HIGHT_SPEED
fmiStatus fmi_terminate_slave(fmiComponent c)
fmiStatus fmi_get_real_output_derivatives(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger order[], fmiReal value[])
fmiStatus fmi_set_integer(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger value[])
fmiReal states_der[N_STATES]
fmiCallbackFunctions functions
fmiStatus fmi_set_time(fmiComponent c, fmiReal fmitime)
fmiStatus fmi_get_integer_status(fmiComponent c, const fmiStatusKind s, fmiInteger *value)
static int calc_get_event_indicators(component_ptr_t comp)
char instanceName[BUFFER]
fmiValueReference states_vr[N_STATES]
fmiStatus fmi_get_boolean(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiBoolean value[])
const char * fmi_get_types_platform()
fmiStatus fmi_get_real_status(fmiComponent c, const fmiStatusKind s, fmiReal *value)
#define N_EVENT_INDICATORS
fmiStatus fmi_set_real(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiReal value[])
fmiStatus fmi_terminate(fmiComponent c)
component_t * component_ptr_t
fmiReal input_real[N_INPUT_REAL][N_INPUT_REAL_MAX_ORDER+1]
const char * fmi_get_model_types_platform()
fmiStatus fmi_do_step(fmiComponent c, fmiReal currentCommunicationPoint, fmiReal communicationStepSize, fmiBoolean newStep)
void fmi_free_slave_instance(fmiComponent c)
fmiBoolean toleranceControlled