§8 xArm 850

Control, Communication and Programming Interfaces

How people and programs talk to the arm: Studio, the SDKs, ROS, Modbus and the controller's inputs and outputs.

Start Here

This section is about how people and other machines talk to the arm: the software, the network, the wires on the control box and the connector at the tool end, and how to choose between them. Read the short list below first, because one abbreviation here means something different from the rest of the site.

  • Studio, Python, C++, ROS

    UFACTORY's programming routes1

  • 16 + 16

    digital inputs and outputs on the control box23

  • 30 m

    longest I/O cable without a test of the run4

  • UFACTORY lists four ways to program the 850: UFACTORY Studio, Python, C++ and ROS1.
  • The lab uses the UFACTORY Studio desktop app, downloaded from UFACTORY and installed on the computer56. UFACTORY's manual also describes opening Studio in a web browser7.
  • In the cell, the arms are currently understood to be operated manually mainly through UFACTORY Studio8.
  • The control box has I/O for wiring in other equipment, such as relays, PLCs and emergency stop buttons9.
  • In this section "TCP" means the network protocol the arm and its controller use to talk to a computer10. It is not the Tool Center Point, the point on the tool that the arm positions, which Section 4 teaches11.

S2 in one line: S2 is the xArm 850 arm that picks up incoming material and moves it between receiving, staging and production1213.

Look Back

A question from earlier on, to keep it fresh. Skip it if you like; nothing depends on it.

q-s07-b-04Safety You pressed STOP in UFACTORY Studio. Is the arm now in the same state as after an emergency stop?
  1. Check option (a)

    Not this one. Studio's STOP is a software stop that leaves the arm's power on. The e-stop removes power from the arm.133134135

  2. Check option (b)

    Correct. Right. Studio's STOP leaves arm power on. Do not count a software stop as an e-stop.134129

q-s04-b-01 What is the TCP?
  1. Check option (a)

    Correct. Right. It is the Tool Center Point, the reference point the arm positions.11

  2. Check option (b)

    Not this one. The network address is the controller's IP address. Here TCP means Tool Center Point. The same three letters also name a network protocol, which Section 8 covers.221110

  3. Check option (c)

    Not this one. The base is where positions are measured from. The TCP is at the tool end.13611

Choose your depth

Four depths, one page. Switch at any time: every tier stays open to everyone. What the four tiers mean

1Beginner

How You Talk to the Arm

For: Anyone with no robotics background: a visitor, a new operator, a manager
Kind of task: Recognize and recall, with plain-language explanations and pictures

In this part you learn the ways a person or a machine can tell the arm what to do, how a computer reaches it over the network, and the one wiring rule you must never break. No programming background is needed.

Four Routes

  • UFACTORY lists four routes for programming the 850: UFACTORY Studio, Python, C++ and ROS1.
  • Studio is the graphical route. The other three are code: you write a program that sends commands to the arm1415.

UFACTORY Studio

  • Studio is a graphical application for controlling the arm. You use it to set parameters, to move the arm from the screen in Live Control, and to build motion programs from Blockly blocks14.
  • The lab uses the Studio desktop app: download it from UFACTORY and install it on your computer56.
  • To connect, enter the controller's IP address in the app's IP search field and click Connect Server16.
  • UFACTORY's manual also describes opening Studio in a web browser, at the controller's IP address followed by port 18333177. The lab uses the desktop app5.
  • Blockly lets you build a program by dragging and dropping blocks instead of writing code18.
  • No dedicated teach pendant for the 850 is documented. Teaching is done in Studio and by guiding the arm by hand19.

The Network

  • UFACTORY recommends connecting the control box straight to your computer with an Ethernet cable. A router or a network switch are the other options20.
  • A wireless link to the router is not recommended, because it adds delay and loses packets21.
  • The arm's default address is in the range 192.168.1.xxx, and your computer must be on the same network segment as the control box22.

Wires to Other Machines

Line drawings of the 850 control box with its front and back panels labeled: emergency stop, robot power, state, power switch, AC port, network port, LAN, robot 48V, enabling switch and IO.
The control box houses the arm's control system; its front panel carries the status lights and the emergency stop2324. Image: UFACTORY
  • Besides the network, the control box has its own inputs and outputs: 16 digital inputs, 16 digital outputs, and 2 analog inputs and 2 analog outputs2325.
  • They are for connecting equipment such as pneumatic relays, PLCs and emergency stop buttons9.
  • An example from the manual: an analog output can drive a conveyor belt's speed-control input26.

The Tool End Has Its Own Connector

  • At the tool end there is a 12-pin connector that supplies power and control signals to grippers and sensors27.

The Rule You Must Never Break

  • A safety signal, such as one from a door switch or an emergency stop button, must never be connected to a non-safety PLC. Doing so can defeat the safety stop and cause serious injury or death2829.
  • The control box has dedicated safety inputs for that job: an emergency stop input and a protective stop input30.

Check Yourself

Answer, then check. Each option has its own feedback, and nothing is scored.

