The MTConnect connector provides tag-based read access to any standard MTConnect Agent (https://www.mtconnect.org) over its HTTP REST API, using only HttpClient and System.Xml.Linq - no vendor SDK dependency, since MTConnect is an open, versioned public standard rather than a proprietary interface.
Every poll cycle issues a single /current request to the Agent and looks every registered tag's value up out of that one document, rather than one request per tag - there's no per-tag session or handle to manage, unlike device-level connectors.
MTConnect is read-only by design. The standard's own data flow is Device → Adapter → Agent → Client, and there is no mechanism for a client to write a value back through the Agent's REST API. A tag configured as Out/InOut against an MTConnect address will have its own value updated locally, but nothing is ever sent to the machine.
The connector detects when the Agent becomes unreachable and reconnects automatically without blocking the read cycle - reconnection runs on its own dedicated background thread. Since HTTP polling is inherently stateless, "reconnecting" and "probing" are the same lightweight operation - there's no persistent session to tear down and rebuild.
| Name | Values | Description |
|---|---|---|
| Type | MTCONNECT | The connector type identifier. |
| IP | IP address or hostname | The IP address or hostname of the MTConnect Agent. |
| Port | integer | The Agent's HTTP port. Defaults to 5000 (the common Agent default). |
| Device | device name | Optional - scopes requests to a single device's /current endpoint rather than the Agent's full set of devices. |
| UseHttps | true/false | Whether to connect over HTTPS instead of HTTP. Defaults to false. |
| Timeout | milliseconds (integer) | HTTP request timeout. Defaults to 5000. |
| UpdateRate | milliseconds (integer) | How often the connector polls /current. Defaults to 1000. |
| ReconnectDelay | milliseconds (integer) | Delay between reconnect attempts while the Agent is unreachable. Defaults to 5000. |
Every MTConnect value is plain text, so there's no DataType disambiguation needed the way there is for a PLC connector - the raw string returned by the Agent is passed straight to each tag's own SetValue, and the tag type itself (BoolTag/IntTag/DecimalTag/StringTag/etc.) handles its own coercion.
| Tag Type | Address | Behaviour |
|---|---|---|
| Any standard tag | dataItemId, e.g. PartCountAct | Read-only. Looked up by dataItemId in the /current response. |
| Any standard tag | device:dataItemId, e.g. OKUMA.Lathe:PartCountAct | Same, but scoped to a specific device's stream when an Agent hosts multiple devices and dataItemIds might otherwise collide. |
If a dataItemId exists but the machine hasn't reported a value for it yet, MTConnect reports it as UNAVAILABLE - the connector treats this as normal (leaves the tag at its last known value) rather than as a fault.
| Name | Arguments | Description |
|---|---|---|
| Probe | - | Fetches the Agent's /probe document (device/data-item metadata) and returns the raw XML. |
| GetDataItem | Address | Fetches the current value of a single dataItemId on demand, using the same dataItemId or device:dataItemId address format as a tag. |
The Address field of a tag is a dataItemId, optionally qualified as device:dataItemId to disambiguate when an Agent hosts multiple devices. The same value is also available on demand via RunMethod("GETDATAITEM") rather than through a polled tag, if a one-off read is preferred over continuous polling.