protected void moveMotor( final IProgressMonitor monitor, final IScannableMotor motor, final double newPosition) throws DeviceException, InterruptedException { double motorSpeed = motor.getSpeed(); double position = (Double) motor.getPosition(); double distance = Math.abs(position - newPosition); double timeInSeconds = distance / motorSpeed; logger.debug(String.format("Time to move %1$f is %2$f", distance, timeInSeconds)); logger.debug(String.format("Speed of motor %1$s is %2$f", motor.getName(), motor.getSpeed())); motorsRunning.add(motor); motor.asynchronousMoveTo(newPosition); int totalTimeTakenInMills = (int) (timeInSeconds * 1000); final int step = totalTimeTakenInMills / 10000; SubMonitor progress = SubMonitor.convert( monitor, String.format("Moving %s from %.3g to %.3g", motor.getName(), position, newPosition), 10000); int count = 0; while (motor.isBusy()) { Double currPos = (Double) motor.getPosition(); progress.subTask(String.format("%s position: %.3g", motor.getName(), currPos)); progress.worked(1); Sleep.sleep(step); count++; if (monitor.isCanceled()) { motor.stop(); throw new InterruptedException("User Cancelled"); } } logger.debug("Motor queried count is {}", count); motorsRunning.remove(motor); }
protected void stopAllMotors() throws DeviceException { for (IScannableMotor motor : motorsRunning) { motor.stop(); } motorsRunning.clear(); }