q-s08-b-01 How does the lab open UFACTORY Studio for an 850?
  1. Check option (a)

    Correct. Right. The lab uses the desktop app, so download and install it before you connect. UFACTORY's manual also describes a browser route.516617

  2. Check option (b)

    Not this one. No dedicated teach pendant for the 850 is documented. The lab uses the Studio desktop app instead.195

  3. Check option (c)

    Not this one. UFACTORY recommends a direct Ethernet cable, and advises against a wireless link because of delay and packet loss.2021

q-s08-b-02 Which route lets you program the arm without writing code?
  1. Check option (a)

    Correct. Yes. Blockly programs are built by dragging and dropping blocks.18

  2. Check option (b)

    Not this one. Python is one of the code routes: you install the SDK and write a program.131

  3. Check option (c)

    Not this one. ROS is also a code route that UFACTORY lists, alongside Python and C++.132

q-s08-b-03Safety A door switch's safety signal needs to reach the arm. Can it go through the conveyor's ordinary PLC?
  1. Check option (a)

    Not this one. A safety signal must never be connected to a non-safety PLC. Doing so can defeat the safety stop and cause serious injury or death.2829

  2. Check option (b)

    Correct. Right. The control box has dedicated safety inputs, an emergency stop input and a protective stop input, for signals like this.282930

2Novice

The Routes, and What the I/O Can Do

For: Someone who will work near or with the cell: operator, trainee technician
Kind of task: Explain and sequence: put steps in order, match parts to their functions

In this part you see what each programming route offers, how the arm sits on the network, and what the control box and tool-end wiring can be set up to do. It is for someone who will work near the cell or connect a simple device to it.

What Each Route Offers

  • A Blockly program in Studio can be turned into Python code from the Blockly toolbar, so a block program can become the starting point for a code program33.
  • Studio also accepts Gcode programs. UFACTORY Gcode follows the RS-274 standard and is compatible with LinuxCNC Gcode34.
  • The Python SDK is installed from PyPI with pip install xarm-python-sdk, and it supports Python 3 only31.
  • In this cell, Python will be the primary coding method35.
  • UFACTORY publishes a C++ SDK for the 850 as well36.
  • For ROS, UFACTORY's ROS 2 package xarm_ros2 and its ROS 1 package xarm_ros both added the 850 on 2023-06-073237.

On the Network

  • Whichever route you use, the arm and its controller talk to the computer over Ethernet with UFACTORY's own private TCP protocol10.
  • Studio's Settings > My Device > Device Info page shows the arm's IP address, subnet mask, broadcast address and default gateway38.
  • After an IP reset, the control box's address is 192.168.1.11139.
  • The arm also carries a user Ethernet line inside it: an RJ45 port on the base is wired through the arm to an M8 4-pole Ethernet connector on the end flange, for example for a camera at the tool40.

What the Control Box Inputs and Outputs Can Be Set to Do

  • Each configurable input CI0-CI7 can be set as General Input, Stop Moving, Safeguard Reset, Offline Task, Manual Mode, Reduced Mode or Enable Robot. The general inputs DI0-DI7 support the same list except Stop Moving, Safeguard Reset and Reduced Mode41.
  • Outputs can be General Output, or they can report the arm's status to another machine: Motion Stopped, Robot Moving, Error, Warning, Collision, Manual Mode, Reduced Mode, Offline Task Running, Robot Enabled, and Emergency Stop is Pressed42.
  • An input set as Offline Task starts stored Blockly programs when it is triggered, so another machine can start a program with an I/O signal43.
  • An input set as Enable Robot enables the arm when it is triggered44.
  • An input your program reads must be set as General Input. An input configured for a function, such as Offline Task, must not be used in any program45.
  • Out of the box, the digital inputs read high, the digital outputs are low, and the analog outputs sit at 0 V46.
  • The analog inputs and outputs work from 0 to 10 V47.

Wiring It to Another Machine

  • To swap digital signals with another machine or a PLC, both sides need a common GND (0 V), and the other machine should use open-drain outputs48.
  • The I/O cable must not be longer than 30 m unless testing shows a longer cable works4.
  • The digital outputs have no current protection: going past their rating can damage them permanently49.
  • The I/O can run from the control box's internal 24 V supply, which is the default, or from an external 24 V supply when more current is needed50.
  • There is also one RS-485 port, and on it the arm can only be the master51.

The Tool-End Connector in Detail

  • The tool connector has 2 digital outputs, TO0 on pin 7 and TO1 on pin 852, and 2 digital inputs, TI0 on pin 9 and TI1 on pin 1053.
  • It also has 2 analog inputs on pins 11 and 12, and an RS-485 pair on pins 5 and 654.
  • It supplies 24 V at up to 1800 mA55.
  • A user button and an LED sit at the tool end. The button does nothing until you give it a job56.
  • A pogo-pin connector at the tool end follows the same electrical specifications as the 12-pin connector5727.
  • Studio's End Effector IO page shows the tool inputs and outputs live, refreshing at 5 Hz58.

The Simulated Arm Is Not a Separate Arm

  • Studio can switch to a simulated arm, but a real arm must still be connected. The real arm does not move, yet any settings you make in simulation apply to it59.
  • Studio also warns that in simulation mode the unlock-joint button still unlocks the real joints60.

Check Yourself

Answer, then check. Each option has its own feedback, and nothing is scored.

