Package org.openpnp.machine.reference

Source Code of org.openpnp.machine.reference.ReferenceNozzle

package org.openpnp.machine.reference;

import java.util.ArrayList;

import javax.swing.Action;

import org.openpnp.ConfigurationListener;
import org.openpnp.gui.support.PropertySheetWizardAdapter;
import org.openpnp.gui.support.Wizard;
import org.openpnp.machine.reference.wizards.ReferenceNozzleConfigurationWizard;
import org.openpnp.model.Configuration;
import org.openpnp.model.Location;
import org.openpnp.spi.Feeder;
import org.openpnp.spi.NozzleTip;
import org.openpnp.spi.PropertySheetHolder;
import org.openpnp.spi.base.AbstractNozzle;
import org.openpnp.spi.base.SimplePropertySheetHolder;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ReferenceNozzle extends AbstractNozzle implements
        ReferenceHeadMountable {
    private final static Logger logger = LoggerFactory
            .getLogger(ReferenceNozzle.class);

    @Element
    private Location headOffsets;

    @Attribute(required = false)
    private int pickDwellMilliseconds;

    @Attribute(required = false)
    private int placeDwellMilliseconds;
   
    @Attribute(required = false)
    private String currentNozzleTipId;
   
    @Attribute(required = false)
    private boolean changerEnabled = false;
   
    protected NozzleTip nozzleTip;

    protected ReferenceMachine machine;
    protected ReferenceDriver driver;

    public ReferenceNozzle() {
        Configuration.get().addListener(new ConfigurationListener.Adapter() {
            @Override
            public void configurationLoaded(Configuration configuration)
                    throws Exception {
                machine = (ReferenceMachine) configuration.getMachine();
                driver = machine.getDriver();
                nozzleTip = nozzleTips.get(currentNozzleTipId);
            }
        });
    }

    public int getPickDwellMilliseconds() {
        return pickDwellMilliseconds;
    }

    public void setPickDwellMilliseconds(int pickDwellMilliseconds) {
        this.pickDwellMilliseconds = pickDwellMilliseconds;
    }

    public int getPlaceDwellMilliseconds() {
        return placeDwellMilliseconds;
    }

    public void setPlaceDwellMilliseconds(int placeDwellMilliseconds) {
        this.placeDwellMilliseconds = placeDwellMilliseconds;
    }

    @Override
    public Location getHeadOffsets() {
        return headOffsets;
    }
   
    @Override
    public void setHeadOffsets(Location headOffsets) {
        this.headOffsets = headOffsets;
    }

    @Override
    public NozzleTip getNozzleTip() {
        return nozzleTip;
    }

    @Override
    public boolean canPickAndPlace(Feeder feeder, Location placeLocation) {
        boolean result = true;
    logger.debug("{}.canPickAndPlace({},{}) => {}", new Object[]{getId(), feeder, placeLocation, result});
      return result;
  }

    @Override
    public void pick() throws Exception {
    logger.debug("{}.pick()", getId());
    if (nozzleTip == null) {
        throw new Exception("Can't pick, no nozzle tip loaded");
    }
    driver.pick(this);
        machine.fireMachineHeadActivity(head);
        Thread.sleep(pickDwellMilliseconds);
    }

    @Override
    public void place() throws Exception {
    logger.debug("{}.place()", getId());
        if (nozzleTip == null) {
            throw new Exception("Can't place, no nozzle tip loaded");
        }
    driver.place(this);
        machine.fireMachineHeadActivity(head);
        Thread.sleep(placeDwellMilliseconds);
    }

    @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 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 loadNozzleTip(NozzleTip nozzleTip) throws Exception {
        if (this.nozzleTip == nozzleTip) {
            return;
        }
        if (!changerEnabled) {
            throw new Exception("Can't load nozzle tip, nozzle tip changer is not enabled.");
        }
        unloadNozzleTip();
        logger.debug("{}.loadNozzleTip({}): Start", new Object[]{getId(), nozzleTip.getId()});
        ReferenceNozzleTip nt = (ReferenceNozzleTip) nozzleTip;
        logger.debug("{}.loadNozzleTip({}): moveToSafeZ", new Object[]{getId(), nozzleTip.getId()});
        moveToSafeZ(1.0);
        logger.debug("{}.loadNozzleTip({}): moveTo Start Location", new Object[]{getId(), nozzleTip.getId()});
        moveTo(nt.getChangerStartLocation(), 1.0);
        logger.debug("{}.loadNozzleTip({}): moveTo Mid Location", new Object[]{getId(), nozzleTip.getId()});
        moveTo(nt.getChangerMidLocation(), 0.25);
        logger.debug("{}.loadNozzleTip({}): moveTo End Location", new Object[]{getId(), nozzleTip.getId()});
        moveTo(nt.getChangerEndLocation(), 1.0);
        moveToSafeZ(1.0);
        logger.debug("{}.loadNozzleTip({}): Finished", new Object[]{getId(), nozzleTip.getId()});
        this.nozzleTip = nozzleTip;
        currentNozzleTipId = nozzleTip.getId();
        Configuration.get().setDirty(true);
    }

    @Override
    public void unloadNozzleTip() throws Exception {
        if (nozzleTip == null) {
            return;
        }
        if (!changerEnabled) {
            throw new Exception("Can't unload nozzle tip, nozzle tip changer is not enabled.");
        }
        logger.debug("{}.unloadNozzleTip(): Start", new Object[]{getId()});
        ReferenceNozzleTip nt = (ReferenceNozzleTip) nozzleTip;
        logger.debug("{}.unloadNozzleTip(): moveToSafeZ", new Object[]{getId()});
        moveToSafeZ(1.0);
        logger.debug("{}.unloadNozzleTip(): moveTo End Location", new Object[]{getId()});
        moveTo(nt.getChangerEndLocation(), 1.0);
        logger.debug("{}.unloadNozzleTip(): moveTo Mid Location", new Object[]{getId()});
        moveTo(nt.getChangerMidLocation(), 1.0);
        logger.debug("{}.unloadNozzleTip(): moveTo Start Location", new Object[]{getId()});
        moveTo(nt.getChangerStartLocation(), 0.25);
        moveToSafeZ(1.0);
        logger.debug("{}.unloadNozzleTip(): Finished", new Object[]{getId()});
        nozzleTip = null;
        currentNozzleTipId = null;
        Configuration.get().setDirty(true);
    }

    @Override
    public Location getLocation() {
        return driver.getLocation(this);
    }
   
    public boolean isChangerEnabled() {
        return changerEnabled;
    }

    public void setChangerEnabled(boolean changerEnabled) {
        this.changerEnabled = changerEnabled;
    }

    @Override
    public Wizard getConfigurationWizard() {
        return new ReferenceNozzleConfigurationWizard(this);
    }
   
  @Override
    public String getPropertySheetHolderTitle() {
      return getClass().getSimpleName() + " " + getId();
    }

    @Override
    public PropertySheetHolder[] getChildPropertySheetHolders() {
        ArrayList<PropertySheetHolder> children = new ArrayList<PropertySheetHolder>();
        children.add(new SimplePropertySheetHolder("Nozzles", getNozzleTips()));
        return children.toArray(new PropertySheetHolder[]{});
    }

    @Override
    public PropertySheet[] getPropertySheets() {
        return new PropertySheet[] {
                new PropertySheetWizardAdapter(getConfigurationWizard())
        };
    }
       
    @Override
    public Action[] getPropertySheetHolderActions() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
  public String toString() {
    return getId();
  }
}
TOP

Related Classes of org.openpnp.machine.reference.ReferenceNozzle

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.