motorSimAxis::motorSimAxis(motorSimController *pController, int axis, double lowHardLimit, double hiHardLimit, double home, double start ) : asynMotorAxis(pController, axis), pC_(pController), lowHardLimit_(lowHardLimit), hiHardLimit_(hiHardLimit), home_(home) { route_pars_t pars; pars.numRoutedAxes = 1; pars.routedAxisList[0] = 1; pars.Tsync = 0.0; pars.Tcoast = 0.0; pars.axis[0].Amax = 1.0; pars.axis[0].Vmax = 1.0; endpoint_.T = 0; endpoint_.axis[0].p = start; endpoint_.axis[0].v = 0; nextpoint_.T = 0; nextpoint_.axis[0].p = start; route_ = routeNew( &(this->endpoint_), &pars ); deferred_move_ = 0; }
static int motorSimCreateAxis( motorSim_t * pDrv, int card, int axis, double lowLimit, double hiLimit, double home, double start ) { AXIS_HDL pAxis; AXIS_HDL * ppLast = &(pDrv->pFirst); start=0; for ( pAxis = pDrv->pFirst; pAxis != NULL && ! ((pAxis->card == card) && (pAxis->axis == axis)); pAxis = pAxis->pNext ) { ppLast = &(pAxis->pNext); } if ( pAxis == NULL) { pAxis = (AXIS_HDL) calloc( 1, sizeof(motorAxis) ); if (pAxis != NULL) { route_pars_t pars; pAxis->pDrv = pDrv; pars.numRoutedAxes = 1; pars.routedAxisList[0] = 1; pars.Tsync = 0.0; pars.Tcoast = 0.0; pars.axis[0].Amax = 1.0; pars.axis[0].Vmax = 1.0; pAxis->endpoint.T = 0; pAxis->endpoint.axis[0].p = start; pAxis->endpoint.axis[0].v = 0; pAxis->nextpoint.axis[0].p = start; if ((pAxis->route = routeNew( &(pAxis->endpoint), &pars )) != NULL && (pAxis->params = motorParam->create( 0, MOTOR_AXIS_NUM_PARAMS )) != NULL && (pAxis->axisMutex = epicsMutexCreate( )) != NULL ) { pAxis->card = card; pAxis->axis = axis; pAxis->hiHardLimit = hiLimit; pAxis->lowHardLimit = lowLimit; pAxis->home = home; pAxis->print = motorSimLogMsg; pAxis->logParam = NULL; motorParam->setDouble(pAxis->params, motorAxisPosition, start); *ppLast = pAxis; pAxis->print( pAxis->logParam, TRACE_FLOW, "Created motor for card %d, signal %d OK", card, axis ); } else { if (pAxis->route != NULL) routeDelete( pAxis->route ); if (pAxis->params != NULL) motorParam->destroy( pAxis->params ); if (pAxis->axisMutex != NULL) epicsMutexDestroy( pAxis->axisMutex ); free ( pAxis ); pAxis = NULL; } } else { free ( pAxis ); pAxis = NULL; } } else { pAxis->print( pAxis->logParam, TRACE_ERROR, "Motor for card %d, signal %d already exists", card, axis ); return MOTOR_AXIS_ERROR; } if (pAxis == NULL) { pAxis->print( pAxis->logParam, TRACE_ERROR, "Cannot create motor for card %d, signal %d", card, axis ); return MOTOR_AXIS_ERROR; } return MOTOR_AXIS_OK; }