ABB

This page is a guide to help users understand the requirements of setting up an ABB robotic welding system for use with Verbotics Weld. Verbotics also offer consulting and training services to assist with the calibration and setup of a welding system - please contact us for pricing.

TCP Calibration

The real world TCP should be calibrated using the ABB tool calibration. After calibration, it is then suggested that the rotational values are overwritten with theoretical values (that can be supplied by Verbotics) as rotational values are difficult to calibrate using this method.

Care should be taken to ensure that the axes directions follow the expected directions for Verbotics Weld:

  • Z - Pointing out in the wire direction.

  • X - Pointing down from the robot when the robot is at position [0, 0, 0, 0, 0, 0].

  • Y - Orthogonal to X and Z with a right hand rule.

The TCP calibration should use the expected stickout specified in the workcell model file supplied by Verbotics for the cell and the wirecut routine should be written to cut the wire to this length prior to touch sensing.

Workpiece Positioner Calibration

Headstock Tailstock Axis

The headstock and tailstock position should be known such that the axis direction between the headstock and tailstock can be calculated. The calibration guide can be used and values supplied to Verbotics such that we can set suggest the correct ABB parameters for your wokrpiece positioner to minimise the error bewteen the positioner and the robot.

Code Output

Verbotics Weld is capable of creating ABB RAPID modules that can be loaded and executed by your robot. The code output consists of the following parts:

  • The output created by the software for the specific Verbotics Weld project.

  • A system module that contains routines used by Verbotics Weld. This includes placeholder routines that are called at certain events (e.g. torch-clean). These are required and can be supplied blank by Verbotics. These should contain specific code to perform certain functions, and allow the system integrator (or end user) to create customised functions.

Overall Structure

The structure of the output is:

  1. Initialisation program data (tooldata, wobjdata, welddata, touchsense etc.)

  2. Overall program procedure.

  3. Sensing procedure.

  4. Welding procedure.

  5. Sensing procedure.

  6. Welding procedure.

  7. Verbotics fucntions and procedures.

The sensing code has the following structure:

LOCAL PROC SenseWeld1()
  CONST string operationid := "SenseWeld1";
  VAR pos offset := [0, 0, 0];
  IF NOT VbShouldRun(operationid) THEN
    RETURN;
  ENDIF
  IF VbInRobTarget(robtarget) THEN
    MoveAbsJ jointtarget, vtransition, z10, vbtool, \WObj:=vbwobj;
    MoveAbsJ jointtarget, vtransition, z10, vbtool, \WObj:=vbwobj;
    MoveAbsJ jointtarget, vtransition, z10, vbtool, \WObj:=vbwobj;
    MoveAbsJ jointtarget, vtransition, z10, vbtool, \WObj:=vbwobj;
  ELSE
    VbEnsureInHome;
    MoveAbsJ jointtarget, vtransition, z10, vbtool, \WObj:=vbwobj;
    MoveAbsJ jointtarget, vtransition, z10, vbtool, \WObj:=vbwobj;
  ENDIF
  VbBeforeTouchSense;
  TPWrite "Sensing 'Weld1'";
  touchsense68.offset := [0, 0, 0];
  touchsense69.offset := [0, 0, 0];
  touchsense70.offset := [0, 0, 0];
  MoveL robtarget, vapproach, z10, vbtool, \WObj:=vbwobj;
  VbSearchL VbOffsPos(robtarget, touchsense68.offset), touch116;
  MoveL robtarget, vapproach, z10, vbtool, \WObj:=vbwobj;
  touchsense68.offset := VbOffsByTouch(touchsense68.offset, touch116);
  touchsense69.offset := VbOffsByTouch(touchsense69.offset, touch116);
  touchsense70.offset := VbOffsByTouch(touchsense70.offset, touch116);
  MoveAbsJ robtarget, vtransition, z10, vbtool, \WObj:=vbwobj;
  MoveAbsJ robtarget, vtransition, z10, vbtool, \WObj:=vbwobj;
  MoveL robtarget, vapproach, z10, vbtool, \WObj:=vbwobj;
  VbSearchL VbOffsPos(robtarget, touchsense68.offset), touch117;
  MoveL robtarget, vapproach, z10, vbtool, \WObj:=vbwobj;
  touchsense68.offset := VbOffsByTouch(touchsense68.offset, touch117);
  touchsense69.offset := VbOffsByTouch(touchsense69.offset, touch117);
  touchsense70.offset := VbOffsByTouch(touchsense70.offset, touch117);
  VbSetComplete(operationid);
  VbAfterTouchSense;