q-s08-n-01 The conveyor's controller must start a stored Blockly program by sending a signal to one of the control box inputs. Which function should that input have?
  1. Check option (a)

    Correct. Right. An Offline Task input starts stored Blockly programs when it is triggered.43

  2. Check option (b)

    Not this one. Enable Robot enables the arm when triggered. It does not start a program; Offline Task does.4443

  3. Check option (c)

    Not this one. General Input is for an input your own program reads. Starting stored programs from outside is the Offline Task function.4543

  4. Check option (d)

    Not this one. A Manual Mode input lets the arm be dragged freely by hand while the input stays low. It starts no program.61

q-s08-n-02 An input is configured as Offline Task. Can your Blockly program also read that input?
  1. Check option (a)

    Not this one. An input configured for a function, such as Offline Task, must not be used in any program.45

  2. Check option (b)

    Correct. Right. A function input must not be used in any program.45

  3. Check option (c)

    Not this one. Converting Blockly to Python changes nothing here: the rule covers any program, and the input must be General Input.4533

q-s08-n-03Safety You switch UFACTORY Studio to the simulated arm to try some new settings. What happens to the real arm?
  1. Check option (a)

    Not this one. The simulated arm still needs the real arm connected, and settings made in simulation apply to the real arm.59

  2. Check option (b)

    Correct. Right. Treat simulation mode as working on the real arm's settings.5960

  3. Check option (c)

    Not this one. The real arm does not move in simulation mode. The risk is that settings and joint unlocking still reach it.5960

3Intermediate

Electrical Detail and Error Handling

For: Someone who will set up, program or maintain the arm: technician, student engineer
Kind of task: Apply: work through written scenarios that need a decision (which mode, which setting, what to do about this error), with feedback on each choice

In this part you follow a Python command from your program to the arm, learn the electrical limits of the wiring, and learn to read the codes the arm sends back when something goes wrong. It is for someone who will set up, program or maintain the arm.

How a Python SDK Command Reaches the Arm

  1. Your program creates an XArmAPI object, imported from xarm.wrapper, and gives it the controller's IP address62.
  2. UFACTORY's start-up template then enables motion, sets the mode, for example mode 0 for position control, and sets the state to 0, after which the arm accepts motion commands636465.
  3. The SDK sends each command to the controller over Ethernet on TCP port 502, using UFACTORY's private protocol6610.
  4. In mode 0, set_position makes a straight-line move in the base coordinate system; pass wait=True if your program should wait until the move finishes6768.
  5. The call returns a code, and 0 means success69.
  • Units depend on the route. The Python SDK and Blockly use degrees for joint angles and for roll, pitch and yaw, while the raw protocol uses radians. Positions are in millimeters in all three70.
  • The SDK works in degrees because its is_radian setting is False unless you change it71.

Other Ports on the Same Controller

  • Besides UFACTORY's private TCP protocol, the controller accepts standard Modbus TCP commands on port 502 at its IP address, and that port cannot be changed72.
  • The Python SDK defines three automatic state-report ports on the controller: 30001 (normal), 30002 (rich) and 30003 (real-time)73.
  • The report on port 30003 is sent at 100 Hz, and the other two at 5 Hz. That is Inferred: the rates come from xArm-series documents, and no 850 document states them74.

Electrical Limits of the Control Box I/O

  • The internal 24 V I/O supply delivers 23-30 V at up to 1.8 A75. An external supply must give 20-30 V, and the input takes up to 3 A76.
  • The digital outputs are NPN open-collector outputs that pull the terminal to GND when on, rated at up to 100 mA77.
  • The digital inputs have a weak pull-up, so an input with nothing connected reads high. An input is ON at 0-5 V and OFF at 15-30 V78.
  • Configured input functions trigger on a low-level signal79.
  • Each analog output can source up to 20 mA80.
  • The analog I/O is not isolated from the control box, so the external device should share the control box's GND, and shielded or twisted-pair cable is recommended81.

Electrical Limits of the Tool I/O

  • Tool inputs work the other way round from the controller's: they have a pull-down, so an unconnected tool input reads low. Logic low is at most 1.0 V and logic high at least 1.6 V8278.
  • Tool digital outputs are NPN open-collector, rated at up to 100 mA sink current, with no current protection83.
  • Tool analog inputs are 12-bit and accept -0.5 to 3.3 V in voltage mode; a 4-20 mA current mode is also described84.
  • The tool's RS-485 device ID is 9. Standard Modbus RTU devices can be tested from the Studio page that the 850 manual calls Settings > Externals > Modbus RTU; the Studio manual, as read on 2026-10-13, heads that section RS-4858586.
  • That page's default baud rate is 2000000. Choosing an end effector in Studio sets its own default, for example 115200 for Robotiq grippers87.

