RoboCaty is a lightweight utility designed to facilitate cyclic, direct variable exchange between a Beckhoff TwinCAT PLC and an ABB Virtual Robot Controller (RobotStudio) via ADS.
It acts as a bridge during virtual commissioning, allowing for signal synchronization between the PLC and the Robot without the need for complex fieldbus hardware emulation.
This program was developed specifically for virtual commissioning projects. While it may work with other configurations, it has been tested and verified with the following dependencies:
- TwinCAT 3: Version 3.1.4024 or 3.1.4026 (recent builds)
- Framework: .NET 8.0
- ABB Robotics PC SDK: Version 2025.4
- ABB RobotStudio: Version 2025.4
- Controller: Omnicore C90XT virtual controller with RobotWare 7.20.0
The variables to be exchanged are defined in a simple text file. By default, the program looks for C:\temp\vars_robot.txt, but this can be changed via arguments.
Each line in the file represents one mapping:
[Direction]#[TwinCAT_Path]:[Robot_Signal][Size]
Example: r#MAIN.boStop:diStop[1]
| Parameter | Description |
|---|---|
| Direction |
r = Read from TwinCAT ADS w = Read from Robot Virtual Controller |
| # | Separator. |
| TwinCAT_Path | The full path to the ADS variable (e.g., MAIN.boStop or GVL.bStart). |
| : | Separator. |
| Robot_Signal | The exact name of the I/O signal on the ABB Virtual Controller. |
| [Size] | The size of the signal in bits.[1] = Boolean (Digital I/O)[8], [16], [32] = Integer (Group I/O or Analog) |
See the vars_robot.txt file in the root of this repository for a full template.
r#MAIN.bStartRobot:di_StartSignal[1]
w#MAIN.bRobotActive:do_RobotActive[1]
r#GVL.nSpeedSetpoint:grp_SpeedInput[16]
w#GVL.nCurrentPos:grp_PositionOutput[32]
Run RoboCaty.exe from the command line. You can customize the behavior using the arguments below.
| Argument | Description | Default Value |
|---|---|---|
-help |
Shows the help output and available commands. | N/A |
-verbose |
Enables a live dashboard showing the values of all exchanged variables in the console. | false |
-netid |
The AMS NetID of the TwinCAT runtime to connect to. | 199.4.42.250.1.1 (UMRT default) |
-file |
File path to the configuration file. | C:\temp\vars_robot.txt |
-time |
Cycle time (in milliseconds) for the data exchange loop. | 2000 |
RoboCaty.exe -netid 5.12.80.1.1.1 -file "config.txt" -time 100 -verboseBelow are some issues encountered during testing, along with possible solutions.
Q: RoboCaty does not appear to connect to the ABB virtual controller. When I press V, I see errors regarding opening handles.
A: This can happen if handles are not cleaned up correctly, especially if RoboCaty was closed via the command line window's "X" button. In this case, simply restart the virtual controller on the ABB side. This should free up all handles and allow you to reconnect.
Q: It seems that not all variables are exchanged in the same cycle. A: This is due to the asynchronous nature of RoboCaty. You must account for this behavior in your logic, on both the TwinCAT and the ABB RAPID program sides.
If you encounter any issues or want to contribute to this project, feel free to open an Issue or submit a Pull Request on this repository.
