The Fairino Cobot connector provides tag-based read and write access to a Fairino (FAIR-INNOVATION) FR-series collaborative robot. It exposes the robot's digital I/O (control box and tool) as pollable tags, whole-axis snapshots (joint position and joint torque) as JSON-valued tags, and program control (load/run/pause/resume/stop, program state) via connector methods.
Digital I/O reads never touch the network - the SDK keeps a locally-cached real-time state packet updated in the background once connected, and reads come from that cache. Digital output writes, joint position reads, and program-control calls are genuine round-trips to the controller.
The connector detects when the underlying connection is lost and reconnects automatically without blocking the read cycle - reconnection runs on its own dedicated background thread. Once a connection has been established at least once, the SDK's own internal auto-reconnect is relied on to restore the underlying socket; the connector's reconnect loop probes for that recovery rather than repeatedly tearing down and rebuilding the connection.
| Name | Values | Description |
|---|---|---|
| Type | FAIRINOCOBOT | The connector type identifier. |
| IP | IP address or hostname | The IP address or hostname of the robot controller. |
| Timeout | milliseconds (integer) | Bound used when waiting on connector operations. Defaults to 2000. |
| UpdateRate | milliseconds (integer) | How often the connector polls all subscribed tags. Defaults to 250. |
| ReconnectDelay | milliseconds (integer) | Delay between reconnect attempts while the controller is unreachable. Defaults to 5000. |
| IOBlockMode | 0 (blocking) or 1 (non-blocking) | Passed to GetDI/GetToolDI. Defaults to 1. Has little practical effect since these reads never touch the network, but kept configurable in case a future SDK version changes that. |
| DOSmooth | byte (0-255) | Passed to SetDO/SetToolDO - whether a digital output transitions immediately or ramps. Defaults to 0 (immediate). |
| DOBlock | byte (0-255) | Passed to SetDO/SetToolDO - whether the write blocks until confirmed. Defaults to 0 (blocking). |
The connector maps onto the standard Industreweb tag types below. For Integer Tag, Decimal Tag, Time Span Tag, and Data Tag - where more than one Allen Bradley elementary type could apply - the specific AB type is selected using a DataType entry in the tag's Parameters. Bool Tag and String Tag don't need this, since each maps to exactly one AB type.
| Tag Type | Address | Behaviour |
|---|---|---|
| Bool Tag | DI:<0-15> | Control box digital input. Read-only. |
| Bool Tag | TDI:<0-1> | Tool digital input. Read-only. |
| Bool Tag | DO:<0-15> | Control box digital output. Read/write. |
| Bool Tag | TDO:<0-1> | Tool digital output. Read/write. |
| Data Tag | JOINTPOSITION (exact match, no id) | All 6 axis positions (degrees) as a single JSON object keyed J1-J6, e.g. {"J1":12.3,...,"J6":-4.5}. Read-only. Costs a genuine round-trip to the controller on every poll. |
| Data Tag | JOINTTORQUE (exact match, no id) | All 6 axis torques as a single JSON object keyed J1-J6. Read-only. Read from the same locally-cached state as the digital I/O - no network round-trip. |
Data Tag itself accepts objects, arrays, or XML and parses any of them to a suitable JSON value - the object shape above is used for readability, not because it's a hard requirement.
The DI/TDI/DO/TDO prefix-and-colon address format (rather than prefix immediately followed by the id) is deliberate: another connector in this codebase uses tag.Address.Contains(":") to decide whether a tag's address needs reading at all, and this keeps that convention consistent.
| Name | Arguments | Description |
|---|---|---|
| Mode | MODE | Sets the robot's operating mode. |
| ProgramLoad | PATH | Loads a program by path/name. |
| ProgramRun | - | Starts the loaded program. |
| ProgramPause | - | Pauses the running program. |
| ProgramResume | - | Resumes a paused program. |
| ProgramStop | - | Stops the running program. |
| GetProgramState | - | Returns the current program state (1 = stopped/no program, 2 = running, 3 = paused). |
| GetCurrentLine | - | Returns the current line number of the running program. |
| GetLoadedProgram | - | Returns the name of the currently loaded program. |
| GetActualTCPPose | - | Returns the current TCP pose as x,y,z,rx,ry,rz. |
| GetJointPosition | - | Returns all 6 axis positions as a JSON object keyed J1-J6 (same value a JOINTPOSITION Data Tag would hold). |
| GetJointTorque | - | Returns all 6 axis torques as a JSON object keyed J1-J6 (same value a JOINTTORQUE Data Tag would hold). |
| GetDI | Address | Reads a single control box digital input. Address is the bare id (0-15), no prefix or colon. |
| GetToolDI | Address | Reads a single tool digital input. Address is the bare id (0-1). |
| GetDO | Address | Reads a single control box digital output. Address is the bare id (0-15). |
| GetToolDO | Address | Reads a single tool digital output. Address is the bare id (0-1). |
The Address field of a tag depends on its type:
The same digital I/O values and axis snapshots are also available on demand via Execute Commands (GetDI/GetToolDI/GetDO/GetToolDO/GetJointPosition/GetJointTorque) rather than through a polled tag, if a one-off read is preferred over continuous polling.