.xlsx), a CSV file of another manufacturer or a table read with the columns of
the WPS reader settings. It shows for every weld command of the programs whether the weld point is in the plan,
whether the right robot welds it, whether the name in the comment above the point is the name of the plan and how
far the programmed point lies from the plan position. Plan points that no program welds and weld points welded
by two robots are listed as well. The check only reports; the programs and the plan are not changed.
The plan is read by an own reader of DrAmaT Robot Studio - MS Excel is not needed (the old Excel format
.xls is not read by this window: save the file as .xlsx).
Where:
- menu VKRC, KRC, VFanuc or ABB » Weld plan check... (below Axis limit usage...) - the window lists the robot projects of this manufacturer; the active program of the manufacturer is added to the programs and checked;
- command API:
weld_plan- without a window and without a plugin (see step by step, attributes and VeRa / command API).
How the points are paired
- Every weld command of a program is paired with the plan point by its weld point number (index) from the weld command, together with the car type when both the command and the plan have one. The number defines the weld point.
- The name of the weld point in the comment above the point is never used for the pairing - it
can be wrong or missing. It is only checked against the name of the plan (finding
NAME_DIFFERS/NAME_MISSING). When the name of the program is the name of another plan point, the message names that point. - A weld point number that is more than once in the plan (same number, same car type) is an
error of the plan (
PLAN_DUPLICATE_INDEX) - every weld point needs its own number. - A command without a car type, whose number the plan has for several car types, is not paired
(
AMBIGUOUS_INDEX). A plan point without a car type matches the number of any car type. - Numbers are compared without leading zeros (
015068=15068). - Service points - VW numbers below 100 (tip dressing, measurement of the electrodes) - are skipped,
unless the plan contains them; the answer of the API counts them (
servicePointsSkipped). - The robot of the plan (A33 column Schweissen durch Rob.) is compared with the robot of the
program (robot project or folder of the archive). Two names are the same robot when they are equal or one
ends with the other (e.g. a plan name ending with
R01and the projectR01; case and spaces are ignored, at least 3 characters with a digit).
Weld commands of the programs
| Robot | Weld command | Weld point number / car type |
| KUKA VKRC / KRC (VW) | fold SERVOZANGE (header line of the fold) | Punktnummer / FahrzeugTyp |
| KUKA VKRC (VW) | Tech command Tech_.EZSP, TECH EZ / SP | S-Punkt / Fzg-Typ; without labels the parameters P5 / P6 - the numbers of the parameters are taken from the WPS reader settings (defaults: gun P1, weld program P2, index P5, car type P6) |
| Fanuc (VW) | VW_USER EZSP | S-Punkt / Fzg_Typ |
| ABB | weld command found with the regular expression of the WPS reader settings (the same pattern as the ABB WPS plugin) | named groups index / fzg; the group name gives the name of the weld point |
SPOT[...], KUKA ServoGun SG.SPOT) are found as well; without a weld point number in the
command they give the finding NO_INDEX. KUKA: only the header lines of the folds are read (the
hidden code of the fold repeats the same data).
- Point of the weld: the last motion before the weld command (KUKA: weld fold inside the motion fold, Fanuc: weld call after the motion line); ABB: the motion in the same line. The position is the TCP in the frame of the point (TOOL / BASE, UT / UF).
- Name of the weld point: ABB from the weld command; otherwise the nearest comment above the point
(up to the previous motion, at most 40 lines):
M_COMMENT("..."), VW comment fold;FOLD -- name --, Fanuc! name, ABB! name. Comments of interlocks, waits, motions, tip dressing and similar are not taken as names.
Positions: only in the car coordinates
The plan holds the positions in the car coordinates. A program point is compared with the plan position only when it is programmed in the frame of the car coordinates - Car coordinates in BASE / UF, KUKA BASE number / Fanuc UF number, default 1. Points in other frames are not converted and not compared (findingOTHER_FRAME, once per robot and frame); none (0) switches the comparison of the positions off.
d = distance of the program point (TCP) from the plan point; above the tolerance (default 2 mm) the point
is a deviation. dX / dY / dZ = program - plan.
Robot statistics: shifted base or single points
For every robot the report calculates from the compared weld points (each number once) the mean shift dX / dY / dZ and its length, the spread (RMS of the deviations around the mean) and the largest deviation.- Base shifted? (
BASE_SHIFT, warning): at least 4 compared points, the mean shift is larger than the tolerance and the spread is within the tolerance - all points of the robot are shifted together. Probably the frame of the car coordinates (base) of the robot is shifted, not the single points: check the base before correcting the points. MEAN_OFFSET(info): the mean shift is larger than the tolerance, but the spread too - single points differ, there is no common shift.
Formats of the weld plan
| Import | How the plan is read |
| Automatic (default) | by the extension: .csv / .txt = CSV, otherwise an
Excel workbook (.xlsx, .xlsm) with the columns found by the header texts as in the
A33 plan; .xls - message: save it as .xlsx |
| VW A33 spot weld plan | sheets Punktplan* (without the example sheets; when there are none,
all sheets); the header row is found by the text of the weld point number Punkt- Nummer (Index) in the
first 80 rows; the header has two rows (e.g. Netzlinien / NL X). Columns: Punkt- Nummer
(Index), Fzg-Typ, Punkt- Name, Schweissen durch Rob., Schweisszangen-Nr,
Schweisskoffer, Schweissprogramm, NL X, NL Y, NL Z, sheet thicknesses
t1..t4. Sheets without this header (title page, drawings, lists) are skipped. Rows whose number
cell is not a number (or car type;number, e.g. 6;15068, 6-15068) are
skipped (remarks, footer). |
| CSV | header line with the column names (aliases below); separator ;
, or tab found in the header line (or set with delimiter); UTF-8 or Windows-1252
(Excel CSV); decimal comma allowed |
| Columns of the WPS reader settings | columns, first / last row, sheets and the robot name matrix of Settings → Configure → Welding point reader - the same table as the WPS plugins (VKRC / VFanuc / ABB WPS); rows without a point name are skipped, last row 0 = up to the first empty row |
| Field | Header texts |
| index | Punkt- Nummer, Punktnummer, Index, (Index), S-Punkt, Spot No / Number / Index / ID, Point No ..., Weld No ... |
| carType | Fzg-Typ, Fahrzeug-Typ, Car type, Vehicle type |
| name | Punkt- Name, FE-Bezeichnung, Point name, Spot name, Weld name, Name |
| robot | Schweissen durch ..., Rob. IR, Robot, Roboter, Robot Name |
| gun | Schweisszangen-Nr, Gun No / Number / ID, Gun, Zange |
| box | Schweisskoffer, Welding box / control / timer, Timer |
| program | Schweissprogramm, Prog. Nr, Weld program, Program, Programm |
| x, y, z | NL X / NL Y / NL Z, X / Y / Z, X [mm] ..., Pos. X ... |
| t1 .. t4 | t1 .. t4, Thickness 1 .. 4 |
field=column separated by ; - Excel: column letters (index=C; name=D; x=J;
y=K; z=L), CSV: header names, column numbers 1.. or letters (index=SpotNo; name=Name; x=X; y=Y;
z=Z). Only the field index is required; without x, y, z the positions are not compared (status
no position in the plan). Numbers may have a decimal comma and thousands separators. Several plan files
can be checked together (e.g. one A33 per station).
Window
| Field | Default | Meaning (API parameter) |
| Weld plan, Add plan..., Remove | the files of the last check | files of the
weld plan (A33 .xlsx, .xlsm, .csv, .txt); the points of all checked files are used (plan) |
| Import: format | Automatic | Automatic / VW A33 spot weld plan / CSV / Columns of the WPS
reader settings (importFormat: auto | a33 | csv | wps) |
| Import: sheets | empty = automatic | Excel sheets: names (wildcards *
?) or numbers 1.. separated by commas, ranges 5-8; empty = A33 sheets
Punktplan* or all sheets (sheets) |
| Import: columns | empty = from the header | field=column separated by
;, fields index, carType, name, robot, gun, box, program, x, y, z, t1..t4
(columns) |
| Programs | the robot projects and folders checked last time; from the menu the active program | any combination of: Open programs in the editor (open), Robot project of the
project tree (projects), Archive / folder on the disk (folders), Program
files (files); buttons Add archive / folder..., Add programs..., Remove |
| File masks | empty = the program files of the robot | masks for archives and folders
separated by ; (masks) |
| Include system files | off | KUKA system files in archives and folders ($*.src, System,
Mada, TP, STEU ...) (includeSystem) |
| Tolerance | 2 mm (0.1 .. 100) | a larger distance of the program point from the plan point
is a deviation (tolMm) |
| Car coordinates in BASE / UF | 1 (0 = none, up to 32) | frame of the car
coordinates: KUKA BASE / Fanuc UF number; only points in this frame are compared; none = positions
not compared (carBase) |
| Check the names in the comments | on | compare the name above the point with the plan -
only a check, the pairing is always by the number (names) |
| Plan points not welded | on | report the plan points of the checked robots that no program
welds (notWelded) |
| Result | Table in this window | Table in this window / PDF file / HTML file / Excel workbook
(XLSX) / CSV file (format) |
| Report language (next to the result) | English | English / Deutsch - language of the report
(headings, texts and statuses of the PDF / HTML report) and of the messages of the findings; the window itself
stays English (language: en | de) |
| Report file, ... | empty = asked | file of the report (save) |
| Check | – | reads the plan and the programs and compares them |
Findings
| Code | Severity | Meaning |
| PLAN_DUPLICATE_INDEX | error | the same weld point number (and car type) is several times in the plan - the places (sheet, row, name) are listed; a program point with this number is paired with the first of them |
| NO_INDEX | error | spot weld command without a weld point number |
| NOT_IN_PLAN | error | the weld point number of the program is not in the plan (when the plan has the name of the comment with another number, the message names that number) |
| AMBIGUOUS_INDEX | error | number without a car type in the program, the plan has it for several car types |
| INDEX_TWO_ROBOTS | error | the same weld point is welded by two or more robots |
| OTHER_ROBOT | warning | the weld point is welded by another robot than the plan gives |
| NAME_DIFFERS | warning | the name in the comment differs from the plan name of this number (when it is the name of another plan point, that point is named) - correct the comment, or the number when the name is right |
| POSITION_DEVIATION | warning | distance from the plan point larger than the tolerance (one finding per robot and weld point with the largest deviation and the programs concerned) |
| NOT_WELDED | warning | plan point of a checked robot that no checked program welds (option Plan points not welded); plan points of robots that were not checked are only counted in a note |
| BASE_SHIFT | warning | all compared points of a robot are shifted together (see Robot statistics) |
| NAME_MISSING | info | no name above the weld point (the plan name is given) |
| OTHER_FRAME | info | points of a robot in another frame than the car coordinates - positions not compared |
| MEAN_OFFSET | info | mean shift of a robot larger than the tolerance, but no common shift |
Report
The language of the report is set with Report language (APIlanguage): English (default) or
Deutsch - headings, texts and statuses of the PDF / HTML report and the messages of the findings.
- PDF (A4 landscape) and HTML: plan files and number of points, programs and robots, tolerance and frame of the car coordinates, summary, notes; table Robots (welds, compared, within tolerance, mean dX / dY / dZ, mean, spread, max, base shifted?); table of the findings with the suggestions (column Line in the file and next to it Gun / prog. / no. - welding gun, weld program and weld point number of the weld command, as in the weld point report of the Robot Cell Simulator); table Weld points of the plan (n); table of all spot welds of the programs (robot, program, line in the file, gun / prog. / no., point, name in the program, name in the plan, dX / dY / dZ, d, result).
- Weld points of the plan (n): every point of the plan with the number (car type;number), the
name in the plan, the robot of the plan, Welded in - where it is welded: robot, program, point and
the line in the program file, e.g.
R1 UP42 P10 (line 278); several places are listed separated by commas - the largest deviation Max d [mm] and the result (OK / deviation / not welded / robot not checked / welded (position not compared)). Service positions of the gun (tip dressing, measurement, SERVOZANGE n Service) are not weld points and are not listed. - Line in the file: the report gives the line of the weld command in the program file. The editor shows a KUKA VW (KRC4) program in the compact form (one line per fold), so the line in the editor differs; the window and the column editorLine of the CSV give the line in the editor.
- CSV (UTF-8, separator
;): one row per weld command with the columns robot, vendor, program, fileLine, editorLine, point, carType, index, gun, weldProgram, name, planName, planRobot, planX, planY, planZ, x, y, z, frame, dX, dY, dZ, d, status. - XLSX: two sheets - Spot welds (the columns of the CSV) and Plan points (carType, index, name, planRobot, weldedIn, maxD, status; status ok | deviation | welded | notWelded | robotNotChecked).
Example report (anonymised VW station: 3 welding robots R1..R3, 79 programs, two A33 plans for the car types 6 and 7 with 98 weld points; part numbers and file names replaced; HTML as created by the editor - open in a new window):
Command API
{"cmd":"weld_plan", "plan":"D:/plans/A33_ST010.xlsx", "projects":["*"], "tolMm":2, "carBase":1,
"language":"de", "save":"D:/reports/weld_plan.pdf"}
{"cmd":"weld_plan", "action":"import", "plan":"D:/plans/spots.csv",
"columns":{"index":"SpotNo","name":"Name","x":"X","y":"Y","z":"Z"}, "maxItems":50}
| Attribute | Default | Meaning |
| action | check | check - compare the programs with the plan; import
- only read the plan and answer its points (without programs, without the WPS license check) |
| plan (or plans) | files of the window | file or array of files of the weld plan |
| importFormat | auto (value of the window) | auto | a33 | csv | wps |
| sheets | empty (value of the window) | array or comma separated text of sheet names
(wildcards) / numbers 1.. / ranges "5-8" |
| columns | empty (value of the window) | object {"index":"C","name":"D"} or text
"index=C; name=D" |
| firstRow | 0 | Excel: first data row (1..), 0 = the row after the found header |
| lastRow | 0 | Excel: last data row, 0 = to the end of the sheet |
| delimiter | empty | CSV: ";", ",", "tab"; empty =
found in the header line |
| open, files, projects, folders, masks, includeSystem, vendor, or scope + paths | –
(required for check) | the programs - the same sources as path_check /
axis_limits (VeRa / command API) |
| tolMm | value of the window (2) | [mm] tolerance of the position (0.1 .. 100) |
| carBase | value of the window (1) | BASE / UF number of the car coordinates, 0 = positions not compared (0 .. 32) |
| names | value of the window (true) | check the names in the comments |
| notWelded | value of the window (true) | report the plan points not welded |
| language | value of the window (en) | en | de - language of the
report and of the messages of the findings (other values: error) |
| maxItems | 500 | maximum number of findings / rows / plan points in the answer (1 .. 20000) |
| save | empty | file of the report |
| format | extension of save | pdf | html | csv | xlsx |
| dialog | false | true: open the window with these values and answer
{"ok":true,"dialog":true} |
| run | false | with dialog: start the check in the window at once |
check: the common findings format (summary {errors, warnings, infos},
findings with check = weldPlan, value = car type;number),
plan {files, points, withCoordinates, robots, carTypes, duplicates, notes}, programs,
welds, servicePointsSkipped, notWelded, robots,
tolMm, carBase, summaryText, language, robotStats
[{robot, welds, compared, withinTolerance, meanXyzMm, meanMm, spreadMm, maxMm, baseShift}], rows
[{robot, program, line, fileLine, point, index, carType, gun, weldProgram, name, status, frame, xyz, planName,
planRobot, planXyz, dXyzMm, dMm, file}] (rowsTruncated), planPoints [{index, carType,
name, robot, weldedIn [{robot, program, point, fileLine, status, dMm}], status}], notes,
saved / saveError. line = line in the editor (and of the findings),
fileLine = line in the program file. Row status: ok, deviation, notInPlan, noPosition, otherFrame,
noPlanPosition, ambiguous, noIndex. planPoints: every plan point (at most maxItems) with
the places where it is welded; status only when it is not welded: notWelded (the robot of the plan was
checked) or robotNotChecked.Answer of
import: files, points, withCoordinates,
robots, carTypes, duplicates [{key, points [{name, robot, sheet, row}]}],
list [{index, carType, name, robot, gun, box, program, xyz, thickness, sheet, row}]
(listTruncated), notes, errors.Errors: no WPS license, no plan file, no programs, no weld points read from the plan. Progress: lines
weld_plan ... in dres.log and progress of the API command
status.
Report through the command API - step by step
The weld plan check is a function of the editor itself, not a plugin: the commandweld_plan
reads the plan and the programs in the background (hidden documents, the open programs are not changed) and writes
the report - no window has to be opened and no plugin has to be started. Only the variant in the cell (weld point
report of the Robot Cell Simulator, see below) needs the plugin.
Requirements: the command API is switched on (installation with the component AI agent, Settings » Configure » AI Agent), the licenses API / CLI and WPS of the manufacturer (see License). The commands are sent with the client of the installation
<installation>\AIAgent\dres_api.ps1 (PowerShell).
- Start the editor (or use the running one) - the script waits until the editor is ready:
AIAgent\dres_api.ps1 -StartNewSession -SessionName "Weld plan"
- Check the plan - only read it (number of points, robots, car types, duplicate numbers):
AIAgent\dres_api.ps1 '{"cmd":"weld_plan","action":"import","plan":["D:/plans/A33_SK.xlsx","D:/plans/A33_VW.xlsx"],"maxItems":5}'Withoutpointsor withnotes: setimportFormat,sheetsorcolumns(see Formats). - Compare and write the report - the programs as robot archives (
folders: one archive or a folder with several archives) or as projects of the project tree (projects):AIAgent\dres_api.ps1 -TimeoutSec 600 '{"cmd":"weld_plan","plan":["D:/plans/A33_SK.xlsx","D:/plans/A33_VW.xlsx"], "folders":["D:/archives/station 010"],"tolMm":2,"carBase":1,"language":"de","maxItems":1, "save":"D:/reports/weld_plan_de.pdf"}'The format follows the extension ofsave(pdf, html, xlsx, csv);maxItemsonly limits the answer, not the report. - Read the answer:
summaryText,robotStats(base shifted or single points),summaryandfindings,saved= the written file (orsaveError).
foreach ($l in 'en','de') { foreach ($f in 'pdf','xlsx') {
AIAgent\dres_api.ps1 -TimeoutSec 600 ('{"cmd":"weld_plan","plan":["D:/plans/A33_SK.xlsx"],"folders":["D:/archives/station 010"],' +
'"language":"' + $l + '","maxItems":1,"save":"D:/reports/weld_plan_' + $l + '.' + $f + '"}') } }
Notes: every call checks the programs again; with about 80 programs the check takes 1 - 3 minutes and the
editor (window and API) is busy during this time - use -TimeoutSec 600. Progress: lines
weld_plan ... in dres.log. The robot of a program is the robot project of the project tree
or the folder of the archive (KUKA: the folder above KRC). Missing folders of the report file are
created. "dialog":true opens the window with the same values instead ("run":true - and
starts the check).
Variant in the cell: weld point report of the Robot Cell Simulator
The weld point report of the Robot Cell Simulator compares the weld points of the robots of the loaded cell and can show the plan points in the 3D view. It needs the plugin and the loaded cell:- open the Robot Cell Simulator:
AIAgent\dres_api.ps1 '{"cmd":"run_plugin","name":"Robot Cell Simulator","wait":120}'; - load the cell (session, package
.rcszor study) with the client of the simulatortemplate\RCS\AIAgent\rcs_api.ps1 '{"cmd":"open","file":"D:/cells/station.rcsz"}'and wait until{"cmd":"status"}answersloadingandpreparingfalse; - report with the weld plan as reference:
rcs_api.ps1 '{"cmd":"weld_report","plan":["D:/plans/A33_SK.xlsx"],"carBase":1,"show3d":true,"report":"D:/reports/rcs_weld.pdf","view":false}'.
License
The WPS license of the manufacturer of the program: VKRC WPS for KUKA (VKRC and KRC), VFanuc WPS for Fanuc, ABB WPS for ABB (Yaskawa: no WPS license, not supported). The menu entry needs the license of its manufacturer; programs of a robot type without its WPS license or without the license of the robot type are skipped with a note. The command API needs in addition the license API / CLI.See also: the WPS plugins VKRC WPS, Fanuc WPS and ABB WPS (assign the weld point parameters from the plan to the weld commands) and the weld point report of the Robot Cell Simulator (weld points of the programs in the cell compared with the study or with the weld plan, also in the 3D view).
Top