FANUC ROBOGUIDE vs Real Robot: Why the Sim Runs Clean and the Cell Does Not

Error code: ROBOGUIDE offline / online mismatch  Â·  Category: Programming  Â·  Controllers: M-10iD, R-2000iA, R-30iB, R-30iB Plus

The ROBOGUIDE simulation runs the full cycle without a hiccup. You FTP the programs to the real robot, jog to the first taught position, and the wrist is 35 mm and 8 degrees off where it should be. Or the program loads but the controller throws PROG-040 the second it starts. ROBOGUIDE is a good tool, but only when the virtual cell is a faithful mirror of the real one. At Probot Systems we use it daily for palletizer offline programming, and almost every issue we troubleshoot in customer cells traces back to a single mismatch between sim and shop.

This post is written for technicians and integrators using ROBOGUIDE to program FANUC robots offline (R-30iB, R-30iB Plus, with M-10iD, R-2000iA, or similar arms in the cell). The same rules apply if you are simulating on a virtual controller and deploying to a CRX, the CRX-specific quirks are noted at the end.

What this error actually means

There is no single FANUC alarm that says “your ROBOGUIDE cell does not match the real one”. What you get instead is a chain of downstream symptoms: position offsets when programs load, PROG-040 when a backup imports with conflicting motion groups, SYST-212 Need to apply to DCS param when DCS parameters in the backup do not match the live controller, and visual confusion in the sim when the mount orientation differs from reality.

Per the FANUC error code manual on PROG-040: “Motion control for the specified group was already reserved by another program. Remedy: Check the other running programs to determine who has motion control.” When this fires immediately after a ROBOGUIDE deploy, the imported program is referencing a motion group configuration that does not match the real cell.

In plain shop floor terms: ROBOGUIDE simulates the robot mechanics accurately, but the simulation is only valid if the virtual controller has the same software version, the same option file, the same UFRAME/UTOOL definitions, and the same mount orientation as the real robot. Miss any of those four and the sim is showing you a different robot than the one on your floor.

Most common causes, in order of probability

  1. Order file not synced. The virtual controller in ROBOGUIDE was created from a template, the real controller has a specific order file with its option mix. Programs that work in sim reference options the real robot does not have. The Reddit “new install” thread on FANUC ASI techs using ROBOGUIDE flags this as the first thing to check (reference).
  2. UFRAME or UTOOL mismatch. The cell layout in ROBOGUIDE has a UFRAME 1 defined, the real robot has a different UFRAME 1 or none at all. Programs reference UFRAME 1 in their motion headers, and the resulting positions land in the wrong place.
  3. Mount orientation different ($WORLD_FRAME). The virtual robot is floor-mounted, the real robot is wall-mounted or inverted. Cartesian moves rotate by gravity reference and you get wrist orientation drift.
  4. Backup loaded from a different model. The user copied the SYSVARS.SV from a similar but not identical robot, and the kinematics extension is missing on the new robot. ROBOGUIDE may show the sim correctly while the real controller posts SYST-212 or SYST-218.
  5. Trusting the Virtual TP for cycle-time validation. ROBOGUIDE’s Virtual TP is good enough for logic debugging, not for production speed validation. The “PALLETTOOL HATRED” Reddit thread is brutally honest about RoboGuide as a pure simulation timing tool (reference).

How to diagnose in under 10 minutes

Step 1. Pull the order file from the real robot. MENU > STATUS > Version ID > F1 [ORDER FILE], then F4 BACKUP to USB. That gives you a .dat file with the exact option set.

Step 2. In ROBOGUIDE, open the virtual controller properties for the cell. Compare the software version (V9.40, V9.50, etc.) and the loaded options against the order file. They should match major.minor and option count.

Step 3. Compare UFRAME and UTOOL. On the real robot, MENU > SETUP > Frames lists every defined frame with its X, Y, Z, W, P, R values. In ROBOGUIDE, open the cell’s frame properties. Frame 1 must equal Frame 1 on the real robot, value by value.

Step 4. Check the mounting orientation. On the real robot, look at $WORLD_FRAME under SYSVARS or under MENU > SETUP > General. The mounting angle determines how gravity is applied. ROBOGUIDE must have the same mount applied to the virtual robot.

Step 5. If you are getting RGCUserFrame errors when opening the cell, that is a ROBOGUIDE-side import issue, not a real robot issue. A DIY Robotics community thread documents exactly this case where SynchronizeWithController fails when frames are not consistent (reference).