When Something Goes Wrong

  • The controller does not push errors to you. An error or warning comes back in the reply to the next command you send88.
  • UFACTORY documents error codes in separate families: API return codes, controller warnings, controller errors, servo (joint) errors, and codes for accessories such as the gripper89.
  • Studio prefixes each code by family: C for control box errors (for example C31), S for joint servo errors (for example S23) and A for Python SDK codes (for example A-2)90.
  • API code -1 means the arm is not connected, and -2 means it is not ready91. Code 1 means there are uncleared errors, 2 uncleared warnings, and 9 that the state is not ready to move92.
  • The Python SDK's code list gives controller error 1 as the emergency stop button pushed, 2 as the control box emergency I/O triggered, and 3 as the three-state switch's emergency stop pressed; the Studio manual, as read on 2026-10-13, describes code 2 differently9394.
  • Error 22 is a self-collision, 23 a joint past its limit, and 24 speed over its limit95. The SDK lists error 31 as Collision Caused Abnormal Current96.
  • Error 35 means the arm reached its safety boundary, and 37 means abnormal movement in manual mode97.

The Simulation Flag Does Not Disconnect the Arm

  • The Python SDK has a set_simulation_robot flag. It is a register write sent to a live controller, not a separate simulator98.
  • So a program using it is still connected to the controller that drives the real arm. That is Inferred, and the SDK documentation does not say what the controller does while the flag is on99.
  • UFACTORY's developer manual tells developers to learn the user manual and Studio first, because programming the arm directly over the protocol carries more risk100.

Platforms

  • The current C++ SDK supports Linux and Windows, with macOS support in beta101.
  • xarm_ros2 keeps one branch per ROS 2 version. Its tested environments include Ubuntu 22.04 with ROS Humble and Ubuntu 24.04 with ROS Jazzy102.

Check Yourself

Answer, then check. Each option has its own feedback, and nothing is scored.

q-s08-i-01 A Python SDK call returns 9. What does that mean?

About:92

  1. Check option (a)

    Correct. Right. Code 1 would mean uncleared errors and 2 uncleared warnings.92

  2. Check option (b)

    Not this one. Not connected is API code -1, and -2 means not ready.91

  3. Check option (c)

    Not this one. Every SDK call returns a code, and success is 0, not 9.69

  4. Check option (d)

    Not this one. That is controller error 1, a different family from the API return codes.9389

q-s08-i-02 Nothing is connected to a control box digital input, or to a tool digital input. What does each one read?
  1. Check option (a)

    Not this one. The controller input reads high because of its weak pull-up, but the tool input has a pull-down and reads low.7882

  2. Check option (b)

    Correct. Right. The controller inputs have a weak pull-up and the tool inputs a pull-down.7882

  3. Check option (c)

    Not this one. Only the tool input reads low. The controller input has a weak pull-up, so it floats high.7882

  4. Check option (d)

    Not this one. It is the other way round: pull-up on the controller inputs, pull-down on the tool inputs.7882

q-s08-i-03Safety Your Python program turns on set_simulation_robot. Can someone now safely stand in the arm's working area?
  1. Check option (a)

    Not this one. The flag is a register write sent to a live controller, not a separate simulator. The program is still connected to the controller that drives the real arm.9899

  2. Check option (b)

    Correct. Right. Keep people out of the working area while the arm could run.9899103

  3. Check option (c)

    Not this one. Studio's simulated arm also needs the real arm connected, and its settings apply to the real arm.59

4Expert

Choosing an Interface

For: Someone who designs, integrates or changes the cell: integrator, engineer, agent developer
Kind of task: Analyze and decide: weigh trade-offs, resolve contradictions, critique a configuration

In this part you weigh the interfaces against each other: how fast each one is, who else needs to reach the arm, what each one lets you read back, and how firm the evidence behind each one is. It is for someone who designs, integrates or changes the cell, including an agent that will drive it.

The Candidates

  • Studio and Blockly: graphical, used in the lab through the Studio desktop app, and a Blockly program can be converted to Python14533.
  • Python SDK: the XArmAPI class over UFACTORY's private TCP protocol on port 5026266. UFACTORY's own 850 documentation names the SDKs for the 850, so the SDK documentation applies to it104.
  • ROS 2: the 850 driver is started with ros2 launch xarm_api uf850_driver.launch.py, and its service examples use the /ufactory namespace rather than /xarm105106. MoveIt launch files exist for a simulated arm and for the real arm107.
  • Modbus TCP: standard Modbus TCP commands on port 502 at the controller's address72.
  • Discrete I/O: the control box's digital and analog lines, set up in Studio4142.

Rate and Latency

  • In servo mode, mode 1, set_servo_angle_j and set_servo_cartesian run only the latest target received, with no buffer108.
  • In that mode the controller accepts commands at up to 250 Hz, and commands sent faster are lost. UFACTORY suggests smoothed, interpolated points at a fixed rate, preferably 100 Hz or 200 Hz109.
  • For reading state, the report on port 30003 comes at 100 Hz and those on 30001 and 30002 at 5 Hz. This is Inferred from xArm-series documents74.
  • Queued commands behave differently. By default set_cgpio_digital puts an output change into the motion queue, and sync=False applies it at once, from firmware 2.4.101110. Warning 11 means that command queue is full111.

Who Else Must Talk to the Arm

  • Not this cell's primary method: a PLC can start stored Blockly projects over Modbus TCP by writing up to 16 holding registers from address 0x30 with function code 0x10. Each value picks a project by number, and the projects run in order112.
  • The same can be done with plain wiring: an input set as Offline Task starts stored Blockly programs43.
  • Controller digital I/O can also be read and written over Modbus TCP, as coils and discrete inputs113.

