Robot Safety View
Robot Safety View shows one robot: the workspace taken from its programs (the TCP of all taught points and linear paths), the safety zones read from the backup of the robot, and a test whether a point or a path enters a forbidden zone or leaves an allowed one, and how close it comes to the border.

The result is a warning, not a safety certification. The test uses the TCP of the taught points and the straight lines of linear motions (with an optional tool radius). The robot arm, the tool geometry, braking distances, zones that are switched by a signal and the real cell are not evaluated. The result does not replace the validation and the acceptance protocol of the safety configuration. The safety files of the controller are only read, never written.

Where: menu Plugins » Robot Safety View; command API: plugin_cmd with the commands safety_open, safety_calculate, safety_status, safety_zones, safety_findings, safety_report, safety_image (see VeRa / command API).

Examples

All examples show a robot named R1 and zones named "Zone n".


ABB SafeMove, top view: three forbidden zones (red, each with its occupancy supervision, labels 1/2, 3/4 and 5/6), the allowed work cell (green, label 31), the outline of the workspace of the programs (blue dashed) with the TCP points, and the points closer than 1000 mm to a border (orange; Near border = 1000 mm). 0 violations. The zone table shows the activation (input signal or permanent), the stop reaction and the minimum margin of each zone.


The same robot in the side view (X-Z): the zones with their Z limits, the box around the TCP points and the dotted line Z = 0.


Fanuc DCS: the zones of the Cartesian Position Check (an allowed polygon, two forbidden boxes switched by a disabling input - dashed). This robot has an extended axis (J7), so the program does not guess its position in WORLD: the message in the panel says that the workspace and the test are not evaluated; the zones are still shown.

Example report: HTML and PDF - summary, zone table, findings and the images with the legend.

Reading the view

The images of this section come from two demo archives (a KUKA iiQKA robot with demo workspaces and a KUKA VKRC robot with circular motions). The demo zones were written into a copy of the archive to show every kind of marker; they are not the zones of a real cell.

The result is a warning, not a safety certification. A finding means "look at this point in the program"; no finding does not mean that the cell is safe (the arm, the tool geometry, braking distances and the real cell are not evaluated).


The window: on the left the drawing (tabs Top view (X-Y) and Side view (X-Z)) with the legend below it, on the right the panel Robot and zones with the file, the test settings, the summary, the zone table and the findings table. Demo: KUKA iiQKA, workspaces $WORKSPACE[1..8] of $custom.dat and one axis workspace $AXWORKSPACE[8]; Near border = 50 mm, Tool radius = 0 mm; zone 206 is excluded from the report.


The same top view as an exported image (Export image... / API safety_image), with the legend (the lower part of the large grey zone 201 is cut off here). What it shows:
A robot with circular motions (KUKA VKRC, top view): the blue squares are the TCP points, the thin solid blue curves are circular motions (from the previous point through the auxiliary point to the target point), the blue dashed polygon is the outline of the workspace. The SafeOperation of this robot is switched off - its zone is listed as disabled and not drawn, so there is no finding.


Detail of the exported top view: two circular motions drawn as arcs between their start and target points.


The same robot in the side view (X-Z): the box around the TCP points (blue dashed), the arcs, the origin of WORLD with the letters X and Z and the dotted line Z = 0.

