The "IXON connector" URCap adds ready-to-use Cloud Logging nodes that you can easily drag-and-drop in your Universal Robot program. The Cloud Logging function enables you to view and analyze your machine data.
To use the "IXON connector" URCap for Cloud Logging, you first need to install the URcap on your robot. Then you need to set up the communication protocol in the IXON Cloud and import the variables. This article will take you through all of these steps.
Please use the links below for easy navigation
- Install the IXON connector URcap
- Select a communication protocol
- Add variables
- Test variables
- Manage variables
Additional information:
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 |
To use Cloud Logging on your Universal Robots robot, you first need to install the IXON connector URcap. In addition to Cloud Logging, this URcap also enables the use of a VNC service and Cloud Notify.
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.Select a communication protocol
Activate Cloud Logging
Please first activate Cloud Logging (or start the 30 day free trial) if you haven't already.The second step in Cloud Logging is setting up a data source. This is done by selecting a communication protocol and defining the variables. This article shows you how to do this for the Universal Robots URcap using the LoggerAPI protocol.
You first have to select a communication protocol. This is the protocol that the IXrouter will use to communicate with the UR robot.
- Go to the IXON Cloud Fleet Manager app, which is accessible from the Apps menu
in the top right corner if you are currently in a different IXON Cloud app.
- Open the Main menu
, go to Devices
, and select the concerning device.
- Click on the Add a service
icon in the left menu, select [Data source], and then select [LoggerAPI].
- Enter the requested information (details below) and click on [Add].
Field | Description |
---|---|
Name | Enter a name for the data source. |
Identifier | The identifier ensures that every data source remains unique, even if they share the same name. |
IP address | Enter the IP address of your UR robot. |
Password | Choose a password of at least 6 characters. You will need this in the next step. |
Polling sleep time | Leave this field to "None". |
- Go to the IXON Connector page on the UR robot, enable publishing data for Cloud Logging, enter the IXrouter's IP address, and enter the password that you chose at the previous step.
Add variables
The next step is to add the variables to the IXON Cloud. You can use a large amount of built-in variables from your robot without making any changes to your program. Please follow the steps below to import variables.
Please note that it's required to import these variables for Cloud Notify to work, even if you don't intend to use any of the built-in variables.
- Go back to where you were in the IXON Cloud.
- Expand the Data source
service and go to [Variables].
- Click on [Import from CSV-file] in the top right corner of the screen.
- Select the "IXON connector" data source CSV file (downloadable here:
) and click on [Open]. Details about the CSV file can be viewed at CSV file contents and details.
Optionally, you can also use 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.
- Go back to where you were in the IXON Cloud.
- Expand the Data source
service and go to [Variables].
- Click on [
Add variable] in the bottom right corner and add your global or installation variables that you added in the the "IXON - Variable Logger"-node.
Variable | Detail | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Name | Add the name of the variable | ||||||||||||||
Identifier |
This variable ensures that every variable in a data-source remains unique, even when you give multiple variables the same name. |
||||||||||||||
Type |
Below you'll find a table containing all available data types and their equivalents in the IXON Cloud.
|
||||||||||||||
Address | The "IXON Cloud Address" you entered in the "IXON - Variable Logger"-node. | ||||||||||||||
Factor | Multiplies the value (leave empty if the data type is boolean). | ||||||||||||||
Unit | Displayed text behind the value. |
Temporary disconnect
After this next step, the config push, the device may temporarily disconnect while it's applying the new settings. This may take a minute.You have now made the changes in the IXON Cloud, but these are not yet active in your device. You will need to push your changes to your device for them to take effect.
- Click [Push config to device] in the top right corner.
Next step
Test variables
The test utility is used to check if all the added variables are set correctly. It shows the communication status with the UR robot and displays each variable's current value if everything is configured correctly and the UR robot's program is running. If not, the values will stay empty. The test utility will attempt to update values every 0.5 seconds, regardless of how often it's actually being logged (this does not count towards your license's dps/hr). Please follow the steps below to test your variables.
- Expand the Data source
service, go to [Variables], and click on [Run test] at the top.
A connection will now be set up to stream the data directly to your computer, using:
Port | Transport protocol | Application protocol |
---|---|---|
443 | TCP | WebSocket |
You will see live values of all variables, if the configuration is set up correctly and the UR robot's program is running.
Unexpected result?
If the test utility shows unexpected values, please check if the addresses and data types of all variables are entered correctly and check Troubleshooting for help.
If you get no data at all, please also check that the above listed port and protocols are not being blocked by your computer's or company's firewall.Next step
Now that you've tested the variables, you can view our "Configure data tags" guide to start logging.Manage variables
You can view all defined variables on the variables page:
- Expand the Data source
service and go to [Variables].
You can [Edit] individual variables, [Remove] individual or a selection of variables, and export all or a selection of variables.
Variables can be selected by clicking the checkbox on the left, or you can select them all by clicking the checkbox at the top.
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"
- "Could not register on the IXrouter."
- "Logging is not fully confgured on the platform"
- "The variable .. is not defined"
"Could not connect to the IXrouter"
This error message means that:
- The IP address entered on the IXON Connector page, on the robot, is not the same as the IXrouter's LAN IP address.
"Could not register on the IXrouter."
This error message means the Logging part of the URCap cannot communicate with the LoggerAPI data source in the IXrouter. Common causes are:
- 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 (The CSV file you are importing includes in the URcap .zip package).
- Cloud Logging has not yet been activated and/or pushed to the IXrouter.
"Logging is not fully confgured on the platform"
This error message means that the Logging part of the URCap in not the same as in the IXON Cloud. Common causes are:
- The LoggerAPI data source has not been configured correctly:
- the built-in variables have not yet been imported (The CSV file you are importing includes in the URcap .zip package). This is required even if you don't intend to use any of the built-in variables.
- the variables that you added to the IXON Variable Logger function in the UR have not all been added to the data source yet.
- the variables have an incorrect data type or setting.
"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.
CSV file 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 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] |