示例#1
0
static void mdlInitializeConditions(SimStruct *S)
{
    if (ssGetNumPWork(S) > 0) {
        wbt::Block *block = static_cast<wbt::Block*>(ssGetPWorkValue(S, 0));
        wbt::Error error;
        if (!block || !block->initializeInitialConditions(S, &error)) {
            static char errorBuffer[1024];
            sprintf(errorBuffer, "[mdlInitializeConditions]%s", error.message.substr(0, 1023 - strlen("[mdlInitializeConditions]")).c_str());
            ssSetErrorStatus(S, errorBuffer);
        }
    }
}
示例#2
0
static void mdlUpdate(SimStruct *S, int_T tid)
{
    UNUSED_ARG(tid);
    if (ssGetNumPWork(S) > 0) {
        wbt::Block *block = static_cast<wbt::Block*>(ssGetPWorkValue(S, 0));
        wbt::Error error;
        if (!block || !block->updateDiscreteState(S, &error)) {
            static char errorBuffer[1024];
            sprintf(errorBuffer, "[mdlOutputs]%s", error.message.substr(0, 1023 - strlen("[mdlOutputs]")).c_str());
            ssSetErrorStatus(S, errorBuffer);
        }
    }
}
示例#3
0
static void mdlTerminate(SimStruct *S)
{
    PCONFIG_DATA config;

    /* Retrieve and destroy C object */
    if( ssGetNumPWork(S) > 0 )
    {
        config = ssGetPWork(S)[0];
        if( config )
        {
            free(config);
            ssGetPWork(S)[0] = 0;
        }
    }
}
示例#4
0
static void mdlTerminate(SimStruct *S)
{
    if (ssGetNumPWork(S) > 0 && ssGetPWork(S)) {
        wbt::Block *block = static_cast<wbt::Block*>(ssGetPWorkValue(S, 0));
        wbt::Error error;
        if (block) {
            if (block->terminate(S, &error)) {
                delete block;
                ssSetPWorkValue(S, 0, NULL);
            } else {
                static char errorBuffer[1024];
                sprintf(errorBuffer, "[mdlTerminate]%s", error.message.substr(0, 1023 - strlen("[mdlTerminate]")).c_str());
                ssSetErrorStatus(S, errorBuffer);
            }
        }
    }

}