What Each Route Lets You Read Back

  • Over Modbus TCP, holding register 32 is the robot mode and 33 the robot state114; input register 32 holds the error code and 33 the warning code115.
  • Over the SDK, get_err_warn_code() returns the current error and warning codes116, and with reporting on, a callback can run whenever either code changes117.
  • The SDK's mode property works only over the socket connection with enable_report on118.
  • Discrete outputs can only report the fixed status signals they are configured for, such as Error or Robot Moving42.

How Firm the Evidence Is

  • Every Modbus TCP register and function-code record here is Inferred. The ModbusTCP manual names no robot model, and the 850 documents that bridge UFACTORY's software to the 850 cover Studio and the SDKs, not that manual114104.
  • The 850 does accept standard Modbus TCP on port 502; that part is Verified72.
  • ROS README material is Verified for the 850 only where the text names the 850 or uf850104.

A Worked Selection for S2

This project's design needs three paths to the arm: one for the agent's commands, one for signals from the other stations, and one for safety. Each choice below is this project's advice, not UFACTORY's, and each one has a cost.

The Agent's Commands: Python SDK, Position Mode

  • In this cell, Python will be the primary coding method35.
  • This project's advice: drive the arm through the Python SDK in position mode, mode 0, sending only moves the supervisor has checked, and read state from the automatic reports. Do not stream servo-mode targets, and deny the calls that change safety settings119120.
  • Why: the SDK is Verified for the 850 through UFACTORY's own 850 documentation104. In mode 0 each move is a complete command that can block until it finishes, so it can be checked before it is sent6768.
  • The cost: servo mode's streamed motion is given up. Servo mode wants a steady 100 Hz or 200 Hz stream, and runs only the latest target, at the arm's fastest speed109121. Errors come back only in the reply to the next command, so the agent depends on the report ports, whose rates are Inferred8874.
  • ROS 2 is the alternative, but its README material is Verified for the 850 only where the text names the 850104.

Signals from Other Stations: Wired Inputs First

  • This project's advice: bring S4's "all clear and ready" into S2 on a wired input set as General Input and read through the SDK, not as a network message122.
  • Why: the controller's inputs and the SDK's I/O calls are documented for the 85041123, while every Modbus TCP register record is Inferred114. A wired input changes only when the device wired to it does122.
  • The cost: one on or off signal per line, a common GND and open-drain outputs on the other side, and a length limit on the cable unless a longer run is tested122. A PLC that starts stored programs over Modbus TCP would have to wait until the register map is checked on the S2 controller112122.

Safety: Hardwired, Outside the Agent

  • This project's advice: wire emergency stops and protective devices to the dedicated EI and SI inputs as redundant two-channel pairs, directly or through a safety-rated PLC, and keep the agent out of that path124.
  • Why: UFACTORY provides those inputs for this job, wired as redundant pairs124125, and warns never to connect a safety signal to a non-safety PLC29. The UFACTORY sources do not say whether the controller's software safety functions run independently of the motion-command path126.
  • The cost: the agent can stop the arm only in software. The SDK's emergency_stop() is a sequence of state commands, set_state(4), motion_enable(True), set_state(0), and it does not clear errors127. It lacks the hardware emergency stop's power removal128, so it never counts as an emergency stop or safeguard in S2's risk assessment129.

Sources Disagree on Error C33

  • The SDK code list and the Studio manual call C33 a controller GPIO error, while the xArm Developer Manual V2.0.1 calls it abnormal current in the arm. Check which source you are reading before you act on it130.

What S2 Can Publish

  • The candidates for what S2 publishes to the other agents or the hub are what its controller can make available: robot mode and state, error and warning codes, and the automatic state reports. That is Inferred131.
  • This project's advice: do not use Studio's simulated arm or the SDK simulation flag as the simulation substrate for the agent work, because both act on a connected controller and a real arm132.

Check Yourself

Answer, then check. Each option has its own feedback, and nothing is scored.

q-s08-e-01 A cell PLC must start S2's stored program and read its error code over the network. Which interface fits, and why does this platform mark that evidence Inferred?
  1. Check option (a)

    Correct. Right. A PLC can start stored projects through holding registers, and an input register holds the error code. The 850 bridging records cover Studio and the SDKs, not the Modbus TCP manual.112115104

  2. Check option (b)

    Not this one. An Offline Task input can start stored programs, but an output only reports a fixed status such as Error. It cannot carry the error code itself.4342

  3. Check option (c)

    Not this one. Studio is a graphical application for a person at a computer. The documented way for a PLC to start projects is Modbus TCP.14112

q-s08-e-02 The agent needs the arm's state at 100 Hz. Which automatic report port should it read?

About:74

  1. Check option (a)

    Not this one. Port 30001 is the normal report, sent at 5 Hz.7374

  2. Check option (b)

    Not this one. Port 30002 is the rich report, also sent at 5 Hz.7374

  3. Check option (c)

    Correct. Right, the real-time report. The rate is Inferred: it comes from xArm-series documents, and no 850 document states it.7374

