Fanuc Focas Python «90% Secure»
(FANUC Open CNC Application Server) is a library that exposes the internal data points of a FANUC CNC—spindle load, axis positions, alarms, program execution status—via a network or serial connection. And when you combine FOCAS with Python , you unlock real-time monitoring, predictive maintenance, automated data logging, and even remote control of industrial machinery using one of the world's most accessible programming languages.
# Start a stored program (O1234) focas2.cnc_start(h, "O1234") focas2.cnc_feedhold(h) Cycle start (resume) focas2.cnc_cycle_start(h) Reset (ejects from alarm/emergency stop simulation) focas2.cnc_reset(h)
(example):
Here’s a minimal Python connection test: fanuc focas python
X: 245.123 Y: -10.567 Z: 80.000 Spindle load: 42% X: 245.125 Y: -10.570 Z: 80.000 Spindle load: 43% ... FOCAS also allows control , not just monitoring. This should only be used with proper safety interlocks, but it’s incredibly powerful for lights‑out manufacturing or automated workcells.
Each function returns an error code (0 = success). Always check return values. Combine the live reading loop with a web framework. Example with Streamlit :
Place the DLL in a location Python can find (e.g., C:\Windows\System32 or your project folder). Every FANUC CNC with Ethernet needs an IP address and port (usually 8193 by default for FOCAS). You also need to enable the FOCAS server function on the CNC side (often a parameter change: e.g., set parameter 148 bit 0 = 1). (FANUC Open CNC Application Server) is a library
| Category | Example Data | |----------|---------------| | Machine status | Running, alarm, idle, edit | | Axes | Position, feed rate, load, servo error | | Spindle | Speed, load, orientation, temperature | | Programs | Current line number, program name, DNC transfer | | Diagnostics | Alarms, operator messages, PMC signals | | Parameters | Offsets, tool data, system parameters |
import streamlit as st import focas2 import time st.title("FANUC CNC Monitor")
time.sleep(1) finally: focas2.cnc_freelibhndl(h) monitor_cnc("192.168.1.100") FOCAS also allows control , not just monitoring
try: while True: # Get absolute position (X, Y, Z, etc.) pos_data = focas2.cnc_rdposition(h, 0) # 0 = absolute print(f"X: pos_data['data'][0]:.3f Y: pos_data['data'][1]:.3f Z: pos_data['data'][2]:.3f")
# Get spindle load (percentage) spindle = focas2.cnc_rdspindle(h, 0) # 0 = first spindle print(f"Spindle load: spindle['data'][0]['load']%")
In the world of industrial manufacturing, FANUC CNC (Computer Numerical Control) machines are the gold standard—powering everything from automotive assembly lines to aerospace component machining. For decades, extracting data from these controllers or sending commands to them meant relying on proprietary, vendor-specific software (often written in C++ or ladder logic). That barrier has now fallen.
ip = st.text_input("CNC IP Address", "192.168.1.100") if st.button("Connect"): h = focas2.cnc_allclibhndl3(ip, 8193, 3) if h <= 0: st.error("Connection failed") else: placeholder = st.empty() while True: pos = focas2.cnc_rdposition(h, 0) spindle = focas2.cnc_rdspindle(h, 0) placeholder.metric("Spindle Load (%)", spindle['data'][0]['load']) time.sleep(0.5)
