UnderAutomation
Any question?

[email protected]

Contact us
UnderAutomation
⌘Q

Fanuc SDK

GitHub stars
1100 (EUR)1300 (USD)

$

1300

lifetime

$

780

for universities (40% discount)

Quickly create .NET applications that communicate with your Fanuc industrial robot.

Choose the right license for your project
OrderRequest a quote

.NET

Python

LabVIEW

See terms and conditions
Plug & Play

Connect your robot in just a few minutes. No license manager to install, no USB key. Only reference the library.

No plugins to install on the robot

Use of network protocols provided as standard by the robot controller.
Karel ROS

30-day trial

Try it free for 30 days, no commitment, no registration required

Pay once, use forever

Perpetual license, no subscription required, regardless of the number of robots, developers, or redistributed software

Customer Success Stories

Discover how our customers integrate UnderAutomation solutions into their industrial projects.

GE
Aerospace / Healthcare

GE: Aerospace & Healthcare Automation

GE Accelerates Industrial Automation with UnderAutomation SDKs for Universal Robots and FANUC.

  1. Fanuc SDK Features: Telnet, SNPX, FTP & Kinematics

    Remote commands

    Telnet KCL (Keyboard Command Line) allows you to send commands to control the robot remotely - no additional option is necessary on the controller.
    // Connect to the robot
    robot.Connect(parameters);
    // Reset alarms
    robot.Telnet.Reset();
    // Run a program
    robot.Telnet.Run("MyProgram");
    robot.Telnet.Pause("MyProgram");
    robot.Telnet.Hold("MyProgram");
    robot.Telnet.Continue("MyProgram");
    robot.Telnet.Abort("MyProgram", force: true);
    // Set a variable
    robot.Telnet.SetVariable("$RMT_MASTER", 1);
    // Set an output port (example: DOUT port 2 = 0)
    robot.Telnet.SetPort(KCLPorts.DOUT, 2, 0);
    // Simulate an input port (example: DIN port 3 = 1)
    robot.Telnet.Simulate(KCLPorts.DIN, 3, 1);
    robot.Telnet.Unsimulate(KCLPorts.DIN, 3);
    }
    Click to see the full code

    High-speed data reading and writing

    SNPX (also known as SRTP/Robotif) allows rapid and structured data communication with the robot. It is used to read/write the registers, monitor alarms and check the condition of the robot.
    // Connect to the robot
    robot.Connect(parameters);
    // Read a register
    Position posReg1 = robot.Snpx.PositionRegisters.Read(1);
    float numReg5 = robot.Snpx.NumericRegisters.Read(5);
    string strReg10 = robot.Snpx.StringRegisters.Read(10);
    // Write a register
    posReg1.CartesianPosition.X = 100;
    robot.Snpx.PositionRegisters.Write(1, posReg1);
    robot.Snpx.NumericRegisters.Write(2, 123.45f);
    robot.Snpx.StringRegisters.Write(3, "Hello, world!");
    // Read a variable
    int rmtMaster = robot.Snpx.IntegerSystemVariables.Read("$RMT_MASTER");
    string lastAlm = robot.Snpx.StringSystemVariables.Read("$ALM_IF.$LAST_ALM");
    Position cellFloor = robot.Snpx.PositionSystemVariables.Read("$CELL_FLOOR");
    // Write a system variable
    robot.Snpx.IntegerSystemVariables.Write("$RMT_MASTER", 1);
    robot.Snpx.StringSystemVariables.Write("$ALM_IF.$LAST_ALM", "No alarms");
    robot.Snpx.PositionSystemVariables.Write("$CELL_FLOOR", cellFloor);
    // Write a Karel program variable
    robot.Snpx.IntegerSystemVariables.Write("$[KarelProgram]KarelVariable", 1);
    // Read and Write I/O (SDI,SDO,RDI,RDO,UI,UO,SI,SO,WI,WO,WSI,PMC_K,PMC_R)
    robot.Snpx.RDO.Write(1, true);
    ushort ai5 = robot.Snpx.AI.Read(5);
    // Read and Write analogs (AI,AO,GI,GO,PMC_D)
    robot.Snpx.AO.Write(2, 5);
    ushort ao3 = robot.Snpx.AO.Read(3);
    // Clear alarms
    robot.Snpx.ClearAlarms();
    }
    Click to see the full code

    File and decoding

    Direct access FTP to the memory of the robot for file transfer, reading variables and the management of the robot state, all in decoded and ready to be used in structured .NET objects.
    // Connect to the robot
    robot.Connect(parameters);
    IOState ioState = robot.Ftp.GetIOState();
    // Read a variable
    var variableFiles = robot.Ftp.GetAllVariables();
    foreach (var variableFile in variableFiles)
    foreach (var variable in variableFile.Variables)
    Console.WriteLine($"{variable.Name} = {variable.Value}");
    // Read system variable $RMT_MASTER
    int remoteMode = robot.Ftp.KnownVariableFiles.GetSystemFile().RmtMaster;
    // Read safety status
    SafetyStatus safetyStatus = robot.Ftp.GetSafetyStatus();
    Console.WriteLine($"Emergency Stop: {safetyStatus.ExternalEStop}");
    Console.WriteLine($"Teach Pendant Enabled: {safetyStatus.TPEnable}");
    // Get current position for each arm (Joints, World position of each tool, user frame positions)
    CurrentPosition currentPosition = robot.Ftp.GetCurrentPosition();
    // Upload a TP program to the controller
    robot.Ftp.DirectFileHandling.UploadFileToController(@"C:\Programs\MyPrg.tp", "md:/MyPrg.tp");
    // Download a file from the robot
    robot.Ftp.DirectFileHandling.DownloadFileFromController("md:/Backup.va", @"C:\Backup\Backup.va");
    // Delete a file on the robot
    robot.Ftp.DirectFileHandling.DeleteFile("md:/OldProgram.tp");
    }
    Click to see the full code

    Inverse kinematics

    Algebraic calculation of the direct and inverse kinematics of any Fanuc robot or cobot from its DH parameters.
    FanucRobot robot = new FanucRobot();
    robot.Connect("192.168.0.1");
    // Get DH parameters
    // Example: CRX-10iA/L
    DhParameters dh = new DhParameters(-540, 150, -160, 0, 710, 0);
    // From a known arm model
    dh = DhParameters.FromArmKinematicModel(ArmKinematicModels.CRX10iA);
    // From OPW parameters: M10iA/7L
    dh = DhParameters.FromOpwParameters(0.15, -0.20, 0.60, 0.86, 0.10);
    // From an online robot (SYSMOTN file)
    dh = DhParameters.FromSymotnFile(robot.Ftp.KnownVariableFiles.GetSymotnFile())[0];
    // Forward kinematics
    CartesianPosition pose = KinematicsUtils.ForwardKinematics(position, dh);
    // Inverse kinematics with multiple solutions
    JointsPosition[] positions = KinematicsUtils.InverseKinematics(pose, dh);
    }
    }
    Click to see the full code

    Motion Interfaces

    Implementation of the Fanuc RMI (R912) and Stream Motion (J519) protocols which allows you to simply send movement commands to the robot, as well as read and write its inputs, outputs and registers.
    parameters.Rmi.Enable = true;
    robot.Connect(parameters);
    // Initialize the RMI_MOVE program on the controller.
    // TP must be disabled and the controller must be in AUTO mode.
    robot.Rmi.Initialize();
    // Linear motion at 100 mm/s to a Cartesian target (tool 1, frame 0)
    var instr = new LinearMotionTpInstruction
    {
    SpeedType = RmiLinearSpeedType.MmSec,
    Speed = 100,
    TermType = RmiTerminationType.Fine,
    Target = new CartesianPositionWithUserFrame(500, 200, 300, 0, 90, 0, tool: 1, frame: 0)
    };
    RmiInstructionResponse r = robot.Rmi.SendTpInstruction(instr);
    // Wait for the controller to confirm the motion completed
    r.WaitForCompletion();
    if (r.Status == RmiInstructionStatus.Error)
    System.Console.WriteLine("Error: " + r.ErrorText);
    // Abort when done - always end the session with Abort() or Disconnect()
    robot.Rmi.Abort();
    robot.Disconnect();
    }
    }
    Click to see the full code

    Offline tools

    The features without the need for robot allow you to handle standard file formats (variable file, error list, robot status, etc.).
    static void Main()
    {
    // Parse a variable file and extract a hierarchical list of variables
    GenericVariableFile vaFile = FanucFileReaders.VariableReader.ReadFile("C:/path/to/variable.va", Languages.English);
    foreach (var variable in vaFile.Variables)
    Console.WriteLine($"{variable.Name} = {variable.Value} [{variable.Type}]");
    // Edit and regenerate the variable file
    vaFile.GenerateVa("C:/path/to/variable_modified.va\"");
    // Parse several types of files
    FanucFileReaders.ErrorListReader.ReadFile("C:/path/to/errall.ls", Languages.English);
    FanucFileReaders.IOStateReader.ReadFile("C:/path/to/iostate.dg", Languages.English);
    FanucFileReaders.SafetyStatusReader.ReadFile("C:/path/to/safety.dg", Languages.English);
    FanucFileReaders.CurrentPositionReader.ReadFile("C:/path/to/curpos.dg", Languages.English);
    }
    Click to see the full code
  2. Browse the documentation

    Browse the documentation

    The documentation allows you to quickly start developing with the library. The same functionality is available in all supported languages.

  3. Guides and how-to articles

    The SDK covers the main features of Fanuc robots through several native Ethernet protocols. Depending on the options installed on your controller and its generation, some protocols may or may not be available. Each article below explains how to perform a specific task and compares the different approaches.

    CGTP overview

    CGTP is an HTTP-based protocol providing the richest feature set: program management, variables, registers, I/O, kinematics, batch operations, and file access.

  4. Download and test

    Download via NUGET
    Download via NUGET

    Easily add this SDK to your Visual Studio project via the Nuget package manager.

    See on Nuget
    Examples on GitHub
    Examples on GitHub

    The sources of examples of use of this SDK are available on Github

    Windows application example
    Windows application example

    Allows you to test all the features of the SDK with a simple interface. The example is compiled in "self contained" and "single file" with .NET 8. The application is portable without installation.

    By downloading, you accept the general conditions of use:
    See terms and conditions
    UnderAutomation.Fanuc.Showcase.Forms.exe (139 MB)
    LabVIEW library and sample app
    LabVIEW library and sample app
    See on GithubUnderAutomation.Fanuc.lvlib
  5. Request a quote and order

    Pricing

    Libraries can be downloaded for free and can be tested for 30 days. After this period, you can ask us to extend the trial period, or buy the license that suits you best: standard, pro or source. After purchasing, you have a maintenance period, giving you access to the support and the possibility of updating. When you buy a license to use, it is linked to a robot brand, you can use it forever, without recurring fee, regardless of the number of robot, developer or software that you redistribute to your customers. If you are a distributor and wish to offer your customers one of our products, please contact us to discuss special conditions and prices.

    Standard Site License

    1100 (EUR)$1300 (USD)

    $

    1300

    lifetime

    $

    780

    for universities (40% discount)
    Designed for industrial environments, providing lifetime full-feature access.
    1 year maintenance included (access to updates)
    Same conditions as the Pro License, except that support is not prioritized and maintenance is 1 year.
    There are no internal sources; only the obfuscated DLL is provided.
    No assistance by videoconference (only via email).
    Buy now
    Most popular

    Pro License

    1700 (EUR)$2000 (USD)

    $

    2000

    $2960
    lifetime

    $

    1200

    for universities (40% discount)
    For critical production environments requiring priority support and longer-term maintenance.
    3 years maintenance included (access to updates) with no renewal orders during this term (zero paperwork)
    Complete and permanent SDK: no recurring subscription is required, the license is yours forever and works in all programming languages ​​for a robot brand.
    Can be used only by the organization holding the license, at the postal address indicated. All team developers will share the same license, regardless of the number of development machine.
    Any application developed using the SDK can be delivered to an unlimited number of your customers at no additional cost, regardless of the number of robots to connect.
    The license is a kind of password to call in the code that unlocks the features. No additional software to install. No USB key.
    Priority Support (<24h on average)
    Remote assistance (email and up to 2h videoconference)
    There are no internal sources; only the obfuscated DLL is provided.
    Upgrade to Source anytime (pay the difference)
    Buy now

    Source license

    3400 (EUR)$4000 (USD)

    $

    4000

    lifetime

    $

    2400

    for universities (40% discount)
    For complete technical sovereignty, deep customization, and total independence.
    Same conditions as the pro license
    Complete internal code of the library in C#
    Visual Studio solution that includes thousands of lines of code developed over several years
    You can modify this source code and use it in your application, within the limits defined in the general terms of use
    Works seamlessly with AI coding agents (Claude, Copilot, Cursor, Codex...) thanks to full source code access and included context files (AGENTS.md) that give the LLM the exact knowledge of the SDK internals
    Buy now

Easily integrate Universal Robots, Fanuc, Yaskawa, ABB or Staubli robots into your .NET, Python, LabVIEW or Matlab applications

UnderAutomation
Contact usLegal

© All rights reserved.