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()
Home()
SetJointVel(50)
MoveJoints(10,20,-10,0,0,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:

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.1.6. Performance recommendations#

The Meca500 robot has limited CPU capacity and may not handle extremely high rates of commands or monitoring events. If the CPU becomes overloaded, TCP connections may be dropped unexpectedly. To maintain stable communication when sending more than 250 commands per second continuously, follow these recommendations:

  • Prefix frequently sent commands with a dash (-) It makes the robot process the command silently, i.e., without recording it in the robot’s detailed event log or the MecaPortal event log to reduce CPU overhead.

  • Avoid very short monitoring intervals (see SetMonitoringInterval) unless necessary. Intervals of 2 ms or less should be used with caution.

  • Minimize the number of simultaneous monitoring connections unless necessary (e.g., multiple MecaPortal windows or monitoring-only applications), because each connection requires the robot to send an additional copy of all monitored data.

  • Enable user command logging (LogUserCommands) only when needed for debugging, as it adds CPU overhead.

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:

[4-digit code][text message OR comma-separated return values]

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.

Table 1 Error messages; sent on the control port only#

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 MoveJoints or MoveJointsRel command because at least one joint is either currently outside or will move beyond the user-defined limits.

[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 ResetError command is sent.

[1012][Linear move is blocked because it requires a reorientation of 180 degrees of the end- effector - Command: ‘…’.]

The MoveLin or MoveLinRel* command sent requires that the robot pass through a singularity that cannot be crossed or pass too close to a singularity with excessive joint rotations.

[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 MoveLin, MoveLinRel*, MovePose or MoveJump command is out of reach, with the desired (or with any) configurations. In the case of the MoveLin command, this error code is also produced if a pose along the path is out of reach.

[1022][Robot was not saving the program.]

The StopSaving command was sent, but the robot was not saving a program.

[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.]

The command that generated this error cannot be executed because no MEGP 25* gripper was detected

[1040][Command failed.]

General error for various commands.

[1041][No Vbox]

No pneumatic module connected.

[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]

Not available on the Meca500.

[1044][There is no vacuum module present on this robot.]

Not available on the Meca500.

[1550][…]

Variables could not be listed with ListVariables for the reason specified in the error message.

[1551][…]

The variable could not be retrieved with GetVariable for the reason specified in the error message.

[1552][…]

The variable creation failed with CreateVariable for the reason specified in the error message.

[1553][…]

The variable deletion failed with DeleteVariable for the reason specified in the error message.

[1554][…]

The variable modification failed with SetVariable for the reason specified in the error message.

[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 ResetError command. If the motion error persists, try power-cycling the robot.

[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 StartProgram.

[3025][Gripper error.]

If the gripper was forcing when this message appeared, overheating likely occurred. Let the gripper cool down for a few minutes and send the ResetError command. The gripper will stop applying a force; if it was holding a part, the part might fall.

[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]

Not available on the Meca500.

[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]

Not available on the Meca500.

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.

Table 2 Possible responses to commands, sent on the control port#

Response code

Command

[2000][Motors activated.]

ActivateRobot

[2002][Homing done.]

Home

[2004][Motors deactivated.]

DeactivateRobot

[2005][The error was reset.]
[2006][There was no error to reset.]

ResetError

[2007][as, hs, sm, es, pm, eob, eom]

GetStatusRobot

[2013][x, y, z , α, β, γ]

GetWrf

[2014][x, y, z , α, β, γ]

GetTrf

[2015][p]

SetTimeScaling, GetTimeScaling

[2028][e]

GetAutoConf

[2029][cs, ce, cw]

GetConf

[2031][e]

GetAutoConfTurn

[2036][cₜ]

GetConfTurn

[2042][Motion paused.]

PauseMotion

[2043][Motion resumed.]

ResumeMotion

[2044][The motion was cleared.]

ClearMotion

[2045][The simulation mode is enabled.]

ActivateSim

[2046][The simulation mode is disabled.]

DeactivateSim

[2047][External tool simulation mode has changed.]

SetExtToolSim

[2049][Robot is in recovery mode]
[2050][Robot is not in recovery mode]

SetRecoveryMode

[2051][Joint velocity/acceleration … will be limited to … due to recovery mode]

MoveJointsVel, MoveLinVelTrf, SetCartAcc, MoveLinVelWrf, SetCartAngVel, SetCartAcc, SetJointAcc, SetJointVel

[2052][End of movement is enabled.]
[2053][End of movement is disabled.]

SetEom

[2054][End of block is enabled.]
[2055][End of block is disabled.]

SetEob

[2056][bid, e]

GetIoSim

[2056][bid, e]

SetIoSim

[2060][Start saving program.]

StartSaving

[2061][n commands saved.]

StopSaving

[2063][Offline program n started.]

StartProgram

[2064][Offline program looping is enabled.]
[2065][Offline program looping is disabled.]

StopSaving

[2080][n]

GetCmdPendingCount

[2081][vx.x.x]

GetFwVersion

[2085][Command successful. …]

Response to various instantaneous commands

[2088][vx.x.x]

GetExtToolFwVersion

[2083][robot’s serial number]

GetRobotSerial

[2084][Meca500]

GetProductType

[2086][vx.x.x]

GetExtToolFwVersion

[2090][n, θn,min, θn,max]

GetJointLimits

[2092][n]

SetJointLimits

[2093][User-defined joint limits enabled.]
[2093][User-defined joint limits disabled.]

SetJointLimitsCfg

[2094][e]

GetJointLimitsCfg

[2095][s]

GetRobotName

[2096][Monitoring on control port enabled/disabled]

SetCtrlPortMonitoring

[2097][n]

SyncCmdQueue

[2113][q1, q2, q3…]

GetModelJointLimits

[2116][t]

GetMonitoringInterval

[2117][n1, n2, …]

GetRealTimeMonitoring, SetRealTimeMonitoring

[2119][n1, n2, n3, n4, n5, n6]

GetNetworkOptions

[2122][e]

GetRecoveryMode

[2140][t]

GetRtc

[2149][n]

GetCheckpointDiscarded

[2150][p]

GetBlending

[2151][t]

GetVelTimeout

[2152][p]

GetJointVel

[2153][p]

GetJointAcc

[2154][v]

GetCartLinVel

[2155][ω]

GetCartAngVel

[2156][n]

GetCartAcc

[2157][n]

GetCheckpoint

[2158][p]

GetGripperForce

[2159][p]

GetGripperVel

[2160][l, m]

GetTorqueLimitsCfg

[2161][τ1, τ2, τ3, τ4 , τ5, τ6]

GetTorqueLimits

[2162][dclosed, dopen]

GetGripperForce

[2163][l, m]

GetWorkZoneCfg

[2164][Workspace configuration set successfully.]

SetWorkZoneCfg

[2165][xmin, ymin, zmin, xmax, ymax, zmax]

GetWorkZoneLimits

[2166] [Workspace limits set successfully.]

SetWorkZoneLimits

[2167][x, y, z, r]

GetToolSphere

[2168][Tool sphere set successfully.]

SetToolSphere

[2169][p]

GetJointVelLimit

[2172][ph, pr]

GetVacuumThreshold

[2173][tp]

GetVacuumPurgeDuration

[2174][hstart, hend, hmin, hmax]

GetMoveJumpHeight

[2175][vstart, pstart, vend, pend]

GetMoveJumpApproachVel

[2176][m]

GetOperationMode

[2177][l]

ConnectionWatchdog

[2178][PStop2 configuration set successfully]

SetPStop2Cfg

[2179][l]

GetPStop2Cfg

[2181][l]

GetCollisionCfg

[2182][v, g1, oid,1, g2, oid,2]

GetCollisionStatus

[2183][v, g, oid]

GetWorkZoneStatus

[2189][m]

GetMoveMode

[2190][s]

GetMoveDurationCfg

[2191][t]

GetMoveDuration

[2192][t]

GetPayload

[2200][t, θ1, θ2, θ3, θ4, θ5, θ6]

GetRtTargetJointPos

[2201][t, x, y, z, α, β, γ]

GetRtTargetCartPos

[2202][t, ω1, ω2, ω3, ω4, ω5, ω6]

GetRtTargetJointVel

[2203][t, τ1, τ2, τ3, τ4, τ5, τ6]

GetRtTargetJointTorq

[2204][t, ẋ, ẏ, ż, ωx, ωy, ωz]

GetRtTargetCartVel

[2208][t, cs, ce, cw]

GetRtTargetConf

[2209][t, ct]

GetRtTargetConfTurn

[2210][t, θ1, θ2, θ3, θ4, θ5, θ6]

GetRtJointPos

[2211][t, x, y, z, α, β, γ]

GetRtCartPos

[2212][t, ω1, ω2, ω3, ω4, ω5, ω6]

GetRtJointVel

[2213][t, τ1, τ2, τ3, τ4, τ5, τ6]

GetRtJointTorq

[2214][t, ẋ, ẏ, ż, ωx, ωy ωz]

GetRtCartVel

[2218][t, cs, ce, cw]

GetRtConf

[2219][t, ct]

GetRtConfTurn

[2220][t, n, ax, ay, az]

GetRtAccelerometer

[2228][t, x, y, z, α, β, γ]

GetRtWrf

[2229][t, x, y, z, α, β, γ]

GetRtTrf

[2250][t, τbaseboard, τpsu, τsafe-mcu, τ1, τ2, τ3, τ4, τ5, τ6]

GetRtTemperature

[2251][t, I2t1, I2t2, I2t3, I2t4, I2t5, I2t6]

GetRtI2t

[2300][t, simType, phyType, hs, es, oh]

GetRtExtToolStatus

[2310][t, v1, v2]

GetRtValveState

[2320][t, hp, dr, gc, go]

GetRtGripperState

[2321][t, p]

GetRtGripperForce

[2322][t, d]

GetRtGripperPos

[2330][t, bid, present, simMode, errorCode]

GetRtIoStatus

[2340][t, bid, p1, p2, p3, p4, p5, p6, p7, p8]

GetRtOutputState

[2341][t, bid, p1, p2, p3, p4, p5, p6, p7, p8]

GetRtInputState

[2342][t, v, h, p]

GetRtVacuumState

[2343][t, p]

GetRtVacuumPressure

[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 SetMoveDurationCfg.

[3069][0/1/2]

Response to GetSafetyStopStatus(3069).

[3070][0/1/2]

Not available on the Meca500.

[3080][0/1/2]

Not available on the Meca500.

[3081][0/1/2]

Not available on the Meca500.

[3082][0/1/2]

Response to GetSafetyStopStatus(3082).

[3083][0/2]

Response to GetSafetyStopStatus(3083).

[3084][0/1]

Response to GetSafetyStopStatus(3084).

[3085][0/2]

Response to GetSafetyStopStatus(3085).

[3086][0/1/2]

Response to GetSafetyStopStatus(3086).

[3087][0/1/2]

Response to GetSafetyStopStatus(3087).

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.

Table 3 Monitoring port messages#

chg

opt

prd

Message

Description

[2007][as, hs, sm, es, pm, eob, eom]

Same as response of GetStatusRobot

[2015][p]

Same as response of GetTimeScaling

[2026][θ1, θ2, θ3, θ4, θ5, θ6]

The same as the response of the legacy command GetJoints

[2027][x, y, z , α, β, γ]

The same as the response of the legacy command GetPose

[2044][The motion was cleared.]

Same as response of ClearMotion

[2049][Robot is in recovery mode]

Same as response of SetRecoveryMode

[2050][Robot is not in recovery mode]

Same as response of SetRecoveryMode

[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 GetStatusGripper

[2082][vx.x.x.xxxxx]

Complete firmware version of robot

[2086][vx.x.x]

External firmware version

[2095][s]

Same as response of GetRobotName

[2163][l, m]

Same as response of GetWorkZoneCfg

[2165][xmin, ymin, zmin, xmax, ymax, zmax]

Same as response of GetWorkZoneLimits

[2167][x, y, z, r]

Same as response of GetToolSphere

[2181][l]

Same as response of GetCollisionCfg

[2182][v, g1, oid,1, g2, oid,2]

Same as response of GetCollisionStatus

[2183][v, g, oid]

Same as response of GetWorkZoneStatus

[2189][m]

Same as response of GetMoveMode

[2200][t, θ1, θ2, θ3 θ4, θ5, θ6]

Same as response of GetRtTargetJointPos

[2201][t, x, y, z, α , β, γ]

Same as response of GetRtTargetCartPos

[2202][t, ω1, ω2, ω3, ω4, ω5, ω6]

Same as response of GetRtTargetJointVel

[2203][t, τ1, τ2, τ3, τ4, τ5, τ6]

Same as response of GetRtTargetJointTorq

[2204][t, ẋ, ẏ, ż, ωx, ωy, ωz]

Same as response of GetRtTargetCartVel

[2208][t, cs, ce, cw]

Same as response of GetRtTargetConf

[2209][t, ct]

Same as response of GetRtTargetConfTurn

[2210][t, θ1, θ2, θ3, θ4, θ5, θ6]

Same as response of GetRtJointPos

[2211][t, x, y, z, α, β, γ]

Same as response of GetRtCartPos

[2212][t, ω1, ω2, ω3, ω4, ω5, ω6]

Same as response of GetRtJointVel

[2213][t, τ1, τ2, τ3, τ4, τ5, τ6]

Same as response of GetRtJointTorq

[2214][t, ẋ, ẏ, ż, ωx, ωy ωz]

Same as response of GetRtCartVel

[2218][t, cs, ce, cw]

Same as response of GetRtConf

[2219][t, ct]

Same as response of GetRtConfTurn

[2220][t, n, ax, ay, az]

Same as response of GetRtAccelerometer

[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 GetRtWrf

[2229][t, x, y, z, α, β, γ]

Same as response of GetRtTrf

[2250][t, τbaseboard, τpsu, τsafe-mcu, τ1, τ2, τ3, τ4, τ5, τ6]

Same as response of GetRtTemperature

[2251][t, I2t1, I2t2, I2t3, I2t4, I2t5, I2t6]

Same as response of GetRtI2t

[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 GetRtExtToolStatus

[2310][t, v1, v2]

Same as response of GetRtValveState

[2320][t, hp, dr, gc, go]

Same as response of GetRtGripperState

[2321][t,p]

Same as response of GetRtGripperForce

[2322][t, p]

Same as response of GetRtGripperPos

[2330][t, bid, present, simMode, errorCode]

Same as response of GetRtIoStatus

[2340][t, bid, p1, p2, p3, p4, p5, p6, p7, p8]

Same as response of GetRtOutputState

[2341][t, bid, p1, p2, p3, p4, p5, p6, p7, p8]

Same as response of GetRtInputState

[2342][t, v, h, p]

Same as response of GetRtVacuumState

[2343][t, p]

Same as response of GetRtVacuumPressure

[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]

n/a

[3070][0/1/2]

Response to a change in the state of the E-Stop safety stop signal

[3080][0/1/2]

n/a

[3081][0/1/2]

n/a

[3082][0/1/2]

n/a

[3083][0/2]

Occurs after robot is rebooted, and after Reset button is pressed for the first time

[3084][0/1]

n/a

[3085][0/2]

n/a

[3086][0/1/2]

Response to a change in the connection drop safety signal change

[3087][0/1/2]

n/a

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):

[2026][-102.6011,-0.0000,-78.9239,-0.0000,15.7848,110.3150]
[2027][-3.7936,-16.9703,457.5125,26.3019,-5.6569,9.0367]
[2230][58675156984]

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 SWStop 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#

Currently, the Meca500 cannot differentiate between the E-STOP button on the power supply, an externally wired E-Stop (pins E-Stop on the D-SUB connector), or an externally wired protective stop (pins P-Stop 1), as explained in the robot’s user manual.

In revision 3 of the Meca500, the E-Stop completely shuts down the robot. In revision 4, when the E-Stop is activated, the robot decelerates to a full stop, power to the motors and the EOAT connected to the robot 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 (and the EOAT), 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. If the Meca500 R4 was already homed, re-homing is not required, except if an MEGP 25* gripper was connected to the robot’s tool I/O port.

3.3.4. Enabling device#

The Meca500 is not designed for use with an enabling device.

3.3.5. Operation mode switch#

The Meca500 does not have an operation mode selector.

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#

This section does not apply to the Meca500.

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 and the P-Stop 1.

3.3.10. Standstill fault#

This section does not apply to the Meca500.

3.3.11. Minor error#

This section does not apply to the Meca500.