Transfer simulation to physical cell
Use this guide to move a validated simulation setup into a physical robot cell. It covers project timing, infrastructure choices, Python changes, PROFINET specifics, and the key API endpoints.
Understand when transfer starts
Most projects follow this order:
- Start with customer data such as CAD or Process Simulate exports.
- Create the construction blueprint for hardware ordering and first cell build.
- Validate reachability, collisions, and cycle assumptions in simulation.
- Continue simulation work while hardware is ordered and delivered.
Transfer to the physical cell as soon as controller and network access are available. - Repeat and adjust both simulation and physical commissioning as necessary.
Prepare transfer artifacts
Prepare these artifacts before commissioning:
- Construction blueprint with robot, tool, and station placement.
- Simulation scene and robot/tool definitions used during validation.
- Cell configuration export (controllers, apps, and environment variables).
- Program defaults for safe first execution (home move + reduced speed).
For setup import/export basics, see Import and export configurations.
Choose your NOVA topology
Project setup for virtual cells is usually one of these:
- Cloud instance
- VM-based on-prem instance
- Bare-metal on-prem instance
The topology mostly affects runtime configuration in your Python app and .env values.
When moving to the IPC in the real cell:
- Update the NOVA API host to the IPC address.
- Update authentication (for cloud, refresh token when needed).
- Ensure your laptop can reach the IPC network used in the cell.
Switch virtual vs physical in Python
Avoid editing business logic every time you switch environments. Use SDK-native environment configuration and switch only the values.
Set environment values per target:
NOVA_API: virtual instance or physical IPC URLNOVA_ACCESS_TOKEN: token if required by your deploymentCELL_NAME: target cell n
See a complete example of a starting Python script here .
Nova() automatically uses the SDK environment configuration (NOVA_API, NOVA_ACCESS_TOKEN, CELL_NAME) through NovaConfig.
Use ensure_controller(...) to make switching idempotent across virtual and physical setups.
Build the physical cell from simulation
- Build and wire the hardware cell according to the construction blueprint.
Only commission robots in the secure mode required by the robot manufacturer. Refer to the robot manufacturer’s original documentation. - Add or update the physical controller in the target NOVA instance.
- Align program start conditions:
- Jog robot to the intended home position.
- Save that home position on the physical setup.
- Ensure your program starts with a move-to-home.
- Reduce test speed for first runs, then ramp up in controlled steps.
Handle PROFINET correctly
Treat virtual and physical PROFINET as different deployment targets:
- Virtual service uses
bus_type: "profinet_virtual". - Physical service uses
bus_type: "profinet"and requires at least PLC IP + NIC MAC. - Physical PROFINET depends on cell-specific network details (for example MAC/interface and PLC wiring), so blindly cloning virtual settings is not sufficient.
- Optional: You can configure the PROFINET module’s byte size (slots).
If you configured any other byte size than 64 bytes, you need to download a new GSDML file using
GET PROFINET GSDML fileand upload it to TIA Portal.
Example physical PROFINET service payload as can be added here .
{
"bus_type": "profinet",
"network_config": {
"device_name": "pnDevice",
"ip_config": {
"ip": "192.168.1.100",
"netmask": "255.255.255.0",
"gateway": "192.168.1.100"
},
},
"plc_ip": "192.168.1.10",
"mac": "00:11:22:33:44:55"
}API workflow for virtual → physical transfer
Base path: /api/v2
Read and adjust cell configuration
- Read current configuration with
GET /api/v2/cells/{cell}. - Adapt controller section from virtual to physical values.
- Update full configuration with
PUT /api/v2/cells/{cell}. - If creating a new cell, deploy with
POST /api/v2/cells.
Add or update controller directly
- Add controller:
POST /api/v2/cells/{cell}/controllers - Read controller:
GET /api/v2/cells/{cell}/controllers/{controller} - Update controller:
PUT /api/v2/cells/{cell}/controllers/{controller}
Use this when you only need to swap or reconfigure one controller.
Configure PROFINET I/O mapping
- List I/O mapping:
GET /api/v2/cells/{cell}/bus-ios/profinet/ios - Upsert one I/O signal:
PUT /api/v2/cells/{cell}/bus-ios/profinet/ios/{io} - Remove one I/O signal:
DELETE /api/v2/cells/{cell}/bus-ios/profinet/ios/{io} - Remove all mappings:
DELETE /api/v2/cells/{cell}/bus-ios/profinet/ios - Import mapping file:
PUT /api/v2/cells/{cell}/bus-ios/profinet/iofile - Export mapping file:
GET /api/v2/cells/{cell}/bus-ios/profinet/iofile
Optional diagnostics:
- PROFINET description:
GET /api/v2/cells/{cell}/bus-ios/profinet/description - Raw process image bytes:
GET /api/v2/cells/{cell}/bus-ios/profinet/raw - BUS I/O service state:
GET /api/v2/cells/{cell}/bus-ios/state
Validate runtime resources
For internal checks during commissioning:
- List configured controllers:
GET /api/v2/api/v2/cells/{cell}/controllers - List motion groups:
GET /api/v2/cells/{cell}/controllers/{controller}/description - Check motion group state:
GET /api/v2/cells/{cell}/controllers/{controller}/state
Manual migration strategy
You can also manually migrate virtual to physical, but please note that this approach is more error-prone and can lead to misconfigurations if not done carefully.
- Export a virtual cell configuration as baseline.
- Replace only physical-specific fields before import:
- Controller IP/port and manufacturer-specific controller settings
- PROFINET service mode (
profinet_virtual→profinet) and network fields
- Import/update in the target physical instance.
- Re-validate controller connectivity, PROFINET state, home pose, and low-speed motion.
This keeps simulation and physical deployments aligned while minimizing manual rework.