# Chapter 7: Dashboard Server ## About This Chapter The Dashboard Server is a TCP server for remotely operating a UR Controller. Whereas the SDU Robotics `RTDEControlInterface` used in the current implementation handles motion control, the official Universal Robots Dashboard Server handles robot operation management, including: - Power on - Brake release - Program start - Program stop - Clearing a Protective Stop The current implementation combines the official RTDE interface used by SDU Robotics `ur_rtde` with the Dashboard Server, assigning each its respective responsibilities. --- # 7.1 What Is the Dashboard Server? The Dashboard Server is a TCP server running inside the Controller. ``` Python │ TCP Socket │ Dashboard Server │ UR Controller ``` The Dashboard Server is a separate TCP interface from the RTDE protocol. --- # 7.2 Connection Port The Dashboard Server uses port: ``` 29999 ``` Example: ```python import socket sock = socket.socket() sock.connect(("192.168.0.10",29999)) ``` Upon connection, a message such as the following is returned: ``` Connected: Universal Robots Dashboard Server ``` --- # 7.3 Sending Commands The Dashboard Server accepts **text commands**. Example: ```python sock.sendall(b"power on\n") ``` Always append a newline. The Controller returns a string such as: ``` Powering on ``` --- # 7.4 Power On ```text power on ``` Turns on the Controller's servo power. Note: This does not turn on the Controller's AC power. It corresponds to the Power button on the Teach Pendant. --- # 7.5 Brake Release ``` brake release ``` Releases the brakes. Move commands cannot be executed with Power On alone. The normal sequence is: ``` power on ↓ brake release ``` --- # 7.6 Program Load ``` load program.urp ``` Loads a URP file. Example: ``` load demo.urp ``` This only loads the program; it does not execute it. --- # 7.7 Program Play ``` play ``` Starts the loaded program. Equivalent to the ▶ button on the Teach Pendant. --- # 7.8 Pause ``` pause ``` Pauses the program. This is different from a Move command. --- # 7.9 Stop ``` stop ``` Stops the running program. This has a different meaning from the following `RTDEControlInterface` methods: ``` stopJ() stopL() ``` --- # 7.10 Shutdown ``` shutdown ``` Safely shuts down the Controller. This is not an immediate power cut; it shuts down the operating system. --- # 7.11 Robot Status Robot status can also be queried. Example: ``` robotmode ``` Example response: ``` Robotmode: RUNNING ``` Other possible states include: ``` POWER_OFF IDLE BACKDRIVE RUNNING ``` --- # 7.12 Program Status ``` programState ``` Retrieves the current program state. Examples: ``` STOPPED PLAYING PAUSED ``` --- # 7.13 Safety Status ``` safetystatus ``` Retrieves the safety state. Used, for example, to detect a Protective Stop. --- # 7.14 Protective Stop A Protective Stop is a stop triggered by a safety mechanism. It is different from an Emergency Stop. Possible causes include: - Collision - Overload - Excessive speed It cannot be cleared using RTDE alone. --- # 7.15 Clearing a Protective Stop Command: ``` unlock protective stop ``` After clearing the stop, check Robot Mode and, if necessary, execute: ``` play ``` or: ``` brake release ``` --- # 7.16 Safety Popup When a safety dialog is displayed, send: ``` close safety popup ``` If the popup remains open, Move commands are not accepted. --- # 7.17 Typical Recovery Sequence A typical recovery sequence after a Protective Stop: ``` close safety popup ↓ unlock protective stop ↓ power on (if necessary) ↓ brake release (if necessary) ↓ play (if necessary) ``` In practice, check RobotMode throughout the procedure. --- # 7.18 Division of Responsibilities with RTDE | Function | RTDE | Dashboard | |----|----|----------| | MoveJ | Yes | No | | MoveL | Yes | No | | Read current position | Yes | No | | Digital IO | Yes | No | | Power ON | No | Yes | | Brake Release | No | Yes | | Program Play | No | Yes | | Clear Protective Stop | No | Yes | Both interfaces are required. --- # 7.19 Use in ur_ctrl.py In `ur_ctrl.py`, the connection sequence is: ``` connect() ↓ Dashboard connection ↓ RTDE connection ``` In addition, `reset_error()` should ideally be designed to execute operations such as: ``` close safety popup ↓ unlock protective stop ``` It is also convenient to implement `turn_on_motor()` as an API that combines: ``` power on ↓ brake release ``` --- # 7.20 Basic Sequence for Automatic Operation For fully automatic operation from Python, the sequence is as follows: ``` Dashboard connection ↓ RTDE connection ↓ Power On ↓ Brake Release ↓ MoveJ ↓ MoveL ↓ IO control ↓ MoveL ↓ MoveJ ↓ Stop ↓ Shutdown (if necessary) ``` --- # Summary The Dashboard Server is responsible for managing robot operation. Operations that cannot be performed through RTDE, such as: - Power On - Brake Release - Program Play - Clearing a Protective Stop are handled through the Dashboard Server. In the current implementation, SDU Robotics `ur_rtde` and the Dashboard Server are used together, separating motion control from operation management.