How to fix it

For an order file mismatch:

Export the order file from the real robot, import it into ROBOGUIDE when you create the virtual controller. Do not start from a template if you have a real cell to mirror. ROBOGUIDE’s “Create Workcell from Backup” workflow takes a full controller backup (.IMG file) and reproduces the option set, system variables, and even the saved frames automatically.

For UFRAME / UTOOL mismatch:

Manually enter each frame value on both sides until they match, or export USERFRAME.VR / USERTOOL.VR from the real robot and import into the ROBOGUIDE cell. The matching-points workflow described in the DIY Robotics calibration thread is the systematic way (reference).

For a wall- or ceiling-mounted robot:

In ROBOGUIDE: select the robot in the cell tree, open Properties, navigate to General > Mount Orientation, and set the mount that matches your installation. On the real robot: confirm $WORLD_FRAME and the mounting angle in the configuration. The sim and the real robot will then agree on Cartesian moves.

For a backup loaded from a different model:

Do not deploy that backup. Use the source robot’s backup only on an identical model. If you genuinely need to migrate logic from one robot to another, copy the .TP files individually after verifying frames, payloads, and motion groups on the destination. The mass-restore workflow is a trap.

For a ROBOGUIDE installation that throws exception codes on launch:

This is a Windows + .NET + RoboGuide install issue, not a cell issue. The DIY Robotics community thread on Roboguide V9 Rev N exception codes documents the version-specific repair paths (reference). A second similar thread covers installation exception codes more broadly (reference).

For production validation:

Even with a perfectly mirrored cell, always run the first cycle on the real robot at 10 to 25 percent override. The Virtual TP timing is approximate. Acceleration and deceleration profiles, joint speed limits at high overrides, and singularity behaviour all need to be verified on the real arm.

For CRX specifically:

ROBOGUIDE supports the CRX, but the tablet block-programming interface is not what you simulate. You write TP code in ROBOGUIDE and the CRX accepts it via the legacy pendant view. A Reddit user noted they program in legacy pendant in ROBOGUIDE and swap to tablet on the real robot (reference).

When to call a specialist

Two situations are worth a service call:

You are deploying a full cell offline (palletizer, multi-station pick and place, vision-guided) and need ROBOGUIDE to match the real cell to within the position tolerance the customer expects. Calibration between sim and real takes a methodical workflow with documented frame transfers, mastering verification, and on-robot test cycles at increasing override.

You see SYST-212 or SYST-218 after a ROBOGUIDE-driven backup deploy on a CRX or DCS-equipped robot. The DCS parameters in the backup do not match the live safety CPU, and you need to know whether to APPLY (the change is intentional) or roll back (the backup is wrong for this robot).

contact us for offline programming, or schedule a maintenance preventive visit so the ROBOGUIDE cell stays synchronized with the real robot across firmware upgrades.

Related errors to check

  • PROG-040 Already locked by other task: imported program references a motion group that conflicts with the real robot’s configuration.
  • SYST-212 Need to apply to DCS param: backup-driven mastering or parameter change that DCS sees as unapplied. Common after a ROBOGUIDE backup deploy on a DCS robot.
  • SYST-218 DCS Unavailable robot model: backup came from a different model. Stop, do not press APPLY.
  • INTP-105 Run request failed: cause code in the next line tells you what the real issue is. Often points back to a frame or option mismatch.

Probot Systems is a FANUC integrator based in Lévis, Quebec serving Canada and the US. We use ROBOGUIDE daily for palletizer programming and customer cell upgrades, and the workflow above is the one we run on every new cell. If your sim and your real robot disagree, that is a contact us conversation worth having before the first production batch.

Demander un devis

Remplissez le formulaire ci-dessous et nous vous contacterons dans les plus brefs délais.

Coordonnées
Votre projet
Afin de vous fournir le contenu demandé, nous devons stocker et traiter vos données personnelles. Si vous consentez à ce que nous stockions vos données personnelles à cette fin, veuillez cocher la case ci-dessous.

Subscribe to our newsletter!

Receive our latest news, events and blog posts.

Get a Quote

Fill out the form below, and we will be in touch shortly.

Contact Information
Your project
In order to provide you the content requested, we need to store and process your personal data. If you consent to us storing your personal data for this purpose, please tick the checkbox below.