Fanuc SDK documentation
Get started with Python
Fanuc Python SDK provides a simple and efficient way to control Fanuc robots using Python. No additional installations are required on the robot controller.
🚀 TL;DR
- ✔️ No PCDK needed: Connect without Fanuc’s Robot Interface
- 📖 Read/write system variables
- 🔄 Register access for numbers, strings, and positions
- 🎬 Program control (run, pause, abort, etc.)
- 🔔 Alarm viewing and reset
- ⚡ I/O control (UI, UO, GI, GO, etc.)
- 🔍 State & diagnostics monitoring
- 📂 FTP file & variable access
No additional robot options or installations are required.
📌 Features
🖥️ 1. Telnet KCL Remote Control
Remotely send commands to the robot controller via Telnet KCL.
robot.telnet.reset()robot.telnet.run("MyProgram")robot.telnet.pause("MyProgram")robot.telnet.hold("MyProgram")robot.telnet.continue_("MyProgram")robot.telnet.abort("MyProgram", force=True)robot.telnet.set_variable("my_variable", 42)robot.telnet.set_variable("$RMT_MASTER", 1)robot.telnet.set_port("DOUT", 2, 0)robot.telnet.simulate("DIN", 3, 1)robot.telnet.unsimulate("DIN", 3)
🚀 2. High-Speed Data via SNPX (RobotIF)
SNPX provides fast, structured data exchange with the robot.
# Read/write position registersposition = robot.snpx.position_registers.read(1)robot.snpx.position_registers.write(2, {"x": 100, "y": 50, "z": 25})# Read/write numeric registersvalue = robot.snpx.registers.read(1)robot.snpx.registers.write(2, 123.45)# Digital signalsui_1 = robot.snpx.ui.read(1)robot.snpx.uo.write(3, True)# Alarms & statusrobot.snpx.clear_alarms()position = robot.snpx.current_position.read_world_position()user_frame = robot.snpx.current_position.read_user_frame_position(1)
📂 3. FTP File and Variable Management
Transfer files and manage internal robot data via FTP.
# File transferrobot.ftp.direct_file_handling.upload_file_to_controller("C:/Programs/MyPrg.tp", "md:/MyPrg.tp")robot.ftp.direct_file_handling.download_file_from_controller("md:/Backup.va", "C:/Backup/Backup.va")robot.ftp.direct_file_handling.delete_file("md:/OldProgram.tp")# Variablesvariables = robot.ftp.get_all_variables()for var in variables:print(f"{var.name} = {var.value}")# System variablesremote_mode = robot.ftp.known_variable_files.get_system_file().rmt_master# Safety statussafety = robot.ftp.get_safety_status()print(f"E-Stop: {safety.external_estop}, TP Enabled: {safety.tp_enable}")# Positionposition = robot.ftp.get_current_position()print(f"X={position.cartesian.x}, Y={position.cartesian.y}, Z={position.cartesian.z}")
🔧 Robot Configuration
✅ Enable Telnet KCL
- Go to
SETUP > Host Comm - Select
TELNET→[DETAIL] - Set a password and reboot
✅ Enable FTP
- Go to
SETUP > Host Comm > FTP - Set username/password
- Perform a cold start
✅ Enable SNPX
- For FANUC America (R650 FRA): Enable option R553 “HMI Device SNPX”
- For FANUC Ltd. (R651 FRL): No additional options required
🛠 Installation
1️⃣ Clone or Download
This SDK is not on PyPI (yet). Clone this repository and install dependencies :
git clone https://github.com/underautomation/Fanuc.py.gitcd Fanuc.pypip install -e .
2️⃣ Connect to Your Robot
from underautomation.fanuc.fanuc_robot import FanucRobotfrom underautomation.fanuc.connection_parameters import ConnectionParametersrobot = FanucRobot()robot.connect(ConnectionParameters("192.168.0.1"))
🔍 Compatibility
✅ Robot Controllers: R-J3iB, R-30iA, R-30iB
✅ OS: Windows, Linux, macOS
✅ Python: 3.5+
📢 Contributing
We welcome your feedback and contributions!
- Report issues via GitHub Issues
- Submit pull requests with enhancements
- Suggest features and improvements