q-s08-e-03Safety The agent will call the SDK's emergency_stop() when it sees a hazard. Can S2's risk assessment count that as an emergency stop?
  1. Check option (a)

    Not this one. Despite its name, it is a sequence of software state commands, and it does not carry the hardware emergency stop's power removal.127128

  2. Check option (b)

    Correct. Right. The hardware emergency stop and the dedicated safety inputs are what a risk assessment can rely on.12912830

  3. Check option (c)

    Not this one. A safety signal must never go through a non-safety PLC, and the call stays a software stop, which this project advises never counting as an emergency stop.28129

Not settled

Open Questions · 18

What the sources do not settle for this section. Nothing here is papered over with a plausible number.

  • Kind: Gap

    No dedicated teach pendant for the 850 is documented in the sources fetched: teaching is by browser (UFACTORY Studio) and by hand guiding. User Manual V2.3.0 lists stop categories for a 'Three-Position Enabling Device', but no source fetched names the product or says whether it is offered for the 850.

    See reference 19
  • Kind: Contradiction

    UFACTORY's documents give one page of UFACTORY Studio two names. The 850 hardware manual says a standard Modbus RTU end effector is debugged under 'Settings-Externals-Modbus RTU'. The Studio manual's Settings chapter, as read on 2026-10-13, heads its section 7.2.5, under 7.2 Externals, 'RS-485'; until that date the section was headed 'Modbus RTU'. UFACTORY's release note for Studio V2.8.2 names the page 'Settings - Externals - RS-485'; no fetched source says from which Studio version the page carries that name.

    See reference 86
  • Kind: Contradiction

    UFACTORY's sources give two readings of controller error 2 (Studio's C2). The Studio manual until 2026-10-13, and the Python SDK's code list, say the Emergency IO of the Control Box is triggered; the manual's fix was to ground the 2 EIs of the Control Box and click 'Enable Robot'. The Studio manual as read on 2026-10-13 says the Emergency Stop Button is pushed in, and to release it and click 'Enable Robot'; it no longer mentions the Emergency IO or grounding the EIs. No fetched source says the two describe the same event, or which Studio and firmware versions show which text.

    See reference 94
  • Kind: Gap

    No UFACTORY source was found that says whether the software safety functions (collision detection, safety boundary, reduced mode) are enforced independently of the motion-command path. It is also unknown whether the safety boundary checks the tool and the arm's links, or only the TCP; the documentation mentions only the TCP.

    See reference 126
  • Kind: Contradiction

    Sources disagree on controller error code C33: the SDK code list and the Studio manual call it a controller GPIO/IO error, while the xArm Developer Manual V2.0.1 calls it abnormal current in the robotic arm.

    See reference 130
  • Kind: Contradiction

    Sources disagree on the speed of the 850's internal base-to-flange Ethernet cable: gigabit or 1000M CAT5E on the product page and in the online hardware manual, but 100M and 'Standard CAT5' in User Manual V2.3.0.

    See reference 137
  • Kind: Gap

    The factory IP address of an individual 850 controller is not documented; the manuals give only the range 192.168.1.xxx and the reset address 192.168.1.111.

    See reference 138
  • Kind: Gap

    The IP address of the IntelliMake S2 850's control box, and how the S2 network is laid out (direct PC link, switch or router), are unknown.

    See reference 139
  • Kind: Contradiction

    The Python SDK and the Studio manual name state 2 differently: the SDK's get_state and state documentation call it 'sleeping', while the Studio manual calls it ready to receive and execute commands.

    See reference 140
  • Kind: Contradiction

    UFACTORY's documents disagree on the range of the control box's analog inputs AI0 and AI1. The 850 and xArm hardware manuals say the analog interface sets or measures 0-10 V. The Studio manual's Blockly chapter, as read on 2026-10-13, says the Get AI block returns 0–3 V, and gives 0–10 V for AO0 and AO1. Neither says the other is wrong.

    See reference 141
  • Kind: Contradiction

    UFACTORY's documents and the lab give different ways to open UFACTORY Studio for the xArm 850. The Studio manual says Studio is reached through a browser without installing any software, by entering the controller's IP address followed by :18333 (iface-003, iface-005), and UFACTORY's 850 product page calls it web-based software inside the control box, with no installation needed (app-036, comp-037). As reported on 2026-10-23, the lab opens Studio with the desktop app, which learners download (ops-217), and connects it with the app's IP search field and its Connect Server button (ops-216). For operating the arm in the lab, the desktop app is current. The manual's and the product page's records are not superseded: they still say what UFACTORY's documents say.

    See reference 142
  • Kind: Gap

    The physical I/O that will carry signals between S2 and S4 (and the other stations) is not defined. It may differ from the simulation's signals.

    See reference 143
  • Kind: Gap

    What S2 publishes to the other agents or the hub is not defined: placement confirmations, S3 slot updates, faults and error codes, its own ready or busy state, and whether any work-order or traceability data passes through S2. IntelliMake says this will be developed as the simulation is created.

    See reference 144
  • Kind: Gap

    Whether camera C1's or S11's output reaches S2 or the shared hub, and in what form, is not documented, and IntelliMake does not yet know.

    See reference 145
  • Kind: Gap

    How S4's 'all clear and ready' signal reaches S2 in the physical cell, over a wired input or as a message, is not known to IntelliMake yet.

    See reference 146
  • Kind: Contradiction

    UFACTORY documents disagree on the collision sensitivity range. The Studio Settings page says 1 to 5, while the Studio glossary, the Python SDK and the xArm Developer Manual say 0 to 5, with 0 disabling collision detection. A learner reading only the Settings page would not learn that the value can switch detection off.

    See reference 147
  • Kind: Contradiction

    Sources disagree on the control box's RS-485 ports: one RS-485 master on the product page and in the online hardware manual, but one master and one slave (2 × RS-485) in User Manual V2.3.0.

    See reference 148
  • Kind: Contradiction

    Sources disagree on the 850's end-effector communication protocol: the product page says Modbus RTU, and the online hardware manual's Tool RS485 section and Gripper G2 table describe RS-485 with Modbus RTU, but the specification tables of the online hardware manual and User Manual V2.3.0 say Modbus TCP. The tool port is RS-485, which suggests RTU, but this is not confirmed.

    See reference 149