ENDPROC
  • Robtargets and Jointtargets are exported inline. They have been replaced by robtarget and jointtarget for clarity.

  • The operationid is used to record where the program is up to for resuming purposes.

  • This is checked with VbSouldRun and is skipped if already run during a resume operation.

  • There are two motions paths, one from the expected previous operation, and one from home. The position of the robot is checked with VbInRobTarget and if it is in the correct position the motion path from the previous location is executed. Otherwise a motion path from the home position is executed. The use is warned if the robot is in an unexpected state by VbEnsureInHome.

  • The sensing operations are perfomed and data recorded to modify the weld path.

The welding code has the following structure:

LOCAL PROC WeldWeld1()
  CONST string operationid := "WeldWeld1";
  IF NOT VbShouldRun(operationid) THEN
    RETURN;
  ENDIF
  IF VbInRobTarget(robtarget) THEN
    MoveAbsJ jointtarget, vtransition, z10, vbtool, \WObj:=vbwobj;
    MoveAbsJ jointtarget, vtransition, z10, vbtool, \WObj:=vbwobj;
  ELSE
    VbEnsureInHome;
    MoveAbsJ jointtarget, vtransition, z10, vbtool, \WObj:=vbwobj;
    MoveAbsJ jointtarget, vtransition, z10, vbtool, \WObj:=vbwobj;
  ENDIF
  VbBeforeWeld;
  TPWrite "Welding 'Weld1'";
  MoveL robtarget, vapproach, z1, vbtool, \WObj:=vbwobj;
  VbSetComplete(operationid);
  ArcLStart VbOffs(robtarget, 0, touchsense68, touchsense69), vapproach, vbseam, WeldSettings , z0, vbtool, \WObj:=vbwobj;
  ArcLEnd VbOffs(robtarget, 1, touchsense69, touchsense70), vapproach, vbseam, WeldSettings , z0, vbtool, \WObj:=vbwobj;
  MoveL robtarget, vapproach, z1, vbtool, \WObj:=vbwobj;
  VbAfterWeld;
ENDPROC
  • Robtargets and Jointtargets are exported inline. They have been replaced by robtarget and jointtarget for clarity.

  • The operationid is used to record where the program is up to for resuming purposes.

  • This is checked with VbSouldRun and is skipped if already run during a resume operation.

  • There are two motions paths, one from the expected previous operation, and one from home. The position of the robot is checked with VbInRobTarget and if it is in the correct position the motion path from the previous location is executed. Otherwise a motion path from the home position is executed. The use is warned if the robot is in an unexpected state by VbEnsureInHome.

  • The weld is performed.

  • The weld path is offset by VbOffs which will take the sensing data and robtarget as an input and return the corrected position.

Other Routines

The code output will call these procedures at certain events in the code output. All proceduers are required, but can be empty and simply return upon executing. These should be modified as required by the system integrator to perform the required customised functions. Verbotics can supply a system module for this purpose.

The following procedure calls are created:

  • VbCutWire - Called when a wire-cut is to be performed. This is usually before a group of touch sense operations. This should start and end with the robot in the home position (excluding external axes).

  • VbTorchClean - Called when a torch-clean is to be performed. Should also include a wire cut. This should start and end with the robot in the home position (excluding external axes).

  • VbBeforeSearch - Called before a search is initiated.

  • VbAfterSearch - Called when a search is completed.

  • VbBeforeWeld - Called before a weld is started.

  • VbAfterWeld - Called when a weld is completed.

For example, if your welding torch had a wire brake to assist with touch sensing. The VbCutWire routine could be used to switch on the wire brake, and the VbBeforeWeld routine could be used to switch off the wire brake.