Fanuc SDK documentation
Members of Rmi.Data.ControllerErrorText :
Members of Rmi.Data.UFrameUToolNumbers :
Members of Rmi.Data.DigitalInputValue :
Members of Rmi.Data.PositionRegisterData :
Members of Rmi.Data.CartesianPosition :
Members of Rmi.Data.TcpSpeed :
Frames, I/O & status
Manage user frames and tools, read/write I/O, read positions, set speed override, and get controller status via RMI.
RMI provides access to user frames, tools, digital I/O, position registers, and controller status.
Controller status
// Controller statusControllerStatus status = robot.Rmi.GetStatus();Console.WriteLine($"Servo ready: {status.ServoReady}");Console.WriteLine($"TP mode: {status.TPMode}");// Admin commandsrobot.Rmi.SetOverride(50);robot.Rmi.Pause();robot.Rmi.Continue();robot.Rmi.Reset();robot.Rmi.Abort();// Read last errorControllerErrorText error = robot.Rmi.ReadError();
Admin commands
Position reading
// Current Cartesian positionvar pos = robot.Rmi.ReadCartesianPosition();Console.WriteLine($"X={pos.Position.X}, Y={pos.Position.Y}, Z={pos.Position.Z}");// Current joint anglesJointAnglesSample joints = robot.Rmi.ReadJointAngles();Console.WriteLine($"J1={joints.JointAngle.J1}, J2={joints.JointAngle.J2}");// TCP speedTcpSpeed speed = robot.Rmi.ReadTcpSpeed();Console.WriteLine($"TCP speed: {speed.Speed} mm/s");
User frames and tools
// Read current frame/tool numbersUFrameUToolNumbers current = robot.Rmi.GetUFrameUTool();Console.WriteLine($"UFrame: {current.UFrameNumber}, UTool: {current.UToolNumber}");// Set current frame/toolrobot.Rmi.SetUFrameUTool(uframe: 1, utool: 2);// Read/write a user frameIndexedFrame frame = robot.Rmi.ReadUFrame(1);robot.Rmi.WriteUFrame(1, new Frame { X = 100, Y = 200, Z = 0 });// Read/write user toolIndexedFrame tool = robot.Rmi.ReadUTool(1);robot.Rmi.WriteUTool(1, new Frame { X = 0, Y = 0, Z = 150 });
Digital I/O
// Read digital inputDigitalInputValue din = robot.Rmi.ReadDIN(5);Console.WriteLine($"DI[5] = {din.PortValue}");// Write digital outputrobot.Rmi.WriteDOUT(1, OnOff.ON);robot.Rmi.WriteDOUT(1, OnOff.OFF);// Read a position registerPositionRegisterData pr = robot.Rmi.ReadPositionRegister(1);Console.WriteLine($"PR[1]: X={pr.Position.X}");// Write a position registerFrame newPos = new Frame { X = 500, Y = 200, Z = 300, W = 0, P = 90, R = 0 };MotionConfiguration config = new MotionConfiguration { UToolNumber = 1, UFrameNumber = 0 };robot.Rmi.WritePositionRegister(1, config, newPos);
Position registers
Complete example
using UnderAutomation.Fanuc;using UnderAutomation.Fanuc.Rmi.Data;public class RmiFramesIo{public static void Main(){FanucRobot robot = new FanucRobot();ConnectionParameters parameters = new ConnectionParameters("192.168.0.1");parameters.Rmi.Enable = true;robot.Connect(parameters);robot.Rmi.Initialize();/**/// --- Controller status ---ControllerStatus status = robot.Rmi.GetStatus();Console.WriteLine($"Servo ready: {status.ServoReady}");Console.WriteLine($"TP mode: {status.TPMode}");// --- Admin commands ---robot.Rmi.SetOverride(50);robot.Rmi.Pause();robot.Rmi.Continue();robot.Rmi.Reset();// --- Position reading ---var pos = robot.Rmi.ReadCartesianPosition();JointAnglesSample joints = robot.Rmi.ReadJointAngles();TcpSpeed speed = robot.Rmi.ReadTcpSpeed();// --- User frames and tools ---UFrameUToolNumbers current = robot.Rmi.GetUFrameUTool();robot.Rmi.SetUFrameUTool(uframe: 1, utool: 2);IndexedFrame frame = robot.Rmi.ReadUFrame(1);robot.Rmi.WriteUFrame(1, new Frame { X = 100, Y = 200, Z = 0 });IndexedFrame tool = robot.Rmi.ReadUTool(1);robot.Rmi.WriteUTool(1, new Frame { X = 0, Y = 0, Z = 150 });// --- Digital I/O ---DigitalInputValue din = robot.Rmi.ReadDIN(5);robot.Rmi.WriteDOUT(1, OnOff.ON);// --- Position registers ---PositionRegisterData pr = robot.Rmi.ReadPositionRegister(1);Frame newPos = new Frame { X = 500, Y = 200, Z = 300 };MotionConfiguration config = new MotionConfiguration { UToolNumber = 1, UFrameNumber = 0 };robot.Rmi.WritePositionRegister(1, config, newPos);/**/}}
API reference
Members of Rmi.Data.ControllerStatus :public class ControllerStatus : RmiResponseBase {public ControllerStatus()public override bool Equals(object obj)public override int GetHashCode()// Next valid SequenceID when sequence checking is enabled.public int NextSequenceId { get; set; }// Number of UFRAMEs configured.public byte NumberUFrame { get; set; }// Number of UTOOLs configured.public byte NumberUTool { get; set; }// RMI_MOVE program status (1 = aborted).public byte ProgramStatus { get; set; }// RMI motion runtime state (1 = running).public byte RMIMotionStatus { get; set; }// Servo ready state (1 = ready).public byte ServoReady { get; set; }// Single step mode flag (1 = on).public byte SingleStepMode { get; set; }// Teach pendant mode (0 = disabled/AUTO, 1 = enabled/TEACH).public byte TPMode { get; set; }public override string ToString()}
public class ControllerErrorText : RmiResponseBase {public ControllerErrorText()public override bool Equals(object obj)// Controller error text in the form XXXX-NNN.public string ErrorData { get; set; }public override int GetHashCode()public override string ToString()}
public class UFrameUToolNumbers : RmiResponseBase {public UFrameUToolNumbers()public override bool Equals(object obj)public override int GetHashCode()public override string ToString()// Current user frame number.public byte UFrameNumber { get; set; }// Current user tool number.public byte UToolNumber { get; set; }}
public class DigitalInputValue : RmiResponseBase {public DigitalInputValue()public override bool Equals(object obj)public override int GetHashCode()// Port number.public short PortNumber { get; set; }// Port value (0 = OFF, 1 = ON).public byte PortValue { get; set; }public override string ToString()}
public class PositionRegisterData : RmiResponseBase {public PositionRegisterData()// Configuration saved in the position register.public MotionConfiguration Configuration { get; set; }public override bool Equals(object obj)public override int GetHashCode()// Position saved in the position register.public Frame Position { get; set; }// Register number.public short RegisterNumber { get; set; }public override string ToString()}
public class CartesianPosition : RmiTimedResponse {public CartesianPosition()// Active configuration at sampling time.public MotionConfiguration Configuration { get; set; }public override bool Equals(object obj)public override int GetHashCode()// Cartesian TCP position.public Frame Position { get; set; }public override string ToString()}
public class TcpSpeed : RmiTimedResponse {public TcpSpeed()public override bool Equals(object obj)public override int GetHashCode()// Current tool center point speed.public double Speed { get; set; }public override string ToString()}