UnderAutomation
Any question?

[email protected]

Contact us
UnderAutomation
⌘Q
Fanuc SDK documentation
Debugging & breakpoints
Documentation home

FTP overview

FTP provides access to internal controller files including variables, programs, diagnostics, safety status, and current position.

  • Key features
  • Quick example
  • Connection
  • Limitations
  • Next steps
  • API reference

FTP (File Transfer Protocol) provides direct access to the Fanuc controller's internal file system. The SDK uses FTP to transfer files (programs, backups) and to read and decode diagnostic data, variables, registers, and safety status.

Key features

  • File management: Upload, download, delete, rename files and directories
  • Variable reading: Read all system variables in bulk from .va files
  • Registers: Read numeric, position, and string registers
  • Diagnostics: Safety status, I/O state, current position, error history
  • Installed features: Detect available options on the controller

Quick example

using UnderAutomation.Fanuc;
using UnderAutomation.Fanuc.Common.Files.Diagnosis;
public class Ftp
{
static void Main()
{
// Create a new Fanuc robot instance
FanucRobot robot = new FanucRobot();
// Set connection parameters
ConnectionParameters parameters = new ConnectionParameters("192.168.0.1");
parameters.Ftp.Enable = true;
parameters.Ftp.FtpUser = "user";
parameters.Ftp.FtpPassword = "ftp password";
// 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");
/**/
}
}

Connection

// Via FanucRobot
var robot = new FanucRobot();
var parameters = new ConnectionParameters("192.168.0.1");
parameters.Ftp.Enable = true;
parameters.Ftp.FtpUser = ""; // usually empty
parameters.Ftp.FtpPassword = ""; // usually empty
robot.Connect(parameters);
// Or standalone
var ftp = new FtpClient();
ftp.Connect("192.168.0.1", "", "");

Limitations

  • Read-only for most data: Variables and diagnostics are read-only via FTP. Use Telnet, SNPX, or CGTP to write values
  • Slower than SNPX: FTP transfers entire files rather than individual values
  • No real-time data: Data represents a snapshot at the time of the FTP request

Next steps

  • File management : Upload, download, delete files
  • Diagnostics & variables : Safety status, registers, variables

API reference

Members of Ftp.FtpClient :
public class FtpClient : FtpClientBase {
// Instanciate a new FTP client connection
public FtpClient()
// Connect to a robot
public void Connect(string ip, string user, string password)
}
Members of Ftp.Internal.FtpClientBase :
public abstract class FtpClientBase : FileClientBase {
// Indicates that FTP connection is active
public bool Connected { get; }
// Contains methods to manipulate files and folders on the controller (upload, download, delete, ...)
public FtpDirectFileHandling DirectFileHandling { get; }
// Disconnects from FTP server
public void Disconnect()
// Get the list of all variable file names available on the controller
public override string[] EnumerateVariableFileNames()
// Get a list of all variable files on controller
public FtpListItem[] EnumerateVariableFiles()
// Connect robot IP address or host name
public override string IP { get; }
// Controller language (default is English)
public Languages Language { get; set; }
}

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

UnderAutomation
Contact usLegal

© All rights reserved.