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.

Copy
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.

Copy
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
    {

    }

}