Greetings UR Community,
I am currently developing a solution on C# and I was trying to get data from port 30004 (RTDE), particularly the joint positions in real time. I am not really an expert on C# programming, and after a bit of research I was unable to get this done. If someone could give me a hand I would appreciate.
Best regards,
PMonforte
Hi, a quick and easy way is to use this library. You install it from Nuget. The documentation and examples on Github show you examples with RTDE.
class Rtde
{
static void Main(string[] args)
{
var robot = new UR();
var param = new ConnectParameters("192.168.0.1");
// Enable RTDE
param.Rtde.Enable = true;
// Exchange data at 500Hz
param.Rtde.Frequency = 500;
// Select data you want to write in robot controller
param.Rtde.InputSetup.Add(RtdeInputData.StandardAnalogOutput0);
param.Rtde.InputSetup.Add(RtdeInputData.InputIntRegisters, 0);
// Select data you want the robot to send
param.Rtde.OutputSetup.Add(RtdeOutputData.ActualTcpPose);
param.Rtde.OutputSetup.Add(RtdeOutputData.ToolOutputVoltage);
param.Rtde.OutputSetup.Add(RtdeOutputData.OutputDoubleRegisters, 10);
// Connect to robot
robot.Connect(param);
// Be notified at 500Hz when data is received
robot.Rtde.OutputDataReceived += Rtde_OutputDataReceived;
//...
// Get last received data in cache
Pose actualTcpPose = robot.Rtde.OutputDataValues.ActualTcpPose;
int toolOutputVoltage = robot.Rtde.OutputDataValues.ToolOutputVoltage;
double outputDoubleRegisters10 = robot.Rtde.OutputDataValues.OutputDoubleRegisters.X10;
//...
// Write input values in robot
var inputValues = new RtdeInputValues();
inputValues.StandardAnalogOutput0 = 0.2;
inputValues.InputIntRegisters.X0 = 12;
robot.Rtde.WriteInputs(inputValues);
// Disconnect only Dashboard communication
robot.Rtde.Disconnect();
// Disconnect every interfaces (Primary Interface, Dashboard, RTDE, ...)
robot.Disconnect();
}
private static void Rtde_OutputDataReceived(object sender, RtdeDataPackageEventArgs e)
{
// Get frequency of received message (OutputSetup contains Timestamp by default)
var realMessageFrequency = e.MeasuredFrequency;
// Get the value of the data you have selected in the setup
Pose actualTcpPose = e.OutputDataValues.ActualTcpPose;
int toolOutputVoltage = e.OutputDataValues.ToolOutputVoltage;
double outputDoubleRegisters10 = e.OutputDataValues.OutputDoubleRegisters.X10;
// Write inputs at 500Hz
var inputValues = new RtdeInputValues();
inputValues.StandardAnalogOutput0 = 0.5;
inputValues.InputIntRegisters.X0 = -10;
(sender as RtdeClientBase)?.WriteInputs(inputValues);
}
}
Thank you very much. I had found UnderAutomation before but I got the impression that it was not free, that is, that I had only a 30 day trial. Be it as it may, thank you for your help
Best regards
PMonforte