Provenance

References · 149

Each number in the text points here. Every entry states its confidence class in words and keeps its evidence one click away. How to read the labels.

Key to the badges
Confidence: Verified
A manufacturer or IntelliMake document says so, the project owner stated it as the design, or it was observed directly. It does not mean anyone measured it at S2.
Confidence: Inferred
Reasoned from Verified facts. The reasoning is printed with the record.
Confidence: Assumed
Plausible but untested. The record says how it would be checked.
Kind: Gap
Not known. No figure or answer is given in its place.
Kind: Contradiction
Sources disagree. Both sides are shown, and the site does not pick one silently.
Kind: Recommendation
Project advice drawn from the records it cites. Not a fact about the machine and not a confidence class, so the filter never hides it.
Awaiting cell access
Awaiting cell access: could be confirmed or corrected once the physical S2 cell can be observed.
This project's simulation and agent design, not the physical cell
This project's simulation and agent design, not the physical cell.

Image Credits

  • Line drawings of the 850 control box with its front and back panels labeled: emergency stop, robot power, state, power switch, AC port, network port, LAN, robot 48V, enabling switch and IO. © UFACTORY (Shenzhen UFACTORY Co., Ltd.). Source. Used with UFACTORY's written permission (2026-09-23), on the condition that each image links back to its source page.
  • 3D model: © 2018 UFACTORY Inc., BSD-3-Clause, from UFACTORY Inc. (xArm-Developer/xarm_ros2). License text · Source

