The IXrouter enables you to remotely connect to your UR robot, allowing for an easy and quick way to securely access your UR robot from anywhere. This means you can access and do everything you would otherwise have to be on location for. In addition to remote access the IXrouter also provides features like Cloud Logging (data logging) and Cloud Notify (alarming), giving you the option to view and analyze your machine data and always be kept up-to-date about important machine events.
To get started, you'll need an IXrouter and an account on the IXON Cloud.
- IXrouter
- Create an IXON Cloud account
- Register the IXrouter
- Install the IXON Connector URcap
- Cloud Logging and Cloud Notify
Additional information:
IXrouter
The IXrouter is available in several variations. Each one offers a different way to connect to the cloud in addition to a default wired connection:
- Wired only, 4G, Wi-Fi, 4G & Wi-Fi (details)
Each variant comes with life-long IXON Cloud usage and its features, the option to activate Cloud Logging and Cloud Notify, as well as free technical support.
Create an IXON Cloud account
You can easily create your personal account on connect.ixon.cloud by pressing register at the bottom of the login page. A company account will automatically be created where you will be able to register your IXrouters.
More info
Step by step instructions can be found here.Register the IXrouter
Now that you have an account, you can create a configuration file that will tell the IXrouter how to connect (i.e. via Ethernet cable, Wi-Fi etc.).
- Go to [Tools] in the left menu and press [Start configuration]. Simply follow the steps and download the configuration file.
- Load the configuration file into the IXrouter by copying the ixrouter.conf file onto a USB flash drive and placing it in the IXrouter. The IXrouter will do the rest and automatically register under your company.
- Once registered, you can activate it.
More info
Details and step by step instructions can be found here.IXrouter activated
You can now connect to your UR robot or continue the steps below.Install the IXON connector URcap
Latest version | Supported devices | Cloud Logging & Notify |
---|---|---|
0.3.2 (jan 2020) |
e-Series running Polyscope 5.2.0 or higher CB-series running Polyscope 3.8.0 or higher |
LoggerAPI |
The "IXON connector" URCap will add a VNC server to your UR robot, enabling you to remotely view and control your UR robot's HMI.
Updating existing installation?
If you're updating an existing installation, please follow these steps to make sure you don't lose any settings:
- Contact us for the "IXON connector" URCap.
- Remove the old URCap and install the new URCap.
- Restart your UR robot.
- Contact us for the "IXON connector" URCap and install it.
- Go to the IXON Connector page on the robot, enable the VNC server, and enter a VNC server password with a recommended length of 6-8 characters.
View only
The "view-only" password enables a connection that only allows users to view, not control, the HMI. This functionality will be disabled when you leave this password field empty.VNC server is running
Cloud Logging and Cloud Notify
Requirement
Please make sure that you have activated Cloud Logging or Cloud Notify before following the following steps. You can find how to start a trial license or activate a license here.In addition to a VNC server, the "IXON connector" URCap also adds ready-to-use Cloud Logging and Cloud Notify nodes that you can easily drag-and-drop in your robot program. Cloud Logging and Cloud Notify enable you to view and analyze your machine data and always be kept up-to-date about important machine events.
- Go to the IXON Cloud and create a LoggerAPI data source in the IXrouter's [Services] tab.
- Enter the robot's IP address and choose a password (you will need this in the next step).
- Go to the IXON Connector page on the robot, enable publishing data for Cloud Logging and Cloud Notify, enter the IXrouter's IP address, and enter the password that you chose at the previous step.
You can log a large amount of built-in variables from your robot without making any changes to your program.
- Download the "IXON connector" data source .csv file here (
) and import this file in your LoggerAPI data source in the IXON Cloud. Details can be found here: Data source.csv contents and details.
You can also log any global or installation variable from your program.
- Drag-and-drop the "IXON - Variable Logger"-node to your BeforeStart initialisation cycle and add any variable you'd like to log. The node will then only run once, but the data will be logged in the background. Note that the variables need to be assigned an initialisation value before they are called by the IXON node.
- Add these variables in your LoggerAPI data source in the IXON Cloud by using their IXON Cloud Address as their address. For an overview of the corresponding data types in the IXON Cloud, take a look at the table below.
Data type (UR program) |
Data type (IXON Cloud) |
---|---|
String | String |
Boolean | Boolean |
Integer | Int32 or UInt32 |
Float | Float32 |
Position | String |
Array | String |
You can also add alarms to recieve notifications when specific events occur.
- Drag-and-drop the "IXON - Notify"-node anywhere in your program and as often as you like.
- If you've not yet done so, download the "IXON connector" data source .csv file here (
) and import this file in your LoggerAPI data source in the IXON Cloud. Details can be found here: Data source.csv contents and details.
To effectively start logging data and start receiving notifications:
- In the IXON Cloud, open the Cloud Logging or Cloud Notify app in the [Apps] tab and configure what you'd like to log or be notified about.
Note that you will have to sync (top right corner) any changes you make.
Cloud Logging and Cloud Notify started
You can visualize your Cloud Logging data in customizable dashboards.Troubleshooting
Go to the IXON Connector page on the robot and you'll see the current status:
- Green = Active
- Orange = Disabled or not configured correctly
- Red = Error
This will be followed by a(n error) message that is self-explanatory in most cases. However, there are 2 messages that require a little more explanation:
"Could not connect to the IXrouter"
This error message means the Logging/Notify part of the URCap cannot communicate with the LoggerAPI data source in the IXrouter. Common causes are:
- The IP address entered on the IXON Connector page, on the robot, is not the same as the IXrouter's LAN IP address.
- The LoggerAPI data source has not yet been created and/or pushed to the IXrouter.
- The LoggerAPI data source has not been configured correctly:
- the entered IP address does not match the IP address of the UR robot
- the password does not match the password on the IXON Connector page on the robot
- the variables have not yet been imported (import the .csv file included in the URcap .zip package)
- Cloud Logging and/or Cloud Notify have not yet been activated and/or pushed to the IXrouter. You need to have activated one, or both, before the URcap can report it's data to the IXrouter.
"The variable .. is not defined"
This error message means the URCap tried to log a variable before it was assigned. Moving your assignments before the "IXON - Variable Logger"-node will resolve this error.
Data source.csv contents and details
If you're using Cloud Logging or Cloud Notify, you can use built-in variables from your UR robot without having to make any changes in your program. We've created a data source.csv file () that you can import into your LoggerAPI data source in the IXON Cloud.
Not included in this list are any variables that you added yourself, using the "IXON - Variable Logger"-node.
Name | Type | Address | Details |
---|---|---|---|
Program State | str | dashboard:program_state | STOPPED, PLAYING, PAUSED |
Program Name | str | dashboard:program_name | The name of the program currently running |
Robotmode (Dashboard) | str | dashboard:robot_mode | NO_CONTROLLER, DISCONNECTED, CONFIRM_SAFETY, BOOTING, POWER_OFF, POWER_ON, IDLE, BACKDRIVE, RUNNING |
Safetymode | str | dashboard:safety_mode | RESET, SHUTTING_DOWN, BACKDRIVE, POWER_OFF, NOT_RESPONDING, MOTOR_INITIALISATION, BOOTING, BOOTLOADER, VIOLATION, FAULT, RUNNING, IDLE |
Is Program Running | bool | dashboard:is_program_running | Whether there is a program running or not |
Is Program Saved | bool | dashboard:is_program_saved | Whether the current program has been saved, if any is running |
Global Robot State | str | urcap:global_state | Combined state based on priority: - Safety mode, if not normal - Robot mode, if not running - Program state, if not playing - PLAYING: ProgramFile, if playing Convenient for use in a live monitor dashboard, shows current state in one word. This variable has been created from the above sources by the URCap. |
Is Robot Moving | bool | urcap:is_robot_moving | Whether the robot is moving (calculated from TCP speed) |
Notify Low Priority | str | urcap:notify_low | Low priority Cloud Notify message |
Notify Medium Priority | str | urcap:notify_medium | Medium priority Cloud Notify message |
Notify High Priority | str | urcap:notify_high | High priority Cloud Notify message |
Timestamp | float | rtde:timestamp | Time in seconds since the robot was started |
Target q #0 Base | float | rtde:target_q_0 | Target joint position |
Target q #1 Shoulder | float | rtde:target_q_1 | |
Target q #2 Elbow | float | rtde:target_q_2 | |
Target q #3 Wrist 1 | float | rtde:target_q_3 | |
Target q #4 Wrist 2 | float | rtde:target_q_4 | |
Target q #5 Wrist 3 | float | rtde:target_q_5 | |
Target qd #0 Base | float | rtde:target_qd_0 | Target joint velocity |
Target qd #1 Shoulder | float | rtde:target_qd_1 | |
Target qd #2 Elbow | float | rtde:target_qd_2 | |
Target qd #3 Wrist 1 | float | rtde:target_qd_3 | |
Target qd #4 Wrist 2 | float | rtde:target_qd_4 | |
Target qd #5 Wrist 3 | float | rtde:target_qd_5 | |
Target qdd #0 Base | float | rtde:target_qdd_0 | Target joint acceleration |
Target qdd #1 Shoulder | float | rtde:target_qdd_1 | |
Target qdd #2 Elbow | float | rtde:target_qdd_2 | |
Target qdd #3 Wrist 1 | float | rtde:target_qdd_3 | |
Target qdd #4 Wrist 2 | float | rtde:target_qdd_4 | |
Target qdd #5 Wrist 3 | float | rtde:target_qdd_5 | |
Target Current #0 Base | float | rtde:target_current_0 | Target joint current |
Target Current #1 Shoulder | float | rtde:target_current_1 | |
Target Current #2 Elbow | float | rtde:target_current_2 | |
Target Current #3 Wrist 1 | float | rtde:target_current_3 | |
Target Current #4 Wrist 2 | float | rtde:target_current_4 | |
Target Current #5 Wrist 3 | float | rtde:target_current_5 | |
Target Moment #0 Base | float | rtde:target_moment_0 | Target joint moment (torque) |
Target Moment #1 Shoulder | float | rtde:target_moment_1 | |
Target Moment #2 Elbow | float | rtde:target_moment_2 | |
Target Moment #3 Wrist 1 | float | rtde:target_moment_3 | |
Target Moment #4 Wrist 2 | float | rtde:target_moment_4 | |
Target Moment #5 Wrist 3 | float | rtde:target_moment_5 | |
Actual q #0 Base | float | rtde:actual_q_0 | Actual joint position |
Actual q #1 Shoulder | float | rtde:actual_q_1 | |
Actual q #2 Elbow | float | rtde:actual_q_2 | |
Actual q #3 Wrist 1 | float | rtde:actual_q_3 | |
Actual q #4 Wrist 2 | float | rtde:actual_q_4 | |
Actual q #5 Wrist 3 | float | rtde:actual_q_5 | |
Actual qd #0 Base | float | rtde:actual_qd_0 | Actual joint velocity |
Actual qd #1 Shoulder | float | rtde:actual_qd_1 | |
Actual qd #2 Elbow | float | rtde:actual_qd_2 | |
Actual qd #3 Wrist 1 | float | rtde:actual_qd_3 | |
Actual qd #4 Wrist 2 | float | rtde:actual_qd_4 | |
Actual qd #5 Wrist 3 | float | rtde:actual_qd_5 | |
Actual Current #0 Base | float | rtde:actual_current_0 | Actual joint current |
Actual Current #1 Shoulder | float | rtde:actual_current_1 | |
Actual Current #2 Elbow | float | rtde:actual_current_2 | |
Actual Current #3 Wrist 1 | float | rtde:actual_current_3 | |
Actual Current #4 Wrist 2 | float | rtde:actual_current_4 | |
Actual Current #5 Wrist 3 | float | rtde:actual_current_5 | |
Joint Control Output #0 Base | float | rtde:joint_control_output_0 | Joint control current |
Joint Control Output #1 Shoulder | float | rtde:joint_control_output_1 | |
Joint Control Output #2 Elbow | float | rtde:joint_control_output_2 | |
Joint Control Output #3 Wrist 1 | float | rtde:joint_control_output_3 | |
Joint Control Output #4 Wrist 2 | float | rtde:joint_control_output_4 | |
Joint Control Output #5 Wrist 3 | float | rtde:joint_control_output_5 | |
Actual TCP Pose #0 X | float | rtde:actual_TCP_pose_0 | Actual Cartesian coordinates of the tool: (x,y,z,rx,ry,rz), where rx, ry and rz is a rotation vector representation of the tool orientation |
Actual TCP Pose #1 Y | float | rtde:actual_TCP_pose_1 | |
Actual TCP Pose #2 Z | float | rtde:actual_TCP_pose_2 | |
Actual TCP Pose #3 RX | float | rtde:actual_TCP_pose_3 | |
Actual TCP Pose #4 RY | float | rtde:actual_TCP_pose_4 | |
Actual TCP Pose #5 RZ | float | rtde:actual_TCP_pose_5 | |
Actual TCP Speed #0 | float | rtde:actual_TCP_speed_0 | Actual speed of the tool given in Cartesian coordinates |
Actual TCP Speed #1 | float | rtde:actual_TCP_speed_1 | |
Actual TCP Speed #2 | float | rtde:actual_TCP_speed_2 | |
Actual TCP Speed #3 | float | rtde:actual_TCP_speed_3 | |
Actual TCP Speed #4 | float | rtde:actual_TCP_speed_4 | |
Actual TCP Speed #5 | float | rtde:actual_TCP_speed_5 | |
Actual TCP Force #0 | float | rtde:actual_TCP_force_0 | Generalized forces in the TCP |
Actual TCP Force #1 | float | rtde:actual_TCP_force_1 | |
Actual TCP Force #2 | float | rtde:actual_TCP_force_2 | |
Actual TCP Force #3 | float | rtde:actual_TCP_force_3 | |
Actual TCP Force #4 | float | rtde:actual_TCP_force_4 | |
Actual TCP Force #5 | float | rtde:actual_TCP_force_5 | |
Target TCP Pose #0 X | float | rtde:target_TCP_pose_0 | Target Cartesian coordinates of the tool: (x,y,z,rx,ry,rz), where rx, ry and rz is a rotation vector representation of the tool orientation |
Target TCP Pose #1 Y | float | rtde:target_TCP_pose_1 | |
Target TCP Pose #2 Z | float | rtde:target_TCP_pose_2 | |
Target TCP Pose #3 RX | float | rtde:target_TCP_pose_3 | |
Target TCP Pose #4 RY | float | rtde:target_TCP_pose_4 | |
Target TCP Pose #5 RZ | float | rtde:target_TCP_pose_5 | |
Target TCP Speed #0 | float | rtde:target_TCP_speed_0 | Target speed of the tool given in Cartesian coordinates |
Target TCP Speed #1 | float | rtde:target_TCP_speed_1 | |
Target TCP Speed #2 | float | rtde:target_TCP_speed_2 | |
Target TCP Speed #3 | float | rtde:target_TCP_speed_3 | |
Target TCP Speed #4 | float | rtde:target_TCP_speed_4 | |
Target TCP Speed #5 | float | rtde:target_TCP_speed_5 | |
Joint Temperatures #0 Base | float | rtde:joint_temperatures_0 | Temperature of each joint in degrees Celsius |
Joint Temperatures #1 Shoulder | float | rtde:joint_temperatures_1 | |
Joint Temperatures #2 Elbow | float | rtde:joint_temperatures_2 | |
Joint Temperatures #3 Wrist 1 | float | rtde:joint_temperatures_3 | |
Joint Temperatures #4 Wrist 2 | float | rtde:joint_temperatures_4 | |
Joint Temperatures #5 Wrist 3 | float | rtde:joint_temperatures_5 | |
Actual Execution Time | float | rtde:actual_execution_time | Controller real-time thread execution time |
Robot Mode (RTDE) | int | rtde:robot_mode | NO_CONTROLLER, DISCONNECTED, CONFIRM_SAFETY, BOOTING, POWER_OFF, POWER_ON, IDLE, BACKDRIVE, RUNNING |
Joint Mode #0 Base | int | rtde:joint_mode_0 | RESET, SHUTTING_DOWN, BACKDRIVE, POWER_OFF, NOT_RESPONDING, MOTOR_INITIALISATION, BOOTING, BOOTLOADER, VIOLATION, FAULT, RUNNING, IDLE |
Joint Mode #1 Shoulder | int | rtde:joint_mode_1 | |
Joint Mode #2 Elbow | int | rtde:joint_mode_2 | |
Joint Mode #3 Wrist 1 | int | rtde:joint_mode_3 | |
Joint Mode #4 Wrist 2 | int | rtde:joint_mode_4 | |
Joint Mode #5 Wrist 3 | int | rtde:joint_mode_5 | |
Safety Mode | int | rtde:safety_mode | NORMAL, REDUCED, PROTECTIVE_STOP, RECOVERY, SAFEGAURD_STOP, SYSTEM_EMERGENCY_STOP, ROBOT_EMERGENCY_STOP, VIOLATION, FAULT, VALIDATE_JOINT_ID, UNDEFINED_SAFETY_MODE |
Actual Tool Accelerometer X | float | rtde:actual_tool_accelerometer_0 | Tool x, y and z accelerometer values |
Actual Tool Accelerometer Y | float | rtde:actual_tool_accelerometer_1 | |
Actual Tool Accelerometer Z | float | rtde:actual_tool_accelerometer_2 | |
Speed Scaling | float | rtde:speed_scaling | Speed scaling of the trajectory limiter |
Target Speed Fraction | float | rtde:target_speed_fraction | Target speed fraction |
Actual Momentum | float | rtde:actual_momentum | Norm of Cartesian linear momentum |
Actual Main Voltage | float | rtde:actual_main_voltage | Safety Control Board: Main voltage |
Actual Robot Voltage | float | rtde:actual_robot_voltage | Safety Control Board: Robot voltage (48V) |
Actual Robot Current | float | rtde:actual_robot_current | Safety Control Board: Robot current |
Actual Joint Voltage #0 Base | float | rtde:actual_joint_voltage_0 | Actual joint voltages |
Actual Joint Voltage #1 Shoulder | float | rtde:actual_joint_voltage_1 | |
Actual Joint Voltage #2 Elbow | float | rtde:actual_joint_voltage_2 | |
Actual Joint Voltage #3 Wrist 1 | float | rtde:actual_joint_voltage_3 | |
Actual Joint Voltage #4 Wrist 2 | float | rtde:actual_joint_voltage_4 | |
Actual Joint Voltage #5 Wrist 3 | float | rtde:actual_joint_voltage_5 | |
Runtime State | int | rtde:runtime_state | Program state |
Elbow Position #0 X | float | rtde:elbow_position_0 | Position of robot elbow in Cartesian coordinates |
Elbow Position #1 Y | float | rtde:elbow_position_1 | |
Elbow Position #2 Z | float | rtde:elbow_position_2 | |
Elbow Velocity #0 X | float | rtde:elbow_velocity_0 | Velocity of robot elbow in Cartesian coordinates |
Elbow Velocity #1 Y | float | rtde:elbow_velocity_1 | |
Elbow Velocity #2 Z | float | rtde:elbow_velocity_2 | |
Analog IO Types | int | rtde:analog_io_types | Bits 0-3: analog input 0, analog input 1, analog output 0, analog output 1 (0=current[A], 1=voltage[V]) |
Standard Analog Input #0 | float | rtde:standard_analog_input0 | Standard analog input 0 [A or V] |
Standard Analog Input #1 | float | rtde:standard_analog_input1 | Standard analog input 1 [A or V] |
Standard Analog Output #0 | float | rtde:standard_analog_output0 | Standard analog output 0 [A or V] |
Standard Analog Output #1 | float | rtde:standard_analog_output1 | Standard analog output 1 [A or V] |
Io Current | float | rtde:io_current | I/O current [A] |
Euromap67 Input Bits | int | rtde:euromap67_input_bits | Euromap67 input bits |
Euromap67 Output Bits | int | rtde:euromap67_output_bits | Euromap67 output bits |
Euromap67 24V Voltage | float | rtde:euromap67_24V_voltage | Euromap67 24V Voltage [V] |
Euromap67 24V Current | float | rtde:euromap67_24V_current | Euromap67 24V Current [A] |
Tool Mode | int | rtde:tool_mode | MODE_RESET (e-Series only), SHUTTING DOWN (e-Series only), POWER_OFF (e-Series only), NOT_RESPONDING (e-Series only), BOOTING (e-Series only), BOOTLOADER, FAULT (e-Series only), RUNNING, IDLE |
Tool Analog Input #0 | float | rtde:tool_analog_input0 | Tool analog input 0 [A or V] |
Tool Analog Input #1 | float | rtde:tool_analog_input1 | Tool analog input 1 [A or V] |
Tool Output Current | float | rtde:tool_output_current | Tool current [A] |
Tool Temperature | float | rtde:tool_temperature | Tool temperature in degrees Celsius |
TCP Force scalar | float | rtde:tcp_force_scalar | TCP force scalar [N] |