The Fanuc SDK for Python enables seamless integration with Fanuc robots for automation, data exchange, and remote control.
It supports communication with real robots and ROBOGUIDE.
🔗 More Information: https://underautomation.com/fanuc
🔗 Also available in 🟦 .NET & 🟨 LabVIEW
⭐ Star this repo if it's useful to you!
👁️ Watch for updates
- ✔️ 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.
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)
SNPX provides fast, structured data exchange with the robot.
# Read/write position registers
position = robot.snpx.position_registers.read(1)
robot.snpx.position_registers.write(2, {"x": 100, "y": 50, "z": 25})
# Read/write numeric registers
value = robot.snpx.registers.read(1)
robot.snpx.registers.write(2, 123.45)
# Digital signals
ui_1 = robot.snpx.ui.read(1)
robot.snpx.uo.write(3, True)
# Alarms & status
robot.snpx.clear_alarms()
position = robot.snpx.current_position.read_world_position()
user_frame = robot.snpx.current_position.read_user_frame_position(1)
Transfer files and manage internal robot data via FTP.
# File transfer
robot.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")
# Variables
variables = robot.ftp.get_all_variables()
for var in variables:
print(f"{var.name} = {var.value}")
# System variables
remote_mode = robot.ftp.known_variable_files.get_system_file().rmt_master
# Safety status
safety = robot.ftp.get_safety_status()
print(f"E-Stop: {safety.external_estop}, TP Enabled: {safety.tp_enable}")
# Position
position = robot.ftp.get_current_position()
print(f"X={position.cartesian.x}, Y={position.cartesian.y}, Z={position.cartesian.z}")
- Go to
SETUP > Host Comm
- Select
TELNET
→[DETAIL]
- Set a password and reboot
- Go to
SETUP > Host Comm > FTP
- Set username/password
- Perform a cold start
- For FANUC America (R650 FRA): Enable option R553 “HMI Device SNPX”
- For FANUC Ltd. (R651 FRL): No additional options required
This SDK is not on PyPI (yet). Clone this repository or download the ZIP.
git clone https://github.com/underautomation/Fanuc.py.git
Install required Python packages if any (see requirements.txt
if available):
pip install pythonnet==3.0.3
from underautomation.fanuc.fanuc_robot import FanucRobot
from underautomation.fanuc.connection_parameters import ConnectionParameters
robot = FanucRobot()
robot.connect(ConnectionParameters("192.168.0.1"))
✅ Robot Controllers: R-J3iB, R-30iA, R-30iB
✅ OS: Windows, Linux, macOS
✅ Python: 3.5+
We welcome your feedback and contributions!
- Report issues via GitHub Issues
- Submit pull requests with enhancements
- Suggest features and improvements
🔗 Learn more: UnderAutomation Licensing
- 📖 Documentation: https://underautomation.com/fanuc/documentation
- 📩 Contact Us: https://underautomation.com/contact