use of com.willwinder.universalgcodesender.model.events.ProbeEvent in project Universal-G-Code-Sender by winder.
the class ProbeServiceTest method testProbeServiceXYZ.
@Test
public void testProbeServiceXYZ() throws Exception {
doReturn(true).when(backend).isIdle();
ProbeService ps = new ProbeService(backend);
ProbeParameters pc = new ProbeParameters(1, new Position(5, 5, 5, Units.MM), 10, 10, 0., 1, 1, 1, 100, 25, 5, Units.MM, G55);
ps.performXYZProbe(pc);
Position probeY = new Position(2.0, 2.0, 0, Units.MM);
Position probeX = new Position(1.0, 1.0, 0, Units.MM);
Position probeZ = new Position(0., 0., 3.0, Units.MM);
// Events to transition between states.
ps.UGSEvent(new ProbeEvent(probeZ));
ps.UGSEvent(new ProbeEvent(probeZ));
ps.UGSEvent(new ProbeEvent(probeX));
ps.UGSEvent(new ProbeEvent(probeX));
ps.UGSEvent(new ProbeEvent(probeY));
ps.UGSEvent(new ProbeEvent(probeY));
ps.UGSEvent(new ControllerStateEvent(ControllerState.IDLE, ControllerState.RUN));
InOrder order = inOrder(backend);
order.verify(backend, times(1)).sendGcodeCommand(true, "G10 L20 P2 X0Y0Z0");
// Probe Z axis
order.verify(backend, times(1)).probe("Z", pc.feedRate, pc.zSpacing, pc.units);
order.verify(backend, times(1)).sendGcodeCommand(true, "G91 G21 G0 Z" + retractDistance(pc.zSpacing, pc.retractAmount));
order.verify(backend, times(1)).probe("Z", pc.feedRateSlow, pc.zSpacing, pc.units);
order.verify(backend, times(1)).sendGcodeCommand(true, "G90 G21 G0 Z0.0");
order.verify(backend, times(1)).sendGcodeCommand(true, "G90 G21 G0 X" + -pc.xSpacing);
order.verify(backend, times(1)).sendGcodeCommand(true, "G90 G21 G0 Z" + pc.zSpacing);
// probe X axis
order.verify(backend, times(1)).probe("X", pc.feedRate, pc.xSpacing, pc.units);
order.verify(backend, times(1)).sendGcodeCommand(true, "G91 G21 G0 X" + retractDistance(pc.ySpacing, pc.retractAmount));
order.verify(backend, times(1)).probe("X", pc.feedRateSlow, pc.xSpacing, pc.units);
order.verify(backend, times(1)).sendGcodeCommand(true, "G90 G21 G0 X" + -pc.xSpacing);
order.verify(backend, times(1)).sendGcodeCommand(true, "G90 G21 G0 Y" + -pc.ySpacing);
order.verify(backend, times(1)).sendGcodeCommand(true, "G90 G21 G0 X" + pc.xSpacing);
// probe Y axis
order.verify(backend, times(1)).probe("Y", pc.feedRate, pc.ySpacing, pc.units);
order.verify(backend, times(1)).sendGcodeCommand(true, "G91 G21 G0 Y" + retractDistance(pc.ySpacing, pc.retractAmount));
order.verify(backend, times(1)).probe("Y", pc.feedRateSlow, pc.ySpacing, pc.units);
order.verify(backend, times(1)).sendGcodeCommand(true, "G90 G21 G0 Z0.0");
order.verify(backend, times(1)).sendGcodeCommand(true, "G90 G21 G0 X0.0 Y0.0");
// Verify the correct offset
double radius = pc.probeDiameter / 2;
double xDir = ((pc.xSpacing > 0) ? -1 : 1);
double yDir = ((pc.ySpacing > 0) ? -1 : 1);
double xProbeOffset = pc.startPosition.x - probeX.x + xDir * (radius + Math.abs(pc.xOffset));
double yProbeOffset = pc.startPosition.y - probeY.y + yDir * (radius + Math.abs(pc.yOffset));
double zProbeOffset = pc.startPosition.z - probeZ.z;
order.verify(backend, times(1)).sendGcodeCommand(true, "G10 L20 P2 X" + Utils.formatter.format(xProbeOffset) + "Y" + Utils.formatter.format(yProbeOffset) + "Z" + Utils.formatter.format(zProbeOffset));
}
use of com.willwinder.universalgcodesender.model.events.ProbeEvent in project Universal-G-Code-Sender by winder.
the class ProbeServiceTest method testProbeServiceOutside.
@Test
public void testProbeServiceOutside() throws Exception {
doReturn(true).when(backend).isIdle();
ProbeService ps = new ProbeService(backend);
ProbeParameters pc = new ProbeParameters(1, new Position(5, 5, 5, Units.MM), 10, 10, 0., 1, 1, 1, 100, 25, 5, Units.MM, G55);
ps.performOutsideCornerProbe(pc);
Position probeY = new Position(2.0, 2.0, 0, Units.MM);
Position probeX = new Position(1.0, 1.0, 0, Units.MM);
// Events to transition between states.
ps.UGSEvent(new ProbeEvent(probeY));
ps.UGSEvent(new ProbeEvent(probeY));
ps.UGSEvent(new ProbeEvent(probeX));
ps.UGSEvent(new ProbeEvent(probeX));
ps.UGSEvent(new ControllerStateEvent(ControllerState.IDLE, ControllerState.DISCONNECTED));
InOrder order = inOrder(backend);
order.verify(backend, times(1)).sendGcodeCommand(true, "G10 L20 P2 X0Y0");
// probe Y axis
order.verify(backend, times(1)).sendGcodeCommand(true, "G90 G21 G0 X" + pc.xSpacing);
order.verify(backend, times(1)).probe("Y", pc.feedRate, pc.ySpacing, pc.units);
order.verify(backend, times(1)).sendGcodeCommand(true, "G91 G21 G0 Y" + retractDistance(pc.ySpacing, pc.retractAmount));
order.verify(backend, times(1)).probe("Y", pc.feedRateSlow, pc.ySpacing, pc.units);
order.verify(backend, times(1)).sendGcodeCommand(true, "G90 G21 G0 Y0.0");
order.verify(backend, times(1)).sendGcodeCommand(true, "G90 G21 G0 X0.0");
// probe X axis
order.verify(backend, times(1)).sendGcodeCommand(true, "G90 G21 G0 Y" + pc.ySpacing);
order.verify(backend, times(1)).probe("X", pc.feedRate, pc.xSpacing, pc.units);
order.verify(backend, times(1)).sendGcodeCommand(true, "G91 G21 G0 X" + retractDistance(pc.ySpacing, pc.retractAmount));
order.verify(backend, times(1)).probe("X", pc.feedRateSlow, pc.xSpacing, pc.units);
order.verify(backend, times(1)).sendGcodeCommand(true, "G90 G21 G0 X0.0");
order.verify(backend, times(1)).sendGcodeCommand(true, "G90 G21 G0 Y0.0");
// Verify the correct offset
double radius = pc.probeDiameter / 2;
double xDir = ((pc.xSpacing > 0) ? -1 : 1);
double yDir = ((pc.ySpacing > 0) ? -1 : 1);
double xProbeOffset = pc.startPosition.x - probeX.x + xDir * (radius + Math.abs(pc.xOffset));
double yProbeOffset = pc.startPosition.y - probeY.y + yDir * (radius + Math.abs(pc.yOffset));
order.verify(backend, times(1)).sendGcodeCommand(true, "G10 L20 P2 X" + Utils.formatter.format(xProbeOffset) + "Y" + Utils.formatter.format(yProbeOffset));
}
use of com.willwinder.universalgcodesender.model.events.ProbeEvent in project Universal-G-Code-Sender by winder.
the class ProbeServiceTest method testZProbe.
private void testZProbe(ProbeParameters pc) throws Exception {
ProbeService ps = new ProbeService(backend);
ps.performZProbe(pc);
Position probeZ = new Position(5, 5, 3, Units.MM);
ps.UGSEvent(new ProbeEvent(probeZ));
ps.UGSEvent(new ProbeEvent(probeZ));
ps.UGSEvent(new ControllerStateEvent(ControllerState.IDLE, ControllerState.RUN));
InOrder order = inOrder(backend);
order.verify(backend, times(1)).probe("Z", pc.feedRate, pc.zSpacing, pc.units);
order.verify(backend, times(1)).sendGcodeCommand(true, "G91 G20 G0 Z" + retractDistance(pc.zSpacing, pc.retractAmount));
order.verify(backend, times(1)).probe("Z", pc.feedRateSlow, pc.zSpacing, pc.units);
order.verify(backend, times(1)).sendGcodeCommand(true, "G90 G20 G0 Z0.0");
double zDir = Math.signum(pc.zSpacing) * -1;
double zProbedOffset = zDir * pc.zOffset;
Position startPositionInUnits = pc.startPosition.getPositionIn(pc.units);
double zPosition = startPositionInUnits.z - probeZ.getPositionIn(pc.units).z + zProbedOffset;
order.verify(backend, times(1)).sendGcodeCommand(true, "G10 L20 P1 Z" + Utils.formatter.format(zPosition));
}
use of com.willwinder.universalgcodesender.model.events.ProbeEvent in project Universal-G-Code-Sender by winder.
the class AutoLevelerTopComponent method UGSEvent.
@Override
public void UGSEvent(UGSEvent evt) {
if (evt instanceof ProbeEvent) {
if (!scanner.isCollectedAllProbe())
return;
Position probe = ((ProbeEvent) evt).getProbePosition();
Position offset = this.settings.getAutoLevelSettings().autoLevelProbeOffset;
if (probe.getUnits() == Units.UNKNOWN || offset.getUnits() == Units.UNKNOWN) {
System.out.println("Unknown units in autoleveler receiving probe.");
}
offset = offset.getPositionIn(probe.getUnits());
scanner.probeEvent(new Position(probe.x + offset.x, probe.y + offset.y, probe.z + offset.z, probe.getUnits()));
} else if (evt instanceof SettingChangedEvent) {
updateSettings();
} else if (evt instanceof FileStateEvent) {
applyToGcode.setEnabled(true);
}
}
use of com.willwinder.universalgcodesender.model.events.ProbeEvent in project Universal-G-Code-Sender by winder.
the class ProbeService method UGSEvent.
@Override
public void UGSEvent(UGSEvent evt) {
if (this.currentOperation == ProbeOperation.NONE)
return;
if (evt instanceof ControllerStateEvent) {
ControllerStateEvent controllerStateEvent = (ControllerStateEvent) evt;
ControllerState state = controllerStateEvent.getState();
if (state == ControllerState.DISCONNECTED) {
resetProbe();
} else if (state == ControllerState.IDLE) {
// Finalize
if (this.currentOperation.getNumProbes() <= this.probePositions.size()) {
try {
continuation.execute();
} catch (Exception e) {
logger.log(Level.SEVERE, "Exception finalizing " + this.currentOperation + " probe operation.", e);
} finally {
params.endPosition = this.backend.getMachinePosition();
this.resetProbe();
}
}
}
} else if (evt instanceof ProbeEvent) {
this.probePositions.add(((ProbeEvent) evt).getProbePosition());
try {
continuation.execute();
} catch (Exception e) {
logger.log(Level.SEVERE, "Exception during " + this.currentOperation + " probe operation.", e);
resetProbe();
}
}
}
Aggregations