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:
Initialisation program data (tooldata, wobjdata, welddata, touchsense etc.)
Overall program procedure.
Sensing procedure.
Welding procedure.
Sensing procedure.
Welding procedure.
…
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
andjointtarget
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 byVbEnsureInHome
.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
andjointtarget
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 byVbEnsureInHome
.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.