Sources for This Section

  • IntelliMake Phase 1 Factory: Autonomous Production Demonstrator (infographic) · IntelliMake.org (IntelliMake)
    © IntelliMake.org. Used with permission; redrawn for this platform. · Cleared for use by its owner · retrieved 2026-09-21 · cited by 2 records here · Project copy; not published on this site.
  • Owner statements from 2026-09-24 onward (verbatim; S40 and later) · Derek Stringfellow (project owner)
    Derek Stringfellow, project record · Project-internal record · retrieved 2026-10-04 · cited by 5 records here · Project copy; not published on this site.
  • Owner statements, 2026-09-21 (verbatim) · Derek Stringfellow (project owner)
    Derek Stringfellow, project record · Project-internal record · retrieved 2026-09-21 · cited by 1 record here · Project copy; not published on this site.
  • UFACTORY 850 Hardware Manual (online), 1. Safety · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 2 records here · Open the source
  • UFACTORY 850 Hardware Manual (online), 2. Hardware Installation · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 5 records here · Open the source
  • UFACTORY 850 Hardware Manual (online), 3. Controller Electrical Interface · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 22 records here · Open the source
  • UFACTORY 850 Hardware Manual (online), 4. Robotic Electrical Interface · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 15 records here · Open the source
  • UFACTORY 850 Hardware Manual (online), 8. Technical Specifications · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 10 records here · Open the source
  • UFACTORY 850 Hardware Manual (online), Preface · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 1 record here · Open the source
  • UFACTORY 850 product page · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 2 records here · Open the source
  • UFACTORY 850 User Manual V2.3.0 (PDF, older edition) · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 7 records here · Open the source
  • UFACTORY ModbusTCP User Instructions (xArm-Python-SDK doc/UF_ModbusTCP_Manual.md) · UFACTORY (manufacturer)
    © UFACTORY Inc., xArm-Developer/xArm-Python-SDK, BSD 3-Clause License · BSD-3-Clause · retrieved 2026-09-21 · cited by 8 records here · Open the source
  • UFACTORY Release Note v2.7.0 · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 4 records here · Open the source
  • UFACTORY Release Note v2.8.2 · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-10-13 · cited by 1 record here · Open the source
  • UFACTORY Studio product and download page · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 1 record here · Open the source
  • UFACTORY Studio User Manual (online), 1. Preface · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 3 records here · Open the source
  • UFACTORY Studio User Manual (online), 10. Robotic Arm Motion Mode and State · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 5 records here · Open the source
  • UFACTORY Studio User Manual (online), 12. Error Handling · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-10-13 · cited by 4 records here · Open the source
  • UFACTORY Studio User Manual (online), 2. Glossary · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 3 records here · Open the source
  • UFACTORY Studio User Manual (online), 3. Connection · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 5 records here · Open the source
  • UFACTORY Studio User Manual (online), 4. Live Control · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-10-13 · cited by 7 records here · Open the source
  • UFACTORY Studio User Manual (online), 5. Blockly · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-10-13 · cited by 3 records here · Open the source
  • UFACTORY Studio User Manual (online), 6. Gcode · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 1 record here · Open the source
  • UFACTORY Studio User Manual (online), 7. Settings · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-10-13 · cited by 14 records here · Open the source
  • UFACTORY Studio User Manual, 12. Error Handling, as it read until 2026-10-13 (publisher's repository, commit 533b75d) · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-10-13 · cited by 1 record here · Open the source
  • UFACTORY Studio User Manual, 7. Settings, as it read until 2026-10-13 (publisher's repository, commit 533b75d) · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-10-13 · cited by 1 record here · Open the source
  • UFACTORY xArm Hardware Manual (online), 3. Controller Electrical Interface · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-25 · cited by 1 record here · Open the source
  • xArm 850 S2 Project: Open Questions for IntelliMake, Batch 01 responses · IntelliMake.org (IntelliMake)
    © IntelliMake.org. Used with permission. · Cleared for use by its owner · retrieved 2026-09-29 · cited by 3 records here · Project copy; not published on this site.
  • xArm Developer Manual V2.0.1 (PDF) · UFACTORY (manufacturer)
    © UFACTORY · All rights reserved; quoted briefly as evidence · retrieved 2026-09-21 · cited by 4 records here · Open the source
  • xArm-C++-SDK ReadMe · UFACTORY (manufacturer)
    © UFACTORY Inc., xArm-Developer/xArm-CPLUS-SDK, BSD 3-Clause License · BSD-3-Clause · retrieved 2026-09-21 · cited by 1 record here · Open the source
  • xArm-CPLUS-SDK repository description (GitHub repository metadata) · UFACTORY (manufacturer)
    © UFACTORY Inc., xArm-Developer/xArm-CPLUS-SDK, BSD 3-Clause License · BSD-3-Clause · retrieved 2026-09-21 · cited by 1 record here · Open the source
  • xArm-Python-SDK API code description (doc/api/xarm_api_code.md) · UFACTORY (manufacturer)
    © UFACTORY Inc., xArm-Developer/xArm-Python-SDK, BSD 3-Clause License · BSD-3-Clause · retrieved 2026-09-21 · cited by 11 records here · Open the source
  • xArm-Python-SDK API documentation (doc/api/xarm_api.md) · UFACTORY (manufacturer)
    © UFACTORY Inc., xArm-Developer/xArm-Python-SDK, BSD 3-Clause License · BSD-3-Clause · retrieved 2026-09-21 · cited by 14 records here · Open the source
  • xArm-Python-SDK example 0000-template.py · UFACTORY (manufacturer)
    © UFACTORY Inc., xArm-Developer/xArm-Python-SDK, BSD 3-Clause License · BSD-3-Clause · retrieved 2026-09-21 · cited by 6 records here · Open the source
  • xArm-Python-SDK README · UFACTORY (manufacturer)
    © UFACTORY Inc., xArm-Developer/xArm-Python-SDK, BSD 3-Clause License · BSD-3-Clause · retrieved 2026-09-21 · cited by 1 record here · Open the source
  • xArm-Python-SDK source, xarm/core/config/x_config.py · UFACTORY (manufacturer)
    © UFACTORY Inc., xArm-Developer/xArm-Python-SDK, BSD 3-Clause License · BSD-3-Clause · retrieved 2026-09-21 · cited by 3 records here · Open the source
  • xArm-Python-SDK source, xarm/core/wrapper/uxbus_cmd.py · UFACTORY (manufacturer)
    © UFACTORY Inc., xArm-Developer/xArm-Python-SDK, BSD 3-Clause License · BSD-3-Clause · retrieved 2026-09-21 · cited by 2 records here · Open the source
  • xArm-Python-SDK source, xarm/x3/base.py · UFACTORY (manufacturer)
    © UFACTORY Inc., xArm-Developer/xArm-Python-SDK, BSD 3-Clause License · BSD-3-Clause · retrieved 2026-09-21 · cited by 1 record here · Open the source
  • xArm-Python-SDK source, xarm/x3/decorator.py · UFACTORY (manufacturer)
    © UFACTORY Inc., xArm-Developer/xArm-Python-SDK, BSD 3-Clause License · BSD-3-Clause · retrieved 2026-09-21 · cited by 1 record here · Open the source
  • xarm_ros ReadMe (ROS 1, master branch) · UFACTORY (manufacturer)
    © UFACTORY Inc., xArm-Developer/xarm_ros, BSD 3-Clause License · BSD-3-Clause · retrieved 2026-09-21 · cited by 3 records here · Open the source
  • xarm_ros2 ReadMe (humble branch) · UFACTORY (manufacturer)
    © UFACTORY Inc., xArm-Developer/xarm_ros2, BSD 3-Clause License · BSD-3-Clause · retrieved 2026-09-21 · cited by 6 records here · Open the source

IntelliMake diagrams are redrawn as native figures, © IntelliMake.org. UFACTORY does not endorse this platform.

All sources and attribution