public bool MoveRelAsync(char axis, int position) { mutex.WaitOne(); double final_pos = GetPosition(axis) + (double)position; if (final_pos > motors[axis].limit || final_pos < 0) { return(false); } int rot = MicronToRotation(axis, position); if (!SelectChannel()) { return(false); } if (!TMLLib.TS_SelectAxis(motors[axis].id)) { return(false); } if (!TMLLib.TS_MoveRelative(rot, speed, acceleration, NO_ADDITIVE, TMLLib.UPDATE_IMMEDIATE, TMLLib.FROM_REFERENCE)) { return(false); } mutex.ReleaseMutex(); return(true); }
private bool HomeAxis(byte axis_id) { Int32 position = -100000000; Int32 home_position = 0; Int32 back_step = 1000; double high_speed = 20; double low_speed = 1.0; double acceleration = 0.6; if (!TMLLib.TS_SelectAxis(axis_id)) { return(false); } if (!TMLLib.TS_MoveRelative(position, high_speed, acceleration, NO_ADDITIVE, TMLLib.UPDATE_IMMEDIATE, TMLLib.FROM_REFERENCE)) { return(false); } if (!TMLLib.TS_SetEventOnLimitSwitch(TMLLib.LSW_NEGATIVE, TMLLib.TRANSITION_LOW_TO_HIGH, WAIT_EVENT, NO_STOP)) { return(false); } if (!TMLLib.TS_SetEventOnMotionComplete(WAIT_EVENT, NO_STOP)) { return(false); } if (!TMLLib.TS_MoveRelative(back_step, low_speed, acceleration, NO_ADDITIVE, TMLLib.UPDATE_IMMEDIATE, TMLLib.FROM_REFERENCE)) { return(false); } if (!TMLLib.TS_SetEventOnMotionComplete(WAIT_EVENT, NO_STOP)) { return(false); } if (!TMLLib.TS_SetPosition(home_position)) { return(false); } return(true); }