Supported hardware
Latest version | Supported devices |
Supported protocols for Live data, Historical data, and Alarming |
---|---|---|
0.3.2 (jan 2020) |
e-Series running Polyscope 5.2.0 or higher CB-series running Polyscope 3.8.0 or higher |
Plain-text TCP |
For Live data, Historical data, Datalogging to MQTT broker, and Alarming you'll need to set up a data source and add variables. This article shows you how to do this for communication with a robot from Universal Robots.
- Prepare the UR robot
- Add a data source
- Add variables
- Test variables
- Live data, Historical data, Alarming
Additional information:
Prepare the UR robot
Install the StrideLinx connector URcap
The "StrideLinx connector" URCap adds ready-to-use nodes that you can easily drag-and-drop in your Universal Robot program for use with Live data, Historical data, and Alarming. Additionally, the URCap installs a VNC server for easy remote access.
- Contact us for the "StrideLinx connector" URCap and install it.
Activate the VNC server
The VNC server enables you to remotely access the screen of the UR robot. After you activate it, you can easily and securely access it remotely using our VNC service.
- Go to the StrideLinx Connector page on the UR robot and enable the VNC Server.
- Enter a VNC server password. The recommended length is 6-8 characters. The view only password is optional and enables a connection that allows users to only view, not control, the screen.
Activate data publishing
If you wish to use Live data, Historical data, or Alarming, data publishing needs to be enabled.
- Turn on Publish data for Cloud Logging and Cloud Notify, enter the StrideLinx router's LAN IP address, and choose a password of at least 6 characters, you will need this later.
Live data and historical data
If you wish to use Live data or Historical data you may need to make changes to your program.
You can use your program variables by adding nodes to your program. However, a large amount of built-in variables from your UR robot are already available without needing to make any changes to your program. The full list of these built-in variables can be viewed here: CSV file contents and details.
- Drag-and-drop the StrideLinx - Variable Logger node to your BeforeStart initialization cycle and add any variable you'd like to use. 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 initialization value before they are called by the StrideLinx node.
Alarming
If you wish to use Alarming you will need to make changes to your program.
- Drag-and-drop the StrideLinx - Notify node anywhere in your program and as often as you like. Enter an alarm message and select a priority.
Add a data source
The robot will need to be added as a Plain-text TCP data source.
- Go to Fleet Manager > Devices and click on your device name.
- In the left menu, at Services, click on the icon and select Data source > Plain-text TCP.
- Enter the requested information (details below) and click on Add.
Field Description Name Enter a name for the data source. Identifier The identifier is entered automatically and 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 Enter the password that you chose at Activate data publishing. Polling sleep time This setting is not applicable and can be ignored.
Add variables
Once you've added a data source, you can start adding variables.
If you did not add the StrideLinx - Variable Logger node to your program in Prepare the UR robot, you can only log the UR robot's built-in variables. If this is intentional, skip to step 13.
- Under your Data source, go to Variables and click onAdd variable.
- Enter the requested information (details below) and click on Add.
Field Description Name Enter a name for the variable. Identifier The identifier is entered automatically and ensures that every variable remains unique, even if they share the same name.
Type Below you'll find a table containing all available data types and their equivalents in the StrideLinx Cloud.
In UR robot In StrideLinx Cloud String String Boolean Boolean Integer Int32 or UInt32 Float Float32 Position String Array String Address The StrideLinx Cloud Address you entered in the StrideLinx - Variable Logger node. Factor Multiplies the value. Leave empty if the data type is boolean.
This factor is automatically applied to all data visualization in StrideLinx Cloud components, both Live and Historical, and when exporting that data to a CSV file. Entering a factor in a data component overrules this factor.
This factor does not apply to log triggers, alarms and datalogging to MQTT broker.Unit Displayed behind the value (e.g. kg). - Repeat step 1 for every variable that you added in the StrideLinx - Variable Logger node. Alternatively, you can also click Import from CSV-file near the top right corner to add variables in bulk instead.
- The structure of the CSV file is explained here: Import variables: CSV file structure.
- Using Export to CSV-file and Import from CSV-file enables you to easily copy variables from one device to another device. Alternatively, you can also use device templates.
You'll need to import the CSV file containing the UR robot's built-in variables, even if you do not intend to use these variables.
- Click on Import from CSV-file near the top right corner.
- Select the StrideLinx connector data source CSV file (included in your URCap zip file) and click on Open. Details about the CSV file can be viewed at CSV file contents and details.
You have now made the changes in the StrideLinx 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.
Temporary disconnect
After this next step, the config push, the device may temporarily disconnect and LAN communication may be temporarily interrupted while it's applying the new settings. This only takes a moment.- Click on Push config to device in the top right corner.
Test variables
The variables test is recommended to check if all added variables are configured correctly. It shows the value of all variables if everything is configured correctly and shows an error if something is not configured correctly.
- Click on Run test near the top right corner.
- The test will attempt to update values every 0.5 seconds.
- Is the test showing unexpected values? Check the addresses and data types of the variables. Additionally, you can consult the Troubleshooting section for in-depth assistance.
- Is the test showing a timeout error? Check that the data source is configured correctly and the robot is connected and powered on. If you are still getting a timeout error, contact your IT to make sure the test is not blocked. The test sets up an outgoing connection from your computer to the StrideLinx router using:
Port Transport protocol Application protocol 443 TCP WebSocket
Live data, Historical data, Alarming
Now that the data source and variables have been set up, you can continue below.
- Click below to continue in the feature specific articles.
Appendix: Troubleshooting
On the StrideLinx Connector page on the UR robot the current status will be displayed:
Active
Disabled or not configured correctly
Error
This will be followed by a message that is self-explanatory in most cases, but additional information can be found below.
- Error: Could not connect to the StrideLinx router
- Error: Could not register on the StrideLinx router
- Error: Logging is not fully confgured on the platform
- Error: The variable .. is not defined
Error: Could not connect to the StrideLinx router
This error message means that:
- The IP address entered on the StrideLinx Connector page in the UR robot is not the same as the StrideLinx router's LAN IP address.
Error: Could not register on the StrideLinx router
This error message means the URCap cannot communicate with the Plain-text TCP data source in the StrideLinx router. Common causes are:
- The Plain-text TCP data source has not yet been created. Follow the steps starting at Add a data source.
- The Plain-text TCP data source has not yet been pushed to the StrideLinx router. Don't forget the final step in Add variables.
- The Plain-text TCP 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 StrideLinx Connector page on the UR robot.
Error: Logging is not fully confgured on the platform
This error message means that the Logging part of the URCap is not the same as in the StrideLinx Cloud. Common causes are:
- The Plain-text TCP data source has not been configured correctly:
- the built-in variables have not yet been imported. This is required even if you don't intend to use any of the built-in variables.
- the variables that you added to the StrideLinx - Variable Logger node in the UR robot have not all been added to the data source in the StrideLinx Cloud yet.
- the variables have an incorrect data type or setting.
Error: The variable .. is not defined
This error message means the URCap tried to log a variable before that variable was initialized. Moving the initialization of your variables before the StrideLinx - Variable Logger node will resolve this error.
Appendix: CSV file contents and details
A large amount of built-in variables from your UR robot are readily available for use in Live data, Historical data, and Alarming. We've created a CSV file (included in your URCap zip file) that you can import into your Plain-text TCP data source in the StrideLinx Cloud.
Not included in this list are any variables that you added yourself using the StrideLinx - Variable Logger node.
CSV file contents and details
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 Alarming message |
Notify Medium Priority | str | urcap:notify_medium | Medium priority Alarming message |
Notify High Priority | str | urcap:notify_high | High priority Alarming 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] |