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);
        }