Jump And Drill Shape Pattern
The jump and drill pattern, moves the laser beam to each specified point, in the order they have been defined, and fires the laser. The jumps are executed with the maximum speed possible, and the controllers will then fire the laser, using an open loop control configuration or a closed loop control configuration.
JumpAndDrillShapePattern | Creates the Jump and fire drill shape pattern |
Properties
DrillPulseList | Get or Set the pulse list associated with this Jump and Fire Drill shape pattern |
LaserModulationDelay | Get or Set the laser modulation delay. |
LaserOffLag | Get or Set the Laser off lag. |
LaserPulseSkew | Get or Set the pulse skew |
PulseWidth1 | Get or Set the laser 1 pulse width. |
PulseWidth2 | Get or Set the laser 2 pulse width. |
UsePulseBurstMode | Get or set the pulse bust mode status |
Methods
AddDrillPulse | Adds a laser pulse configuration to be used with bust mode operation. |
DeleteDrillPulse | Delete a laser pulse configuration from the list of pulses |
The laser properties are changed at each drill point according to the parameters defined in the pattern. The pattern support two laser modulation signals, which can be individually controlled, to perform the drilling operation. The timing relationship of the controllable parameters of the jump and drill pattern can be defined as given in the following timing diagram.
Laser Mod Delay | Laser modulation delay in milli seconds |
Pulse 1 Width | The width of the laser 1 modulation pulse |
Pulse Skew | The delay between the two laser modulation signals |
Pulse 2 Width | The width of the laser 2 modulation pulse |
Laser Off Lag | Delay before switching laser on signal, off |
The laser on time is derived using the sum of all the above parameters.
Apart from the jump and drill operation the pattern supports a burst mode where the laser will be fired several specified number of pulses, once reaching the drilling point. In burst mode the number of laser pulses and the laser on off times can be specified.
Open loop mode
In the open loop mode, the laser will be fired after a calibrated jump waiting time for each length of the jumps performed. The jump time will be calculated using a jump time calibration table which should be built before any drilling operation. The controllers can generate the calibration table automatically upon sending a command and does not need repeated calibrations unless the accuracy drifts. To configure the open loop mode of operation, insert the following commands in the ScanScript.
Laser.GalvoErrorCheckEnable(0x0022, 0x0022) |
System.CalibrateJumpTime() |
System.EnableSettleChecking(SettleCheckMode.AfterFiring, SettleCheckPort.UseGSBusChannelStatus, 0x0066, 0x0066, 10000, 80) |
Following sample outlines the commands used to configure the open loop mode of operation in ScanScript.
DistanceUnit drillUnits = DistanceUnit.Millimeters;
scanDocument = scanDeviceManager.CreateScanDocument("Cntrl_1", drillUnits, false);
if (scanDocument != null)
{
VectorImage vectorImage = GetNewVectorImage();
int markdelayInUsec = 200;
int polydelayInUsec = 75;
int JumpDelay = 10;
int JumpSpeed = 10;
int LaserOnDelay = 5;
int LaserOffDelay = 5;
vectorImage.SetJumpDelay(JumpDelay);
vectorImage.SetMarkDelay(markdelayInUsec);
vectorImage.SetPolyDelay(polydelayInUsec);
vectorImage.SetJumpSpeed(JumpSpeed);
//Set Laser Delays
vectorImage.SetLaserOnDelay(LaserOnDelay);
vectorImage.SetLaserOffDelay(LaserOffDelay);
bool pulsemode = false;
JumpAndDrillShapePattern jumpandDrillPattern = new JumpAndDrillShapePattern((float)2.5, (float)2.5, 14, 1, 2, pulsemode);
// Create a Drill Pulse
DrillPulse pulse1 = new DrillPulse(2.5f, 2.5f, 5);
jumpandDrillPattern.AddDrillPulse(pulse1);
//Create a drill shape.
DrillShape drillShape = new DrillShape();
drillShape.SetPattern(jumpandDrillPattern);
//Add drill Points to the drill shape
drillShape.AddJumpAndDrillPoint(0, 0, 0);
drillShape.AddJumpAndDrillPoint(10, 10, 0);
drillShape.AddJumpAndDrillPoint(20, 20, 0);
// Add the Drill shape to vector image
vectorImage.AddDrill(drillShape);
// Enable Lightning II galvo error checking in case of a fault -- single head system
string CLM_Drilling = "Laser.GalvoErrorCheckEnable(0x0022, 0x0022)";
// Alternatively, a dual head system instead
// string CLM_Drilling = Laser.GalvoErrorCheckEnable(0x2222, 0x2222)
// Open Loop mode using JumpAndFire requires a jump time calibration to be performed at least once before the drilling operation
// Only needed periodically to maintain accuracy
CLM_Drilling += "System.CalibrateJumpTime()\n";
// Open Loop mode drilling we verify after firing the laser. This settle checks a single Lightning II scan head system
CLM_Drilling += "System.EnableSettleChecking(SettleCheckMode.AfterFiring, SettleCheckPort.UseGSBusChannelStatus, 0x0066, 0x0066, 10000, 80)\n";
// Alternatively this settle checks a dual Lightning II scan head system instead
// CLM_Drilling += "System.EnableSettleChecking(SettleCheckMode.AfterFiring, SettleCheckPort.UseGSBusChannelStatus, 0x6666, 0x6666, 10000, 80)\n";
CLM_Drilling += "ScanAll()\n";
scanDocument.Scripts.Add(new ScanningScriptChunk("SC_CL_DRILLING", CLM_Drilling));
try
{
scanDocument.StartScanning();
}
catch
{
}
}
Closed loop mode
In the closed loop mode, the laser will be fired after performing a position check at the end of each jump operation. The jumps are executed with the maximum speed possible, and the controllers will then check the position to confirm whether the galvos are accurately settled and positioned on the drilling point, before firing the laser. To configure the closed loop mode of operation, insert the following commands in the ScanScript.
Laser.GalvoErrorCheckEnable(0x0022, 0x0022) |
System.EnableSettleChecking(SettleCheckMode.BeforeFiring, SettleCheckPort.UseGSBusChannelStatus, 0x0066, 0x0066, 10000, 80) |
Following sample outlines the commands used to build the jump time calibration table in ScanScript.
DistanceUnit drillUnits = DistanceUnit.Millimeters;
scanDocument = scanDeviceManager.CreateScanDocument("Cntrl_1", drillUnits, false);
if (scanDocument != null)
{
VectorImage vectorImage = GetNewVectorImage();
int markdelayInUsec = 200;
int polydelayInUsec = 75;
int JumpDelay = 10;
int JumpSpeed = 10;
int LaserOnDelay = 5;
int LaserOffDelay = 5;
vectorImage.SetJumpDelay(JumpDelay);
vectorImage.SetMarkDelay(markdelayInUsec);
vectorImage.SetPolyDelay(polydelayInUsec);
vectorImage.SetJumpSpeed(JumpSpeed);
//Set Laser Delays
vectorImage.SetLaserOnDelay(LaserOnDelay);
vectorImage.SetLaserOffDelay(LaserOffDelay);
bool pulsemode = false;
JumpAndDrillShapePattern jumpandDrillPattern = new JumpAndDrillShapePattern((float)2.5, (float)2.5, 14, 1, 2, pulsemode);
// Create a Drill Pulse
DrillPulse pulse1 = new DrillPulse(2.5f, 2.5f, 5);
jumpandDrillPattern.AddDrillPulse(pulse1);
//Create a drill shape.
DrillShape drillShape = new DrillShape();
drillShape.SetPattern(jumpandDrillPattern);
//Add drill Points to the drill shape
drillShape.AddJumpAndDrillPoint(0, 0, 0);
drillShape.AddJumpAndDrillPoint(10, 10, 0);
drillShape.AddJumpAndDrillPoint(20, 20, 0);
// Add the Drill shape to vector image
vectorImage.AddDrill(drillShape);
// Enable Lightning II galvo error checking in case of a fault -- single head system
// string CLM_Drilling = "Laser.GalvoErrorCheckEnable(0x0022, 0x0022)\n";
string CLM_Drilling = defualtScriptLogging;
CLM_Drilling += "Laser.GalvoErrorCheckEnable(0x0022, 0x0022)\n";
// Alternatively, a dual head system instead
// string CLM_Drilling = "Laser.GalvoErrorCheckEnable(0x2222, 0x2222)\n"
// Closed Loop mode drilling so Enable galvo settle checking. This settle checks a single Lightning II scan head system
CLM_Drilling += "System.EnableSettleChecking(SettleCheckMode.BeforeFiring, SettleCheckPort.UseGSBusChannelStatus, 0x0066, 0x0066, 10000, 80)\n";
// Alternatively this settle checks a dual Lightning II scan head system instead
// CLM_Drilling += "System.EnableSettleChecking(SettleCheckMode.BeforeFiring, SettleCheckPort.UseGSBusChannelStatus, 0x6666, 0x6666, 10000, 80)\n";
CLM_Drilling += "ScanAll()\n";
scanDocument.Scripts.Add(new ScanningScriptChunk("SC_CL_DRILLING", CLM_Drilling));
try
{
scanDocument.StartScanning();
}
catch
{
}
}