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)
Each function returns an error code (0 = success). Always check return values. Combine the live reading loop with a web framework. Example with Streamlit :
Here’s a minimal Python connection test: fanuc focas python
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).
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") ip = st
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.
import focas2 handle = focas2.cnc_allclibhndl3("192.168.1.100", 8193, 3) # timeout=3 sec if handle <= 0: print("Connection failed") else: print("Connected successfully") Example with Streamlit : Here’s a minimal Python
# 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)