Int32 CalibrateAxis(ref AxisCalStates calState, Int32 moveToZeroSpeed, Int32 moveFromZeroSpeed, bool axisLimit) { Int32 speed = 0; switch (calState) { case AxisCalStates.calIdle: { break; } case AxisCalStates.MovingToZero: { if (axisLimit) { calState = AxisCalStates.MovingFromZero; speed = 0; } else { speed = moveToZeroSpeed; } break; } case AxisCalStates.MovingFromZero: { if (axisLimit) { speed = moveFromZeroSpeed; } else { calState = AxisCalStates.WaitAfterCal; speed = 0; } break; } case AxisCalStates.WaitAfterCal: { speed = 0; calState = AxisCalStates.calIdle; break; } } return(speed); }
/// <summary> /// Запуск калибровки. /// </summary> /// <returns>В случае наличия других задач (движение на заданные координаты или уже проводится калибровка) возвращается false и калибровка не начинается. Иначе запускается калибровка и возвращается true</returns> public bool StartCalibration() { if (state == States.Idle) { SetCoordinates(209000, 205000, -201000, 190000); state = States.Calibrating; calStateX = AxisCalStates.MovingToZero; calStateY = AxisCalStates.MovingToZero; calStateZ = AxisCalStates.MovingToZero; calStateA = AxisCalStates.MovingToZero; timer.Stop(); timer.Interval = calibrationTimerInterval; timer.Start(); return(true); } else { return(false); } }