@Override
 public void moveToSafeZ(double speed) throws Exception {
   logger.debug("{}.moveToSafeZ({})", new Object[] {getId(), speed});
   Location l = new Location(getLocation().getUnits(), Double.NaN, Double.NaN, 0, Double.NaN);
   driver.moveTo(this, l, speed);
   machine.fireMachineHeadActivity(head);
 }
 @Override
 public void place() throws Exception {
   logger.debug("{}.place()", getId());
   driver.place(this);
   machine.fireMachineHeadActivity(head);
   Thread.sleep(placeDwellMilliseconds);
 }
 @Override
 public void setEnabled(boolean enabled) throws Exception {
   if (enabled) {
     try {
       driver.setEnabled(true);
       this.enabled = true;
     } catch (Exception e) {
       fireMachineEnableFailed(this, e.getMessage());
       throw e;
     }
     fireMachineEnabled(this);
   } else {
     try {
       driver.setEnabled(false);
       this.enabled = false;
     } catch (Exception e) {
       fireMachineDisableFailed(this, e.getMessage());
       throw e;
     }
     fireMachineDisabled(this, "User requested stop.");
   }
 }
 @Override
 public void home() throws Exception {
   logger.debug("{}.home()", getId());
   driver.home(this);
   machine.fireMachineHeadActivity(this);
 }
 @Override
 public void moveTo(Location location, double speed) throws Exception {
   logger.debug("{}.moveTo({}, {})", new Object[] {id, location, speed});
   driver.moveTo(this, location, speed);
   machine.fireMachineHeadActivity(head);
 }
 @Override
 public Location getLocation() {
   return driver.getLocation(this);
 }