MTConnect is an open, vendor-neutral standard for machine tool data, maintained by the MTConnect Institute, and a growing number of CNCs publish it natively or through a small piece of adapter software sitting in front of the control. If your machine has an MTConnect agent running anywhere, on the control itself or on a small box bolted near it, this guide covers connecting it, whether the nameplate says a brand with its own dedicated guide in this series or not. The standard is the same either way, a plain HTTP endpoint returning XML, no brand-specific SDK required.
Before you start You’ll need the agent’s base URL (
http://host:port, and the specific device path if the agent serves more than one machine), an Ethernet drop, a fixed IP, and the Spall gateway on the same network. Spall polls the agent. It never writes to the machine.
1. Adapters versus agents, and why the distinction matters
Two different pieces of software wear the MTConnect name, and knowing which one you’re looking at saves confusion. The adapter sits closest to the machine, sometimes built into the control’s own firmware, sometimes a small separate program, and its job is translating the machine’s native data (a FANUC parameter, a Siemens PLC bit, whatever the control exposes) into the standard’s own vocabulary. The agent is the HTTP server that publishes that translated data as MTConnect’s standard XML, and it’s the agent, not the adapter, that Spall (or any other MTConnect client) talks to.
On some machines the two live in the same box and you never see the seam. On others, particularly older controls retrofitted for MTConnect, a separate adapter box feeds a separate agent, and both have to be running and correctly paired before the agent has anything real to publish. If an agent answers but every data item comes back UNAVAILABLE, checking that its adapter is running and connected is the first thing to look at, before assuming the agent itself is broken.
2. Probe versus current: what you read, what Spall reads
An MTConnect agent exposes a few standard verbs, and two of them matter here. /probe returns the device’s full structure, every component and every data item it’s capable of publishing, along with each one’s dataItemId, the stable key you’ll address a tag by. /current returns a live snapshot, the most recent value for every one of those data items, no history, just what it is right now. Spall polls /current on a schedule. That’s the endpoint built for a fixed-interval poller. You read /probe, by hand, once, to find out what IDs exist and what they’re called.
Point a browser at http://<agent host>:<port>/probe before configuring anything in Spall. It’s plain XML, readable without special tooling, and it’s the fastest way to see what a machine you’ve never connected before publishes, rather than guessing dataItemId names from a generic list. Note the exact dataItemId for each value you want. They’re case sensitive and specific to that agent’s own configuration.
3. What a data item’s category means
Every element in an MTConnect response falls into one of three categories, and that category is what tells you how to read the value.
- Samples are continuously variable numeric readings, spindle load, feedrate, a position, an axis velocity. Type these as int or float in Spall.
- Events are discrete states or strings, execution state, controller mode, program name. Type these as string.
- Condition is health or alarm state, and it works differently from the other two: the meaningful value is the element’s own tag name, Normal, Warning, or Fault, not any text inside it. Type a Condition data item as string and read the level name it reports.
The standard also defines an UNAVAILABLE sentinel value, a data item’s way of saying it has nothing to report right now, a probe that hasn’t been touched since power-on, an axis that isn’t installed. Spall shows that as no data, not a zero and not an error, the same gap handling as any other source that has nothing yet.
4. Confirm the agent answers
MTConnect agents don’t share one universal port the way Modbus does. Check the specific agent’s own configuration. 5000 is a common default. From a PC on the same network:
curl http://192.168.4.20:5000/current
A response full of XML, even one showing several UNAVAILABLE data items, confirms the agent itself is reachable. That’s a data-mapping question for later, not a connection failure. No response at all points at the port, a firewall, or the agent process itself, not Spall. This test doesn’t touch Spall yet.
5. Add the source in Spall
In Spall, add the machine, choose MTConnect as the source, and enter the agent’s base URL:
http://192.168.4.20:5000
For an agent serving more than one device, include the device path in the base URL, e.g. http://192.168.4.20:5000/VMC-3Axis. Spall appends /current automatically. Assign the Spall gateway and save.
6. Add a tag per data item
For every value from your /probe read, add a tag with its exact dataItemId as the address and a type matching its category from step 3, int or float for a Sample, string for an Event, string for a Condition (reading the level name). Every new tag lands in the Signal inbox unclassified until someone confirms what it means.
What Spall does with this data
Availability. A tag mapped to Execution or a comparable Event splits every hour into running, idle, and down.
Downtime and reasons. Each stop is caught the instant the mapped state changes. Operators tag the reason, ranked into a Pareto.
Production. A Sample or counter-bearing data item drives target-vs-actual by shift and job.
Quality and OEE. Availability, performance, and quality still roll into one OEE view, dollar-ranked, whatever agent fed the underlying tag.
One thing worth repeating Spall issues
/currentGET requests only. It never writes to the agent or the machine behind it. MTConnect itself is a read-only publishing standard with nothing to write to in the first place. Worst case if the agent goes quiet is a gap in the chart. The machine keeps running.
Quick recap
- MTConnect is an open standard, the setup here applies to any agent, brand-specific or not
- An adapter translates the machine’s native data. An agent publishes it over HTTP as MTConnect XML. Spall only talks to the agent
- Read
/probeyourself, once, to find dataItemIds. Spall polls/currenton a schedule, the endpoint built for it - Samples are numeric, Events are strings, Condition’s meaningful value is the level name itself (Normal, Warning, Fault), not the element’s text
- UNAVAILABLE is the standard’s own way of saying a data item has nothing to report. Spall shows that as no data, not a zero
- Every new tag lands in the Signal inbox unclassified until someone tells Spall what it means
If an agent’s /probe response is long enough to get lost in, bring the raw XML to a pilot call. We’ll pull out the handful of data items worth mapping.