The "StrideLinx connector" URCap adds ready-to-use Cloud Notify nodes that you can easily drag-and-drop in your Universal Robot program. The Cloud Notify function enables you to always be kept up-to-date about important machine events.
To use the "StrideLinx connector" URCap for Cloud Notify, you first need to install the URcap on your robot. Then you need to set up the communication protocol in the StrideLinx 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 StrideLinx connector URcap
- Select a communication protocol
- Add variables
- Test variables
- Manage variables
Additional information:
Install the StrideLinx 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 Notify on your Universal Robots robot, you first need to install the StrideLinx connector URcap. In addition to Cloud Notify, this URcap also enables the use of a VNC service and Cloud Logging.
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 "StrideLinx connector" URCap.
- Remove the old URCap and install the new URCap.
- Restart your UR robot.
- Contact us for the "StrideLinx connector" URCap and install it.
- Go to the StrideLinx 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 Notify
Please first activate Cloud Notify (or start the 30 day free trial) if you haven't already.The second step in Cloud Notify 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 StrideLinx router will use to communicate with the UR robot.
- Go to the StrideLinx Cloud Fleet Manager app, which is accessible from the Apps menu
in the top right corner if you are currently in a different StrideLinx 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, you will need this in the next step. |
Polling sleep time | Leave this field to "None". |
- Go to the StrideLinx Connector page on the UR robot, enable publishing data for Cloud Notify, enter the StrideLinx router's IP address, and enter the password that you chose at the previous step.
Add variables
You can use a large amount of built-in variables from your robot without making any changes to your program or you can add custom alarms throughout your program.
- Go back to where you were in the StrideLinx 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 "StrideLinx 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.
To add custom alarms throughout your program, please:
- 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.
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 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.
- Go back to where you were in the StrideLinx Cloud.
- 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 PLC 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. 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 "Set up alarms" guide to start adding alarms.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 StrideLinx 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 StrideLinx router"
This error message means the Notify part of the URCap cannot communicate with the LoggerAPI data source in the StrideLinx router. Common causes are:
- The IP address entered on the StrideLinx Connector page, on the robot, is not the same as the StrideLinx router's LAN IP address.
- The LoggerAPI data source has not yet been created and/or pushed to the StrideLinx router.
- 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 StrideLinx 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 Notify has not yet been activated and/or pushed to the StrideLinx router.
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 StrideLinx Cloud.
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] |