{"id":43507755,"url":"https://github.com/underautomation/fanuc.net","last_synced_at":"2026-04-03T18:01:32.286Z","repository":{"id":231370372,"uuid":"483215611","full_name":"underautomation/Fanuc.NET","owner":"underautomation","description":"🦾.NET library to communicate with Fanuc robots. Nothing to install on the robot. 100% managed assembly with no dependencies. Modern alternative to PCDK (FRROBOT.DLL) or Robot IF (FRRJIF.DLL): pay once for a company-wide license, then use forever—no runtime or development fees, unlimited robots, developers, and redistributed software.","archived":false,"fork":false,"pushed_at":"2026-03-23T23:25:41.000Z","size":173322,"stargazers_count":53,"open_issues_count":7,"forks_count":5,"subscribers_count":10,"default_branch":"main","last_synced_at":"2026-03-24T06:30:17.635Z","etag":null,"topics":["fanuc","ftp","industrial","karel","kcl","robotics","telnet"],"latest_commit_sha":null,"homepage":"https://underautomation.com/fanuc","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/underautomation.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"License.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-04-19T11:22:59.000Z","updated_at":"2026-03-23T23:25:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"1442d327-7593-4f43-b7b7-4ea2260b1c10","html_url":"https://github.com/underautomation/Fanuc.NET","commit_stats":null,"previous_names":["underautomation/fanuc","underautomation/fanuc.net"],"tags_count":57,"template":false,"template_full_name":null,"purl":"pkg:github/underautomation/Fanuc.NET","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/underautomation%2FFanuc.NET","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/underautomation%2FFanuc.NET/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/underautomation%2FFanuc.NET/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/underautomation%2FFanuc.NET/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/underautomation","download_url":"https://codeload.github.com/underautomation/Fanuc.NET/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/underautomation%2FFanuc.NET/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31368156,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T17:53:18.093Z","status":"ssl_error","status_checked_at":"2026-04-03T17:53:17.617Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fanuc","ftp","industrial","karel","kcl","robotics","telnet"],"created_at":"2026-02-03T12:39:49.003Z","updated_at":"2026-04-03T18:01:32.264Z","avatar_url":"https://github.com/underautomation.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Fanuc Communication SDK\n\n[![UnderAutomation Fanuc communication SDK](https://raw.githubusercontent.com/underautomation/Fanuc.NET/refs/heads/main/.github/assets/banner.png)](https://underautomation.com)\n\n[![NuGet](https://img.shields.io/nuget/dt/UnderAutomation.Fanuc?label=NuGet%20Downloads\u0026logo=nuget)](https://www.nuget.org/packages/UnderAutomation.Fanuc/)\n[![.NET Framework](https://img.shields.io/badge/.NET_Framework-3.5+-blueviolet)](#)\n[![.NET Standard](https://img.shields.io/badge/.NET_Standard-2.0+-blueviolet)](#)\n[![.NET Core](https://img.shields.io/badge/.NET_Core-2.0+-blueviolet)](#)\n[![.NET Versions](https://img.shields.io/badge/.NET-5_6_8_9-blueviolet)](#)\n\n### 🤖 Effortlessly Communicate with Fanuc robots\n\nThe **Fanuc SDK** enables seamless integration with Fanuc robots for automation, data exchange, and remote control. Ideal for industrial automation, research, and advanced robotics applications.\n\nIt allows you to connect to a **real robot**, but also to **ROBOGUIDE**.\n\n🔗 **More Information:** [https://underautomation.com/fanuc](https://underautomation.com/fanuc)  \n🔗 Also available for **[🟨 LabVIEW](https://github.com/underautomation/Fanuc.vi)** \u0026 **[🐍 Python](https://github.com/underautomation/Fanuc.py)**\n\n---\n\n[⭐ Star if you like it !](https://github.com/underautomation/Fanuc.NET/stargazers)\n\n[👁️ Watch to be notified of latest updates !](https://github.com/underautomation/Fanuc.NET/watchers)\n\n---\n\n## 🚀 TL;DR (Too Long; Didn’t Read)\n\n- ✔️ **PCDK Alternative:** No need for Fanuc’s PCDK or Robot Interface\n- 📖 **Read/Write Variables:** Access and modify system variables.\n- 🔄 **Register Control:** Read/write registers for positions, numbers, and strings.\n- 🎬 **Program Control:** Run, abort, and reset programs.\n- 🔔 **Alarm Management:** Reset alarms and view alarm history.\n- ⚡ **I/O Control:** Manage ports and I/O values (UI, UO, GI, GO, etc.).\n- 🔍 **State Monitoring:** Get safety status, position, diagnostics, and more.\n- 📂 **File Management:** Easily manipulate files.\n- 🏎️ **Remote motion:** Remote move the robot\n- 📐 **Kinematics Calculations:** Perform forward and inverse kinematics offline.\n\nNo additional installations or Fanuc options are required to use this SDK.\n\n---\n\n## 📥 Download Example Applications\n\nExplore the **Fanuc SDK** with fully functional example applications and precompiled binaries for various platforms. [See Github releases](https://github.com/underautomation/Fanuc.NET/releases)\n\n### 🔹 Windows Forms Application (Full Feature Showcase)\n\nA Windows Forms application demonstrating all the features of the library.\n\n📌 **Download:** [📥 UnderAutomation.Fanuc.Showcase.Forms.exe](https://github.com/underautomation/Fanuc.NET/releases/latest/download/UnderAutomation.Fanuc.Showcase.Forms.exe)\n\n---\n\n**Read variables :**\n\n![](https://raw.githubusercontent.com/underautomation/Fanuc.NET/refs/heads/main/.github/assets/read-variables.gif)\n\n---\n\n**Move the robot :**\n\n![](https://raw.githubusercontent.com/underautomation/Fanuc.NET/refs/heads/main/.github/assets/move-robot.gif)\n\n---\n\n**High speed Read \u0026 Write registers :**\n![](https://raw.githubusercontent.com/underautomation/Fanuc.NET/refs/heads/main/.github/assets/snpx.gif)\n\n---\n\n**Live remote control with Jostick or 3D Mouse:**\n![](https://raw.githubusercontent.com/underautomation/Fanuc.NET/refs/heads/main/.github/assets/dpm-mouse-control.gif)\n\n---\n\n**TP Editor with breakpoints:**\n![](https://raw.githubusercontent.com/underautomation/Fanuc.NET/refs/heads/main/.github/assets/tp-editor-breakpoints.gif)\n\n---\n\n**Forward and Inverse Kinematics:**\n![](https://raw.githubusercontent.com/underautomation/Fanuc.NET/refs/heads/main/.github/assets/forward-inverse-kinematics.png)\n\n---\n\n## 📌 Features\n\n### 🖥️ **1. Remote Control via Telnet KCL**\n\nTelnet KCL (Keyboard Command Line) allows sending commands to control the robot **remotely**—no additional options needed on the controller.\n\n#### 🔹 Reset alarms\n\n```csharp\nrobot.Telnet.Reset();\n```\n\n#### 🔹 Start, pause, hold, abort programs\n\n```csharp\nrobot.Telnet.Run(\"MyProgram\");\nrobot.Telnet.Pause(\"MyProgram\");\nrobot.Telnet.Hold(\"MyProgram\");\nrobot.Telnet.Continue(\"MyProgram\");\nrobot.Telnet.Abort(\"MyProgram\", force: true);\n```\n\n#### 🔹 Set variables dynamically\n\n```csharp\nrobot.Telnet.SetVariable(\"my_variable\", 42);\nrobot.Telnet.SetVariable(\"$RMT_MASTER\", 1);\n```\n\n#### 🔹 Control robot I/O ports\n\n```csharp\n// Set an output port (example: DOUT port 2 = 0)\nrobot.Telnet.SetPort(KCLPorts.DOUT, 2, 0);\n\n// Simulate an input port (example: DIN port 3 = 1)\nrobot.Telnet.Simulate(KCLPorts.DIN, 3, 1);\nrobot.Telnet.Unsimulate(KCLPorts.DIN, 3);\n```\n\n---\n\n### 🚀 **2. High-Speed Data Exchange via SNPX (RobotIF)**\n\nSNPX (also known as **SRTP/RobotIF**) enables fast, structured data communication with the robot.  \nIt is used to **read/write registers, monitor alarms, and check robot status**.\n\n#### 🔹 Read \u0026 write position registers\n\n```csharp\n// Read position register 1\nPosition register1 = robot.Snpx.PositionRegisters.Read(1);\n\n// Set a new value for register 2\nrobot.Snpx.PositionRegisters.Write(2, new Position { X = 100, Y = 50, Z = 25 });\n```\n\n#### 🔹 Read \u0026 write numeric registers\n\n```csharp\n// Read register R[1]\ndouble value = robot.Snpx.Registers.Read(1);\n\n// Write a value to R[2]\nrobot.Snpx.Registers.Write(2, 123.45);\n```\n\n#### 🔹 Read and control robot signals (UI, UO, GI, GO)\n\n```csharp\n// Read a User Input (UI) state\nbool UI1 = robot.Snpx.UI.Read(1);\n\n// Set a User Output (UO) signal\nrobot.Snpx.UO.Write(3, true);\n```\n\n#### 🔹 Read \u0026 write variables\n\n```csharp\n// Write a system variable\nrobot.Snpx.IntegerSystemVariables.Write(\"$RMT_MASTER\", 1);\nrobot.Snpx.StringSystemVariables.Write(\"$ALM_IF.$LAST_ALM\", \"No alarms\");\nrobot.Snpx.PositionSystemVariables.Write(\"$CELL_FLOOR\", cellFloor);\n\n// Write a Karel program variable\nrobot.Snpx.IntegerSystemVariables.Write(\"$[KarelProgram]KarelVariable\", 1);\n```\n\n#### Clear alarms\n\n```csharp\n// Clear alarms\nrobot.Snpx.ClearAlarms();\n```\n\n#### Get current position\n\n```csharp\n// Read current joint and cartesian position\nPosition position = robot.Snpx.CurrentPosition.ReadWorldPosition();\n\n// Read User frame cartesian position\nrobot.Snpx.CurrentPosition.ReadUserFramePosition(1);\n```\n\n---\n\n### 📂 **3. File \u0026 Variable Management via FTP Memory Access**\n\nThe SDK provides **direct FTP access** to the robot's memory for **file transfer, variable reading, and configuration management**.\n\n#### 🔹 Upload, download, and delete files\n\n```csharp\n// Upload a TP program to the controller\nrobot.Ftp.DirectFileHandling.UploadFileToController(@\"C:\\Programs\\MyPrg.tp\", \"md:/MyPrg.tp\");\n\n// Download a file from the robot\nrobot.Ftp.DirectFileHandling.DownloadFileFromController(\"md:/Backup.va\", @\"C:\\Backup\\Backup.va\");\n\n// Delete a file on the robot\nrobot.Ftp.DirectFileHandling.DeleteFile(\"md:/OldProgram.tp\");\n```\n\n#### 🔹 Read all declared variables\n\n```csharp\nvar allVariables = robot.Ftp.GetAllVariables();\nforeach (var variable in allVariables)\n{\n    Console.WriteLine($\"{variable.Name} = {variable.Value}\");\n}\n```\n\n#### 🔹 Read known system variables\n\n```csharp\n// Read system variable $RMT_MASTER\nint remoteMode = robot.Ftp.KnownVariableFiles.GetSystemFile().RmtMaster;\n```\n\n#### 🔹 Check robot safety status\n\n```csharp\nSafetyStatus safetyStatus = robot.Ftp.GetSafetyStatus();\nConsole.WriteLine($\"Emergency Stop: {safetyStatus.ExternalEStop}\");\nConsole.WriteLine($\"Teach Pendant Enabled: {safetyStatus.TPEnable}\");\n```\n\n#### 🔹 Retrieve the robot's current position\n\n```csharp\nCurrentPosition currentPosition = robot.Ftp.GetCurrentPosition();\nConsole.WriteLine($\"Cartesian Position: X={currentPosition.Cartesian.X}, Y={currentPosition.Cartesian.Y}, Z={currentPosition.Cartesian.Z}\");\n```\n\n---\n\n## 🔧 Configuration\n\n### ✅ **Enable Telnet KCL**\n\n1. **Go to** `SETUP \u003e Host Comm`\n2. **Select** `TELNET` and press `[DETAIL]`\n3. **Set a password** and restart the robot\n\n### ✅ **Enable FTP Memory Access**\n\n1. **Go to** `SETUP \u003e Host Comm \u003e FTP`\n2. **Set a username \u0026 password**\n3. **Perform a cold start**\n\n### ✅ **Enable SNPX**\n\n- If Your Robot Uses \"FANUC America Corp.\" Parameters (R650 FRA):\n  You need to enable option R553 (\"HMI Device SNPX\") in the robot's software configuration.\n\n- If Your Robot Uses \"FANUC Ltd.\" Parameters (R651 FRL):\n  No additional option is required—SNPX is included by default.\n\n---\n\n## 📐 **Kinematics Calculations:**\n\nThe SDK includes tools for performing forward and inverse kinematics calculations offline, allowing you to compute the robot's end-effector position based on joint angles and vice versa, from DH parameters.\n\n```csharp\nusing UnderAutomation.Fanuc.Kinematics;\n\nJointsPosition position = new JointsPosition(10, 20, 120, 0, 0, 25);\n\n// ---- Get DH parameters ----\n// Example: CRX-10iA/L\nDhParameters dh = new DhParameters(-540, 150, -160, 0, 710, 0);\n\n// From a known arm model\ndh = DhParameters.FromArmKinematicModel(ArmKinematicModels.CRX10iA);\n\n// From OPW parameters: M10iA/7L\ndh = DhParameters.FromOpwParameters(0.15, -0.20, 0.60, 0.86, 0.10);\n\n// From an online robot (SYSMOTN file)\ndh = DhParameters.FromSymotnFile(_robot.Ftp.KnownVariableFiles.GetSymotnFile())[0];\n\n// ---- Forward kinematics ----\nCartesianPosition pose = KinematicsUtils.ForwardKinematics(position, dh);\n\n// ---- Inverse kinematics with multiple solutions ----\nJointsPosition[] positions = KinematicsUtils.InverseKinematics(pose, dh);\n```\n\n---\n\n## 🛠 Installation\n\n### 1️⃣ **Get the SDK**\n\nChoose the installation method that works best for you:\n\n| Method             | NuGet (Recommended)                                                                     | Direct Download                                                                                                    |\n| ------------------ | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |\n| **How to Install** | Install via NuGet. [See on Nuget](https://www.nuget.org/packages/UnderAutomation.Fanuc) | Download and reference the DLL manually                                                                            |\n|                    | `dotnet add package UnderAutomation.Fanuc `                                             | 📥 [Download ZIP](https://github.com/underautomation/Fanuc.NET/releases/latest/download/UnderAutomation.Fanuc.zip) |\n\n### 2️⃣ **Reference the SDK in Your Code**\n\n```csharp\nusing UnderAutomation.Fanuc;\n```\n\n### 3️⃣ **Connect to Your Robot**\n\n```csharp\nvar robot = new FanucRobot();\nvar parameters = new ConnectParameters(\"192.168.0.1\");\nparameters.Language = Languages.English; // Japanese and Chinese controllers are also supported\n\nparameters.Telnet.Enable = true;\nparameters.Telnet.TelnetKclPassword = \"your_telnet_password\";\n\nparameters.Ftp.Enable = true;\nparameters.Ftp.FtpUser = \"\";\nparameters.Ftp.FtpPassword = \"\";\n\nparameters.Snpx.Enable = true;\n\nparameters.Rmi.Enable = true;\n\nrobot.Connect(parameters);\n```\n\n---\n\n## 🔍 Compatibility\n\n✅ **Supported Robots:** R-J3iB, R-30iA, R-30iB  \n✅ **Operating Systems:** Windows, Linux, macOS  \n✅ **.NET Versions:** .NET Framework (≥3.5), .NET Standard, .NET Core, .NET 5/6/8/9\n\n---\n\n## 📢 Contributing\n\nWe welcome contributions! Feel free to:\n\n- Report issues via [GitHub Issues](https://github.com/underautomation/Fanuc/issues)\n- Submit pull requests with improvements\n- Share feedback \u0026 feature requests\n\n---\n\n## 📜 License\n\n**⚠️ This SDK requires a commercial license.**  \n🔗 Learn more: [UnderAutomation Licensing](https://underautomation.com/fanuc/eula)\n\n---\n\n## 📬 Need Help?\n\nIf you have any questions or need support:\n\n- 📖 **Check the Docs**: [Documentation](https://underautomation.com/fanuc/documentation)\n- 📩 **Contact Us**: [Support](https://underautomation.com/contact)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funderautomation%2Ffanuc.net","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Funderautomation%2Ffanuc.net","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funderautomation%2Ffanuc.net/lists"}