Open-source VS Code extension for IRC5 + OmniCore RAPID development (RWS 1.0 + 2.0)

Hi all,

Repo / Marketplace: RAPID Live — ABB Robotics for VS Code - Visual Studio Marketplace
Source: GitHub - ichbinmeraj/abb-rws-vscode: VS Code extension to monitor and control ABB IRC5 robots — live status, joint positions, RAPID execution and module management via RWS · GitHub
npm package (the protocol layer, reusable on its own): npm i abb-rws-client

What it covers

  • Both protocols — RWS 1.0 (IRC5 / RW6.x, HTTP Digest, JSON) and RWS 2.0 (OmniCore / RW7.x, HTTPS Basic, XHTML;v=2.0).
    Auto-detects from the WWW-Authenticate challenge.
  • Live-tested on RobotWare 7.21 (OmniCore VC) and RobotWare 6.16 (IRC5 VC). 116 unit tests + 339 live
    protocol-coverage tests pass against both.
  • Real-time state via WebSocket subscriptions where supported, polling fallback otherwise (RWS 2.0 VCs reject the
    robapi2_subscription subprotocol — this is a known VC limitation).
  • ~90 commands covering: panel state, RAPID exec, modules, variables, motion, jog (where allowed), I/O signals, file
    system, event log, CFG database, mastership, RMMP, backup/restore, DIPC, IK + FK, service routine call, etc.

Editor-side features (this is where it stops being just a remote)

  • Hover docs for all documented RAPID instructions / functions / data types — 705 entries parsed from the Technical
    Reference Manual (3HAC050917-001 Rev F).
  • Inlay hints showing live controller values inline next to VAR / PERS / CONST declarations.
  • Program-pointer indicator in the editor gutter — moves as the controller executes.
  • Go to Definition / Find References / Document Outline across the workspace.
  • CodeLens “▶ Run this routine” above every PROC.
  • Push / Pull / Diff for .mod files — fits a normal git workflow.

Things I learned the hard way (and documented, in case anyone else hits them)

  • RWS 2.0 mastership domains collapse: rapid and cfg both → edit. The old name returns 404.
  • RWS 2.0 file service root is HOME, not $HOME.
  • RWS 2.0 symbol API is suffix-style: /rw/rapid/symbol/{symburl}/data, not prefix.
  • RWS 2.0 unloadModule is POST /rw/rapid/tasks/{task}/unloadmod, not DELETE.
  • RWS 2.0 setSpeedRatio keeps the legacy ?action=setspeedratio form with body speed-ratio=N. The bare endpoint
    returns 400.
  • RWS 2.0 setOperationMode wire format is lowercase: auto / man / manf (note: manf, not manfs like RWS 1.0).
  • AUTO ↔ MANF transitions go through MANR — direct AUTO ↔ MANF returns 500.
  • The /users/rmmp POST requires UAS grants the default user often doesn’t have. Admin works on most controllers.
  • IRC5 /ctrl/clock is GET-only on RW6.16 (POST/PUT return 405).
  • About 30 more quirks documented in the npm package’s protocol-findings notes.

What it can’t do (deliberately, per ABB safety design)

  • Bypass the FlexPendant op-mode-change confirmation popup.
  • Bypass the RMMP grant prompt.
  • Modify UAS user grants from RWS (/users/grant-status is read-only).
  • Override the FlexPendant key switch on real hardware.
  • Jog in AUTO mode (ISO 10218 violation).

These are protocol-level walls, not extension limitations — verified by probing.

What’s next

  • WebSocket-based real-time state on RWS 2.0 (currently 1 s polling on VC).
  • Step debugging UI (Step Into / Over / Out + breakpoint sync).
  • Hot-edit / ModPos.

It’s open source. If you find protocol behavior I got wrong, or a quirk I didn’t document, please open an issue or PR
— this is meant to grow with the community.

-– Meraj Safari

2 Likes