Markers of the drawing
MarkerMeaning
light red area with a red outline (2 px)forbidden zone with a stop reaction: the TCP must not enter it. A violation is a point or a path inside it.
green outline (2 px), no fillallowed zone with a stop reaction: the robot must stay inside. A violation is a point or a path outside it.
dashed outline (red or green)zone switched by a signal (SafeOperation: activation by an input; Fanuc: disabling input; ABB: activation signal). It is tested as if it were active; the findings get the note "zone switched by a signal". Example: the Fanuc image in Examples above.
grey outline (1 px), no fillinformation only: no stop reaction (KUKA MODE without STOP, ABB NoStop, occupancy signals). Drawn, not tested, no findings.
dotted outline (red, green or grey)KUKA $WORKSPACE[n]: a monitoring workspace of the controller, not a safety zone. The colour follows the MODE (INSIDE_STOP = red, OUTSIDE_STOP = green, without STOP = grey).
not drawnKUKA $AXWORKSPACE[n] (axis ranges, no X-Y-Z shape), zones switched off in the controller (e.g. #OFF, SafeOperation switched off), zones with an error (e.g. tilted frame), zones without the check mark Report. They are listed in the zone table.
blue dashed outlineworkspace of the programs: top view - the convex hull of all TCP points and arc points; side view - the box around them (X and Z).
small blue squaresTCP points of the programs (target points in WORLD), only with Show the TCP points.
linear motionsnot drawn as lines - their straight lines are tested (finding of the kind segment), the drawing shows their end points.
thin solid blue curvecircular motion (e.g. KUKA CIRC, Yaskawa MOVC) drawn as an arc from the previous point through the auxiliary point to the target point; tested along the arc (kind arc). Only with Show the TCP points.
large red dot (120 mm)violation: at the TCP point (kind point) or at the deepest point of the straight line or of the arc (kinds segment, arc).
large orange dot (120 mm)near the border: on the allowed side, but the margin (with the tool radius) is smaller than Near border. The dots are drawn in the order of the findings table (worst first), so an orange dot can cover a red one at the same place.
cross with X and Y (top view) or X and Z (side view)origin of WORLD (the lines go from -300 to +600 mm).
dotted brown line (side view)Z = 0 (floor).
label 202 $WORKSPACE[2]...zone number and a short name (cut to 14 characters); zones with the same shape share one label (numbers joined with /). The full names are in the tooltip of the label and in the zone table. Labels keep their size when zooming and are moved when they would cover each other.


The panel Robot and zones of the demo (widened): the zone table with zone 206 excluded from the report (grey row) and the findings table with the kinds point, axisWorkspace and segment.

Zone table
ColumnMeaning
Reportcheck mark: the zone is evaluated, drawn and written to the report. Without the mark the row is grey and the zone is not evaluated (status "not in the report (not evaluated)"). Buttons All / None; API report_zones / report_exclude; remembered per archive.
No.number of the zone: the number of the controller (Fanuc, ABB, SafeOperation spaces), 100 = cell area of SafeOperation, 200 + n = KUKA $WORKSPACE[n], 300 + n = KUKA $AXWORKSPACE[n].
Namename from the safety configuration; KUKA: $WORKSPACE[n] <MODE>, $AXWORKSPACE[n] <MODE> (name).
Typeallowed or forbidden and the shape (box, polygon, axis ranges); for KUKA workspaces "controller workspace, not a safety zone".
Z [mm]lower and upper Z limit (- for axis ranges).
Framecoordinate system of the zone (WORLD, user frame ...); for $AXWORKSPACE the monitored axes and their ranges in degrees.
Activationpermanent, by a signal (dashed in the drawing) or the KUKA MODE.
Stopreaction of the controller (robot stops / no stop: output only).
Statusresult per zone: minimum margin, number of violations and of points near the border, or why the zone is not tested (information only, disabled in the controller, not in the report, error).

Findings table (worst first, double click opens the program at the line)
ColumnMeaning
Levelviolation (margin below 0) or near (margin from 0 to the value of Near border, for $AXWORKSPACE Near border (axes)).
Zonenumber and name of the zone.
Kindpoint - the TCP of a taught point; segment - the straight line of a linear motion from the previous point goes deeper into the zone than both of its end points (the points themselves have their own findings); arc - a circular motion, checked along the arc, goes deeper than its end points; axisWorkspace - the axis values of a point against a KUKA $AXWORKSPACE (no position in the drawing).
Margindistance to the border on the allowed side: in mm (the tool radius is subtracted), for axisWorkspace in deg. Negative = how deep the TCP or the path is on the wrong side.
Program, Point, Linethe program, the name of the target point of the motion and the line of the motion in the program.
PositionX Y Z in WORLD of the finding (for segment / arc the deepest point of the path); for axisWorkspace the axis values against their ranges, e.g. A1 -15.0 outside 80.0 .. 125.0.
Notee.g. "zone switched by a signal", "axis workspace: margin in degrees (tool radius not used)".

Where the data come from (per robot)

RobotPrograms (workspace)Safety zones
Fanuctext programs *.LS of the backup (the binary *.TP files are not read); TCP in WORLD from the point data, UT / UF and the kinematics of the robotDCSVRFY.DG
ABBRAPID modules *.mod / *.sys (robtargets declared in the module or written in the instruction), tool and work object from the instructionBACKINFO\sc_cfg.xml
KUKA VKRC / KRCFolgen, UPs and Makros *.src with the points of the .dat file (TCP in WORLD, robot standing in WORLD only - see How Robot Safety View computes)SCTLPARA.SAF (cell area and 16 monitored spaces) and the workspaces $WORKSPACE[n] of KRC\STEU\Mada\$custom.dat and the axis workspaces $AXWORKSPACE[n] of KRC\R1\Mada\$machine.dat (KUKA KRC only; both not shown for VKRC for now)
KUKA iiQKAKRL programs *.src / *.dat of the backup (as KUKA KRC)active_safety_configuration.yml, the workspaces $WORKSPACE[n] of KRC\STEU\Mada\$custom.dat and the axis workspaces $AXWORKSPACE[n] of KRC\R1\Mada\$machine.dat
YaskawaINFORM jobs *.JBIFSU blocks //RBRNGLMT ... (detected, not interpreted)

License

The basic license of the robot the report is about: VKRC_HASP (KUKA VKRC), KRC_HASP (KUKA KRC), VFANUC_HASP (Fanuc), ABB_HASP (ABB) or YASKAWA_HASP (Yaskawa). The programs of a robot without its basic license are not analyzed. The window opens without any license; the license is checked when you press Recalculate or Read zones and it must be the one of the analyzed robot (an ABB archive needs the basic ABB license, a VKRC archive the basic VKRC license, and so on), not any of them. A KUKA iiQKA archive (with the safety configuration active_safety_configuration.yml or KRL programs of an iiQKA backup) needs the license iiQKA instead of KRC_HASP. No additional license is needed.

How Robot Safety View computes

Robot Safety View compares points of the robot programs with the zones of the safety configuration. It is a plausibility check of the programs against the zones read from the archive - a warning, not a safety certification.

1. Points: the TCP of every motion point in WORLD

2. Zone geometry and margin

3. Paths between the points

4. KUKA axis workspaces $AXWORKSPACE: the axes of the points

5. Zones that are not evaluated

6. Not evaluated at all

The result is a warning, not a safety certification: the safety configuration must be validated on the robot.

Fanuc (Dual Check Safety)

ABB (SafeMove)

Yaskawa (Functional Safety Unit)

KUKA (SafeOperation)

KUKA workspaces $WORKSPACE[n] (KUKA KSS and KUKA iiQKA)

KUKA axis workspaces $AXWORKSPACE[n] (KUKA KSS and KUKA iiQKA)

KUKA iiQKA (safety configuration)

KUKA KRC and iiQKA programs

The points of KUKA KRC and KUKA iiQKA programs are evaluated like the VKRC points: the TCP of the tool of the point in WORLD, for a robot standing in WORLD only ($ROBROOT = 0, no linear unit) - see How Robot Safety View computes.

Legend of the drawing

The same legend is shown under the view in the window and under the images of the report. Examples of every marker and the columns of the tables: Reading the view.
DrawingMeaning
red area with a red outlineforbidden zone: the TCP must not enter it
green outline, no fillallowed zone: the robot must stay inside
dashed outline (red or green)zone that is activated (Fanuc: disabled) by a signal - tested as active
grey outlineinformation only: a supervision without a stop reaction (ABB NoStop, occupancy signals), or a zone shape without a supervision
dotted outlineKUKA $WORKSPACE[n]: monitoring workspace of the controller, not a safety zone
blue dashed outlineworkspace of the programs: the outline of all TCP points in the top view, the box around them in the side view
blue dotsTCP points of the programs (target points in WORLD)
cross with the letters X and Y (top view) or X and Z (side view)origin of the WORLD coordinate system
dotted horizontal line (side view)Z = 0 (floor)
label 1/2 namezone number and a short name; zones with the same shape share one label (e.g. a zone and its occupancy supervision); a label is moved when it would cover another one; the full names are in the tooltip of the label and in the zone table
red dotviolation (the TCP or a linear path is in a forbidden zone or outside an allowed one)
orange dotnear the border (closer than the value of Near border on the allowed side)
The KUKA axis workspaces $AXWORKSPACE[n] have no position in X, Y, Z: they and their findings are not drawn, only listed in the tables. Zones without the check mark Report are not drawn. In the report tables the rows of violations are red and of points near the border orange.

Window

Command API: parameters of the axis workspaces and of the report zones

These parameters are new (the other parameters are described above, at the fields of the window):
ParameterCommandsMeaningDefault
near_degsafety_open, safety_calculate, safety_report field Near border (axes) in degrees (number, 0..90): warning near the border of the KUKA axis workspaces $AXWORKSPACE. Not a number = error near_deg: number expected.the value of the field (first 2 deg)
report_zonessafety_open, safety_calculate, safety_report only these zones in the report (column Report): an array of zone numbers (id of safety_zones, e.g. 308) or names (as in the zone table), or a single number / name; all other zones are left outmissing = the remembered choice of the archive (first: all zones)
report_excludesafety_open, safety_calculate, safety_report these zones left out of the evaluation and of the report (ids or names as for report_zones); together with report_zones both apply. [] = no zone left out.missing = the remembered choice of the archive
Example: {"cmd": "plugin_cmd", "plugin": "Robot Safety View", "command": "safety_calculate", "archive": "...zip", "near_deg": 3, "report_exclude": [208, 308]}.

Command API: JSON of the results

The answers of safety_open, safety_calculate, safety_status and the JSON report contain these fields (in addition to the existing ones); the zone fields are also in the answer of safety_zones:
FieldWhereMeaningDefault
iiqkaresulttrue = KUKA iiQKA (safety configuration yml found in the archive)false
workspacesresultKUKA: number of the defined $WORKSPACE[n] (also #OFF)0
workspaceFileresultKUKA: path of the $custom.dat with the workspacesmissing (no file)
kindeach zoneworkspace = KUKA $WORKSPACE (monitoring of the controller, not a safety zone), safety = safety zonesafety
modeeach zone with kind = workspaceMODE of the workspace, e.g. #INSIDE_STOP, #OUTSIDE, #OFFmissing for safety zones
near_degresultvalue of Near border (axes) [deg]2
axisWorkspacesresultKUKA: number of the defined $AXWORKSPACE[n] (also #OFF)0
axisWorkspaceFileresultKUKA: path of the $machine.dat with the axis workspacesmissing (no file)
pointsWithAxes, pointsWithoutAxesresultKUKA: points with / without axis values for $AXWORKSPACEmissing (no axis workspace tested)
report_zones, report_excluderesultnumbers of the zones in the report / left out (column Report)all zones / []
reporteach zonetrue = zone evaluated and in the report. The answers of the commands list all zones; the JSON file of the report only the zones of the report.true
kind = axisWorkspaceeach zoneKUKA $AXWORKSPACE (axis monitoring of the controller, not a safety zone), number 300 + n; with mode, axes (monitored axes: {"A1": [N, P], ...}), unit = deg, axName (name $AXWORKSPACE_NAMEn), minMargin_deg (instead of minMargin_mm) and pointsNotEvaluated; polygon is empty-
margin, uniteach findingmargin on the allowed side and its unit (mm or deg); in addition margin_mm with x, y, z, or for kind = axisWorkspace margin_deg and axes (text, e.g. A1 81.0 in 80.0 .. 125.0)mm
kindeach findingpoint (target point), segment (linear motion), arc (circular motion along the arc), axisWorkspace (KUKA $AXWORKSPACE)-
arcsresultcircular motions: {"evaluated": n, "asSegment": n, "notEvaluated": n} = checked along the arc / checked as a straight segment (points on one line or coincident) / target point only (auxiliary or start point not available)all 0
otherMotionsresultmotions of another kind (spline, not modelled motion such as Fanuc A): target point only0
archive / safetyFile may also be a KUKA iiQKA backup zip or active_safety_configuration.yml; the new parameters are in the table above.

Limits