3. TCP/IP communication#
Mecademic robots must be connected to a computer or PLC over Ethernet. API commands may be sent through Mecademic’s web interface, the MecaPortal, or through a custom computer program using either the TCP/IP protocol, as detailed in this section, or one of the three cyclic protocols, described in the following sections.
When the robot communicates using the TCP/IP protocol, it exchanges null-terminated ASCII strings (an end-line character may replace the null terminator in the TCP stream for convenience). This interface is referred to as the TCP/Text API.
Note
The default robot IP address is 192.168.0.100.
3.1. Overview#
3.1.1. Control connection#
The robot accepts TCP connections on port 10000, referred to as the control port. Commands to control the robot and responses from the robot are exchanged over this port.
Only one control connection is allowed at a time.
3.1.2. Monitoring connection#
The robot also periodically sends data over TCP port 10001,
referred to as the monitoring port. This connection reports the robot’s initial state
upon connection, then all subsequent status changes. It also transmits periodic real-time data (e.g., robot position)
at the rate specified by the SetMonitoringInterval command.
By default, this includes joint and Cartesian positions. Additional optional data can be enabled with the
SetRealTimeMonitoring command.
Multiple monitoring connections are allowed for convenience.
Note
To avoid desynchronization between the data
received from both ports, it is possible to send a copy of the monitoring port data to
the control port using the SetCtrlPortMonitoring command. This allows an application to receive
all necessary data (robot responses, state changes, and real-time data) over a single connection on port 10000.
3.1.3. Commands syntax#
Each command has a defined name and may include arguments inside parentheses. For example:
ActivateRobot()
SetJointVel(50)
MoveJoints(20,-20,-50,45)
Note
A dash (-) can be added before the command name to ask the robot to handle the command silently (i.e., without logging it in the robot’s detailed event log or the MecaPortal event log), as in the following example:
-MoveLin(208,50,40,0,0,90)
3.1.4. Command categories#
TCP/Text API commands are regrouped in the following categories, in terms of functionality:
motion commands, which are the commands used to construct the robot trajectory (e.g.,
Delay,MoveJoints,SetTrf,SetBlending),robot control commands, which are commands used to control the robot (e.g.,
ActivateRobot,PauseMotion,SetNetworkOptions),data request commands, which are commands used to request some data regarding the robot (e.g.,
GetTRF,GetBlending,GetJointVel),real-time data request commands, which are commands used to request some real-time data regarding the robot (e.g.,
GetRtTrf,GetRtCartPos,GetStatusRobot),work zone supervision and collision detection commands, which are commands used to set a bounding box for the robot and its tooling and define collision conditions, and query these settings and related statuses,
optional accessories commands, which are commands used to control or request data from the optional tools and modules for our robots (i.e., the vacuum and I/O module).
commands for managing variables, which allow the definition and management of persistent variables.
However, commands can also be categorized in terms of whether they are executed
immediately or not. Queued commands are placed in a
motion queue, once received by the robot, and are executed on a FIFO
basis. All motion commands and some external tool commands are queued.
Instantaneous commands are executed immediately, as soon as received by
the robot. All data request commands (Get*), all robot control commands, all
Work zone supervision and collision prevention commands and some optional accessories
(*_Immediate) are instantaneous.
3.1.5. Default values#
Some command descriptions refer to default values: these are essentially variables that are initialized every time the robot boots. Of these, those that correspond to motion commands are also initialized every time the robot is deactivated (e.g., after an emergency stop). In contrast, certain parameter values are persistent: they have manufacturer’s default values, but the changes you make to these are written on an SD drive and persist even if you power off the robot.
Note
For convenience, since TCP/Text API commands used in the TCP/IP protocol form the backbone of other communication protocols, they are presented in a separate part of this manual (see left sidebar).
3.2. Responses and messages#
Every Mecademic robot sends responses and messages over its control port in various situations: when it encounters an error, receives a request or certain motion commands, or experiences a status change. Additionally, the robot periodically or occasionally sends similar responses and messages, along with other information, on its monitoring port.
All responses and messages from the robot are formatted as ASCII strings in the following structure:
The second part of a response or message consists of either a descriptive text or a set of comma-separated return values. Descriptive text is intended to provide information to the user and is subject to change without prior notice. For example, the description “Homing failed” may later be updated to “Homing has failed.” Therefore, you should rely solely on the four-digit code when processing messages.
Any changes to these codes or the format of comma-separated return values will always be documented in the firmware upgrade manual. Return values are provided as either integers or IEEE-754 floating-point numbers with up to nine decimal places.
3.2.1. Error messages#
When the robot encounters an error while executing a command, it goes into error mode. See Section 3.3.1 for details on how to manage these errors. The following table lists all command error messages. These messages are sent on the control port.
Message |
Explanation |
|---|---|
[1000][Command buffer is full.] |
Maximum number of queued commands reached. Retry by sending commands at a slower rate. |
[1001][Empty command or command unrecognized. - Command: ‘…’] |
Unknown or empty command. |
[1002][Syntax error, symbol missing. - Command: ‘…’] |
A parenthesis or a comma has been omitted. |
[1003][Argument error. - Command: ‘…’] |
Wrong number of arguments or invalid input (e.g., the argument is out of range). |
[1005][The robot is not activated.] |
The robot must be activated, before executing the command that caused this error. |
[1006][The robot is not homed.] |
The robot must be homed, before executing the command that cased this error. |
[1007][Joint over limit (… is not in range […,…] for joint …). - Command: ‘…’.] |
The robot cannot execute the |
[1010][Linear move is blocked because a joint would rotate by more than 180deg. - Command: ‘…’] |
The linear motion cannot be executed because it requires a reorientation of 180° of the end-effector, and there may be two possible paths. |
[1011][The robot is in error.] |
A command has been sent but the robot is in error mode and cannot process it
until a |
[1012][Linear move is blocked because it requires a reorientation of 180 degrees of the end- effector - Command: ‘…’.] |
The |
[1013][Activation failed.] |
Activation failed (for example, because the SWStop is active). |
[1014][Homing failed.] |
Homing procedure failed. Try again. |
[1016][Destination pose out of reach for any configuration. - Command: ‘…’]
[1016][Destination pose out of reach for selected conf(…,…,… turn …). - Command: ‘…’]
[1016][The requested linear move is not possible due to a pose out of reach along the path. - Command: ‘…’]
|
The pose requested in the |
[1022][Robot was not saving the program.] |
The |
[1023][Ignoring command for offline mode. - Command: ‘…’] |
The command cannot be executed in the offline program. |
[1024][Mastering needed. - Command: ‘…’] |
Mastering was lost. Contact Mecademic. |
[1025][Impossible to reset the error. Please, power-cycle the robot.] |
Deactivate and reactivate the robot, in order to reset the error. |
[1026][Deactivation needed to execute the command. - Command: ‘…’] |
The robot must be deactivated in order to execute this command. |
[1027][Simulation mode can only be enabled/ disabled while the robot is deactivated.] |
The robot must be deactivated in order to execute this command. |
[1029][Offline program full. Maximum program size is 13,000 commands. Saving stopped.] |
The program saving was interrupted because the limit of 13,000 commands was reached. |
[1030][Already saving.] |
The robot is already saving a program. Wait until finished to save another program. |
[1031][Program saving aborted after receiving illegal command. - Command: ‘…’] |
The command cannot be executed because the robot is currently saving a program. |
[1033][Start conf mismatch] |
Requested move blocked because start robot position is not in the requested configuration. |
[1038][No gripper connected.] |
Available only on the Meca500. |
[1040][Command failed.] |
General error for various commands. |
[1041][No Vbox] |
Available only on the Meca500 |
[1042][Ext tool sim must deactivated] |
Switching external tool type is only possible when the robot is deactivated. |
[1043][The specified IO bank is not present on this robot] |
The argument for the I/O bank ID is different than 1.` |
[1044][There is no vacuum module present on this robot.] |
No MVK01 vacuum and I/O module present or simulated, but a command such as
|
[1550][…] |
Variables could not be listed with |
[1551][…] |
The variable could not be retrieved with |
[1552][…] |
The variable creation failed with |
[1553][…] |
The variable deletion failed with |
[1554][…] |
The variable modification failed with |
[3001][Another user is already connected, closing connection.] |
Another user is already connected to the robot. The robot disconnects from the user immediately after sending this message. |
[3002][A firmware upgrade is in progress (connection refused).] |
The firmware of the robot is being updated. |
[3003][Command has reached the maximum length.] |
Too many characters before the NULL character. Possibly caused by a missing NULL character |
[3005][Error of motion.] |
Motion error. Possibly caused by a collision or overload. Correct the situation
and send the |
[3006][Error of communication with drives] |
This error cannot be reset. The robot needs to be rebooted to recover from this error. |
[3009][Robot initialization failed due to an internal error. Restart the robot.] |
Error in robot startup procedure. Contact our technical support team if restarting the robot did not resolve the issue. |
[3014][Problem with saved program, save a new program.] |
There was a problem saving the program. |
[3017][No offline program saved.] |
There is no program in memory. |
[3020][Offline program … is invalid] |
There was a problem starting a particular program with |
[3025][Gripper error.] |
This command is available only on the Meca500. |
[3026][Robot’s maintenance check has discovered a problem. Mecademic cannot guarantee correct movements. Please contact Mecademic.] |
A hardware problem was detected. Contact our technical support team. |
[3027][Internal error occurred.] |
In case of internal, software error. |
[3029][Excessive torque error occurred] |
Excessive motor torque was detected. |
[3031][A previously received text API command was incorrect.] |
When using EtherNet/IP, this code (received in the input tag assembly only) indicates that the last command sent by TCP/IP was invalid. |
[3037][Pneumatic module error] |
A communication error with the pneumatic module was detected. Contact our technical support team. |
[3039][External tool firmware must be updated.] |
Activation has failed, because the robot has detected that the firmware of the EOAT is older than the firmware of the robot. |
[3041][Robot error due to imminent collision.] |
Sent when robot is in error due to imminent collision detected while severity is configured to generate an error. |
[3042][Detected failure in previous firmware update. Please re-install the firmware again.] |
An error was detected during the firmware update. Try to reinstall software. |
[3043][Excessive communication errors with external tool.] |
Too many communication errors were detected between the I/O port and the EOAT connected to that port. This may mean that the cable is damaged and needs to be replaced or that it is not screwed tightly enough on either side. There may also be a hardware problem with the I/O port. |
[3044][Abnormal communication error with external port.] |
Detected internal communication errors with the robot’s I/O port. Please contact Mecademic support for further diagnostic. |
[3045][Imminent collision detected, robot will decelerate now.] |
Sent when the robot is in error due to the detection of an imminent collision while severity is configured to Pause or Clear Motion. |
[3046][Power-supply detected a non-resettable power error. Please check power connection then power-cycle the robot] |
Try to power-cycle the robot. |
[3047][Robot failed to mount drive. Please try to power-cycle the robot. If the problem persists contact Mecademic support.] |
Robot has unexpectedly booted in safe mode. Try to power-cycle the robot. |
[3049][Robot error at work zone limit] |
Sent when robot is in error due to imminent work zone breach while severity is configured to generate an error. |
[3050][A power lost error was detected, robot is going to shutdown] |
Power has been lost and the robot is shutting down. |
3.2.2. Command responses#
The following provides a summary of all possible non-error responses to commands
sent via the control port. Some of these responses are also transmitted on
the monitoring port, as discussed in the next section. Note that motion commands do not
generate any non-error responses, except for the optional EOB and EOM messages and any
messages generated by the SetCheckpoint command.
Response code |
Command |
|---|---|
[2000][Motors activated.] |
|
[2002][Homing done.] |
|
[2004][Motors deactivated.] |
|
[2005][The error was reset.]
[2006][There was no error to reset.]
|
|
[2007][as, hs, sm, es, pm, eob, eom] |
|
[2013][x, y, z , γ] |
|
[2014][x, y, z , γ] |
|
[2015][p] |
|
[2028][e] |
|
[2029][ce] |
|
[2031][e] |
|
[2036][cₜ] |
|
[2042][Motion paused.] |
|
[2043][Motion resumed.] |
|
[2044][The motion was cleared.] |
|
[2045][The simulation mode is enabled.] |
|
[2046][The simulation mode is disabled.] |
|
[2047][External tool simulation mode has changed.] |
|
[2049][Robot is in recovery mode]
[2050][Robot is not in recovery mode]
|
|
[2051][Joint velocity/acceleration … will be limited to … due to recovery mode] |
|
[2052][End of movement is enabled.]
[2053][End of movement is disabled.]
|
|
[2054][End of block is enabled.]
[2055][End of block is disabled.]
|
|
[2056][bid, e] |
|
[2056][bid, e] |
|
[2060][Start saving program.] |
|
[2061][n commands saved.] |
|
[2063][Offline program n started.] |
|
[2064][Offline program looping is enabled.]
[2065][Offline program looping is disabled.]
|
|
[2080][n] |
|
[2081][vx.x.x] |
|
[2085][Command successful. …] |
Response to various instantaneous commands |
[2088][vx.x.x] |
|
[2083][robot’s serial number] |
|
[2084][MCS500] |
|
[2086][vx.x.x] |
|
[2090][n, θn,min, θn,max] |
|
[2092][n] |
|
[2093][User-defined joint limits enabled.]
[2093][User-defined joint limits disabled.]
|
|
[2094][e] |
|
[2095][s] |
|
[2096][Monitoring on control port enabled/disabled] |
|
[2097][n] |
|
[2113][q1, q2, q3…] |
|
[2116][t] |
|
[2117][n1, n2, …] |
|
[2119][n1, n2, n3, n4, n5, n6] |
|
[2122][e] |
|
[2140][t] |
|
[2149][n] |
|
[2150][p] |
|
[2151][t] |
|
[2152][p] |
|
[2153][p] |
|
[2154][v] |
|
[2155][ω] |
|
[2156][n] |
|
[2157][n] |
|
[2158][p] |
|
[2159][p] |
|
[2160][l, m] |
|
[2161][τ1, τ2, τ3, τ4 ] |
|
[2162][dclosed, dopen] |
|
[2163][l, m] |
|
[2164][Workspace configuration set successfully.] |
|
[2165][xmin, ymin, zmin, xmax, ymax, zmax] |
|
[2166] [Workspace limits set successfully.] |
|
[2167][x, y, z, r] |
|
[2168][Tool sphere set successfully.] |
|
[2169][p] |
|
[2172][ph, pr] |
|
[2173][tp] |
|
[2174][hstart, hend, hmin, hmax] |
|
[2175][vstart, pstart, vend, pend] |
|
[2176][m] |
|
[2177][l] |
|
[2178][PStop2 configuration set successfully] |
|
[2179][l] |
|
[2181][l] |
|
[2182][v, g1, oid,1, g2, oid,2] |
|
[2183][v, g, oid] |
|
[2189][m] |
|
[2190][s] |
|
[2191][t] |
|
[2192][t] |
|
[2200][t, θ1, θ2, d3, θ4] |
|
[2201][t, x, y, z, γ] |
|
[2202][t, ω1, ω2, v3, ω4] |
|
[2203][t, τ1, τ2, τ3, τ4] |
|
[2204][t, ẋ, ẏ, ż, ωz] |
|
[2208][t, ce] |
|
[2209][t, ct] |
|
[2210][t, θ1, θ2, d3, θ4] |
|
[2211][t, x, y, z, γ] |
|
[2212][t, ω1, ω2, v3, ω4] |
|
[2213][t, τ1, τ2, τ3, τ4] |
|
[2214][t, ẋ, ẏ, ż, ωz] |
|
[2218][t, ce] |
|
[2219][t, ct] |
|
[2220][t, n, ax, ay, az] |
|
[2228][t, x, y, z, γ] |
|
[2229][t, x, y, z, γ] |
|
[2250][t, τbaseboard, τpsu, τsafe-mcu, τ1, τ2, τ3, τ4] |
|
[2251][t, I2t1, I2t2, I2t3, I2t4] |
|
[2300][t, simType, phyType, hs, es, oh] |
|
[2310][t, v1, v2] |
|
[2320][t, hp, dr, gc, go] |
|
[2321][t, p] |
|
[2322][t, d] |
|
[2330][t, bid, present, simMode, errorCode] |
|
[2340][t, bid, p1, p2, p3, p4, p5, p6, p7, p8] |
|
[2341][t, bid, p1, p2, p3, p4, p5, p6, p7, p8] |
|
[2342][t, v, h, p] |
|
[2343][t, p] |
|
[3000][Connected to … x_x_x.x.x.] |
Confirms connection to robot. |
[3000][Connected to … x_x_x.x.x.] |
Confirms connection to robot. Sent only at initial connection. |
[3004][End of movement.] |
The robot has stopped moving. |
[3012][End of block.] |
No motion command in queue and robot joints do not move. |
[3013][End of offline program.] |
The offline program has finished. |
[3028][s] |
A torque limit was exceeded. |
[3030][n] |
Checkpoint n was reached. |
[3032][2/1/0] |
A P-Stop 2 is active (1), is no longer active but needs to be reset (2) or is already cleared (0). |
[3035][TCP dump capture started for x seconds] |
Sent to indicate that the requested TCP dump capture has started and confirms the maximum duration of x seconds. |
[3036][TCP dump capture stopped] |
Sent after a previously started TCP dump capture has finished. |
[3040][n] |
Checkpoint n is discarded before reaching it, because motion was cleared. |
[3051][Move duration too short: … is too short. Fastest possible … Command: …] |
Sent by the robot if in time-based move mode, requested duration impossible to
meet, and severity was set to 4 with |
[3069][0/1/2] |
Response to |
[3070][0/1/2] |
Response to |
[3080][0/1/2] |
Response to |
[3081][0/1/2] |
Response to |
[3082][0/1/2] |
Response to |
[3083][0/2] |
Response to |
[3084][0/1] |
Response to |
[3085][0/2] |
Response to |
[3086][0/1/2] |
Response to |
[3087][0/1/2] |
Response to |
3.2.3. Monitoring port messages#
Mecademic robots are configured to send immediate feedback over TCP port 10001, also known as the monitoring port. Several types of messages are transmitted via this port, as shown in Table 3.
Most messages related to state changes are sent either as soon as the state changes or upon establishing a connection. These messages are marked with a tick in the “chg” column of Table 3.
Some messages are sent periodically (every 15 ms or as defined by the
SetMonitoringInterval command) and are marked with a tick in the “prd” column
of Table 3.
Other messages, which are neither state-related nor periodic, are sent as appropriate when specific conditions occur on the robot. Some of these messages are also sent upon connection.
Additionally, note that some messages are optional and will not be sent by default
unless explicitly enabled using the SetRealTimeMonitoring command. Optional
messages are marked with a tick in the “opt” column of
Table 3.
chg |
opt |
prd |
Message |
Description |
|---|---|---|---|---|
✓ |
[2007][as, hs, sm, es, pm, eob, eom] |
Same as response of |
||
✓ |
[2015][p] |
Same as response of |
||
✓ |
[2026][θ1, θ2, d3, θ4] |
The same as the response of the legacy command |
||
✓ |
[2027][x, y, z , γ] |
The same as the response of the legacy command |
||
[2044][The motion was cleared.] |
Same as response of |
|||
✓ |
[2049][Robot is in recovery mode] |
Same as response of |
||
✓ |
[2050][Robot is not in recovery mode] |
Same as response of |
||
[2051][Joint velocity/acceleration … will be limited to … due to recovery mode] |
Response when requested velocity/acceleration is limited due to recovery mode |
|||
✓ |
[2079][ge, hs, hp, lr, es, oh] |
Same as response to legacy |
||
✓ |
[2082][vx.x.x.xxxxx] |
Complete firmware version of robot |
||
✓ |
[2086][vx.x.x] |
External firmware version |
||
✓ |
[2095][s] |
Same as response of |
||
✓ |
[2163][l, m] |
Same as response of |
||
✓ |
[2165][xmin, ymin, zmin, xmax, ymax, zmax] |
Same as response of |
||
✓ |
[2167][x, y, z, r] |
Same as response of |
||
✓ |
[2181][l] |
Same as response of |
||
✓ |
[2182][v, g1, oid,1, g2, oid,2] |
Same as response of |
||
✓ |
[2183][v, g, oid] |
Same as response of |
||
✓ |
[2189][m] |
Same as response of |
||
✓ |
✓ |
[2200][t, θ1, θ2, d3 θ4] |
Same as response of |
|
✓ |
✓ |
[2201][t, x, y, z, γ] |
Same as response of |
|
✓ |
✓ |
[2202][t, ω1, ω2, v3, ω4] |
Same as response of |
|
✓ |
✓ |
[2203][t, τ1, τ2, τ3, τ4] |
Same as response of |
|
✓ |
✓ |
[2204][t, ẋ, ẏ, ż, ωz] |
Same as response of |
|
✓ |
[2208][t, ce] |
Same as response of |
||
✓ |
[2209][t, ct] |
Same as response of |
||
✓ |
✓ |
[2210][t, θ1, θ2, d3, θ4] |
Same as response of |
|
✓ |
✓ |
[2211][t, x, y, z, , γ] |
Same as response of |
|
✓ |
✓ |
[2212][t, ω1, ω2, v3, ω4] |
Same as response of |
|
✓ |
✓ |
[2213][t, τ1, τ2, τ3, τ4] |
Same as response of |
|
✓ |
✓ |
[2214][t, ẋ, ẏ, ż, ωz] |
Same as response of |
|
✓ |
✓ |
[2218][t, ce] |
Same as response of |
|
✓ |
✓ |
[2219][t, ct] |
Same as response of |
|
✓ |
✓ |
[2220][t, n, ax, ay, az] |
Same as response of |
|
✓ |
[2226][t,hardDecel,linDistance,angDistance] |
When starting or finishing hard deceleration |
||
✓ |
[2227][t,n] |
When latest checkpoint reached changes |
||
✓ |
✓ |
[2228][t, x, y, z, γ] |
Same as response of |
|
✓ |
✓ |
[2229][t, x, y, z, γ] |
Same as response of |
|
✓ |
✓ |
[2250][t, τbaseboard, τpsu, τsafe-mcu, τ1, τ2, τ3, τ4] |
Same as response of |
|
✓ |
✓ |
[2251][t, I2t1, I2t2, I2t3, I2t4] |
Same as response of |
|
✓ |
[2230][t] |
End of cycle indication (all data for current cycle has been sent) |
||
✓ |
[2300][t, simType, phyType, hs, es, oh] |
Same as response of |
||
✓ |
[2310][t, v1, v2] |
Same as response of |
||
✓ |
[2320][t, hp, dr, gc, go] |
Same as response of |
||
✓ |
✓ |
[2321][t,p] |
Same as response of |
|
✓ |
✓ |
[2322][t, p] |
Same as response of |
|
✓ |
[2330][t, bid, present, simMode, errorCode] |
Same as response of |
||
✓ |
[2340][t, bid, p1, p2, p3, p4, p5, p6, p7, p8] |
Same as response of |
||
✓ |
[2341][t, bid, p1, p2, p3, p4, p5, p6, p7, p8] |
Same as response of |
||
✓ |
[2342][t, v, h, p] |
Same as response of |
||
✓ |
✓ |
[2343][t, p] |
Same as response of |
|
✓ |
[3000][Connected to … x_x_x.x.x.] |
Confirms connection to robot |
||
✓ |
[3028][s] |
Torque limit exceeded status |
||
✓ |
[3032][2/1/0] |
Response to a change in the state of the P-Stop 2 safety stop signal. |
||
✓ |
[3048][0/1, 0/1, …] |
Sent by the robot whenever a drive is near to or in overload. The first value corresponds to drive 1, and so on, and it is 1 if the drive is near or in overload, and zero otherwise. |
||
✓ |
[3069][0/1/2] |
Response to a change in the state of the P-Stop 1 safety stop signal |
||
✓ |
[3070][0/1/2] |
Response to a change in the state of the E-Stop safety stop signal |
||
✓ |
[3080][0/1/2] |
Response to a change in the state of the operation mode safety stop signal state |
||
✓ |
[3081][0/1/2] |
Response to a change in the state of the Enabling Device Released safety stop signal, when the robot is in manual mode |
||
✓ |
[3082][0/1/2] |
Occurs when supply voltage fluctuation is detected |
||
✓ |
[3083][0/2] |
Occurs after robot is rebooted, and after Reset button is pressed for the first time |
||
✓ |
[3084][0/1] |
Redundancy fault. Occurs if a safety signal mismatch is detected |
||
✓ |
[3085][0/2] |
Standstill fault. Occurs if robot moves while in pause mode |
||
✓ |
[3086][0/1/2] |
Response to a change in the connection drop safety signal change |
||
✓ |
[3087][0/1/2] |
Minor error (e.g., power supply reset button pressed too long). Motor voltage is removed and robot is deactivated. |
Note that multiple ASCII messages are separated by a single null-character and that there are no blank spaces in any of these messages. Here is an example of messages sent over TCP port 10001 in one interval (for clarity, the null-characters have been replaced by line breaks):
3.3. Management of errors and safety stops#
3.3.1. Errors detected by the robot#
The robot enters error mode when it encounters an issue while executing a
command (see Table 1) or due to a hardware problem (e.g., exceeding
a torque limit). When this occurs, the robot sets the value of es (error state) to 1 in
the response [2007][as, hs, sm, es, pm, eob, eom] of the GetStatusRobot.
This message can also be received over the monitoring port (see Section 3.2.3). Additionally, if you send other commands to the robot while it is in error mode, it will respond with the message [1011][The robot is in error.].
When the robot is in error mode, all pending motion commands are canceled (i.e., the
motion queue is cleared). The robot stops and ignores subsequent commands but responds
with the [1011][The robot is in error.] message until it receives a
ResetError command.
After the error is reset, the robot will execute all request commands and begin
accumulating motion commands in its motion queue. However, these motion commands will
only be executed once the ResumeMotion command is received by the robot.
3.3.2. P-Stop 2 and SWStop#
As soon as the externally wired P-Stop 2 is activated (see the robot’s user manual), the robot motion is immediately decelerated to a stop, and the response [3032][1] is sent by the robot. The motors and the EOAT remain active (i.e., the brakes are not applied) but stay immobilized until the stop is reset.
If a motion command is sent to the robot while the stop signal is still active (and the
robot is still activated and homed), the command will be ignored if the P-Stop 2 is
configured in “Clear motion” mode (SetPStop2Cfg). In this case, the message
[3032][1] will be sent again by the robot. However, if the P-Stop 2 is configured in
“Pause motion” mode, the commands will continue to be accepted (queued) even while the
robot is in a P-Stop 2 state.
Once the stop signal is removed, the message [3032][2] is returned. The P-Stop 2
condition is now ready to be reset using ResumeMotion. The robot will then
respond with the messages [2043][Motion resumed.] and [3032][0].
3.3.3. E-Stop and P-Stop 1#
When the E-Stop is activated, the robot decelerates to a full stop, power to the motors is cut, the brakes are applied, and the robot is deactivated. The robot then sends the message [3070][1], along with the messages [2044][The motion was cleared.] and [2004][Motors deactivated.].
To reactivate the motors, you must first clear the E-Stop condition, which will
produce the message [3070][2]. Then, press the RESET button or activate the
external Reset, which will produce the message [3070][0]. Afterward, you need to
re-activate the robot with the ActivateRobot command.
The robot can differentiate between the Emergency Stop function signal and the P-Stop 1. When the P-Stop 1 signal is activated and the robot is in automatic mode, the robot decelerates to a full stop, power to the motors and the vacuum generator of the MVK01 is cut, the brakes are applied, and the robot is deactivated. The robot then sends the message [3069][1], along with the messages [2044][The motion was cleared.] and [2004][Motors deactivated.].
To reactivate the motors (and the I/O and vacuum module), you must first clear the
P-Stop 1 condition, which will produce the message [3069][2]. Then, press the RESET
button or activate the external Reset, which will produce the message [3069][0].
Afterward, you need to re-activate the robot with the ActivateRobot
command.
3.3.4. Enabling device#
When the operation mode switch is turned to the “Manual Mode” position, the robot monitors the position of the enabling device. Whenever the enabling device is not pressed halfway, the safety signal [3081][1] is sent, and the robot motion is paused.
To move the robot, you must press the enabling device halfway (or release and press it
halfway again), which will produce the message [3081][2]. At this point, using the
ResumeMotion command is allowed, and it will produce the messages
[3081][0] and [2043][Motion resumed.].
3.3.5. Operation mode switch#
When the robot is powered, any change in the operation mode switch position causes the robot to decelerate to a full stop and removes power from the robot motors. If the switch is set to “Locked,” the message [3080][1] is sent. If the switch is set to “Automatic” or “Manual,” the message [3080][2] is sent. You must then press the Reset button on the power supply (or the external reset button), which will produce the message [3080][0].
To activate the robot after switching to “Manual” mode, in addition to pressing the
Reset button, the enabling device must be pressed halfway (or released and pressed
halfway again). Once this is done, the robot can be activated using the
ActivateRobot command.
3.3.6. Communication drop#
For safety reasons, the robot continuously supervises the TCP connection. If the robot detects that the TCP connection has dropped while it is moving, it will immediately stop the motion and send the message [3081][1].
If the connection watchdog is enabled and the robot does not receive a
ConnectionWatchdog message before the established timeout, the robot will
drop the TCP connection and raise the safety signal [3081][1], regardless of whether the
robot is moving or not.
Once a new TCP/IP connection is established, the robot will send the message [3081][2].
Afterward, you must send the ResumeMotion command, to which the robot will
respond with the message [3081][0].
3.3.7. Supply voltage fluctuation#
If the robot detects a short supply voltage fluctuation, it will generate the signal [3082][1], decelerate to a full stop, remove power from its motors, and then send the message [3082][2]. You must press the Reset button on the power supply (or the external reset button), which will cause the robot to send the message [3082][0].
If the supply voltage fluctuations are more significant or prolonged, the robot will shut itself off and attempt to reboot a few seconds later.
3.3.8. Robot reboot#
After a reboot, the robot motors are not powered, and the message [3083][2] is sent. Once the Reset button is pressed, the message [3083][0] is sent, and the robot motors are powered.
3.3.9. Redundancy fault#
If a redundant safety signal mismatch is detected for more than 1 second, the robot will immediately decelerate to a full stop, remove power from its motors, and send the message [3084][1].
Redundant safety signals include the E-Stop, the P-Stop 1, the P-Stop 2, and the three-position enabling device.
3.3.10. Standstill fault#
If the robot is supposed to be in pause mode but moves, the message [3085][1] is sent, power to the motors is removed, and once the robot comes to a complete stop, the message [3085][2] is sent.
Once the Reset button is pressed, the message [3085][0] is sent.
3.3.11. Minor error#
Certain minor errors unrelated to safety signals can result in the removal of power from the motors and the sending of the message [3087][1]. These include prolonged reset signals and some drive errors. The exact cause of these minor errors can be found in the robot logs.
Once the error source is resolved, the message [3087][2] is sent. Afterward, following a reset, the message [3087][0] is sent.