Caution
This application is an early stage prototype. Use with caution.
MTConnectExplorer is a utility for:
- Viewing the data provided by an MTConnect Agent.
- Capturing and replaying streaming data using the Testbed as a Service (TaaS) method (tailored for MTConnect), empowering the remote development of downstream application such as digital shadows.
- The collaborative identification and remedy of interoperability issues.
This utility uses the Testbed as a Service (TaaS) method for capturing and replaying streaming datasets. If using this utility in support of an academic publication, please cite this paper since this utility utilizes the proposed method:
@article{mccormick-2025-testbed-as-a,
author = {M. R. McCormick and Thorsten Wuest},
title = {Testbed as a Service (TaaS): a scalable ecosystem for smart manufacturing and industry 4.0 collaboration},
journal = {Manufacturing Letters},
volume = {44},
pages = {1357-1368},
year = {2025},
note = {53rd SME North American Manufacturing Research Conference (NAMRC 53)},
issn = {2213-8463},
doi = {https://doi.org/10.1016/j.mfglet.2025.06.155},
url = {https://www.sciencedirect.com/science/article/pii/S2213846325001890},
}The strategy employed by this utility for the collaborative identification and remedy of interoperability issues was devised in response to challenges encountered during this case study. If you are using this utility in support of an academic publication, please consider citing this case study if apppropriate:
@article{mccormick-2025-machine-tool-interoperability,
author = {M. R. McCormick and Mohammed Shafae and Thorsten Wuest},
title = {Machine Tool Interoperability in Smart Manufacturing and Industry 4.0},
journal = {IEEE Access},
year = {2025},
volume = {13},
number = {},
pages = {117867-117913},
doi = {10.1109/ACCESS.2025.3585766},
url = {https://ieeexplore.ieee.org/document/11069294}
}The Explore page allows you to view the data available from a MTConnect agent.
The Capture page allows you to capture data from an MTConnect agent (e.g., https://demo.mtconnect.org/) and save it to a .jsonl dataset file.
flowchart LR
Dataset.jsonl[("Dataset.jsonl")]
subgraph "MTConnectExplorer"
MTCE["Capture"]
end
MTCE --Write File--> Dataset.jsonl
Agent --Stream/Sample/Current--> MTCE
Datasets are in .jsonl (json Lines) format where each individual line is a json object. The required fields are:
| Name | Description |
|---|---|
| RawMTConnect-v0.1 | A required header that identifies the dataset schema and version for future backwards compatibility. |
| TIMESTAMP | The time that the json line/object was written the the file. This is also the playhead when replaying captured datasets. |
| ID | This value must always be MtConnectClientFrame for RawMTConnect-v0.1. |
| PAYLOAD | A MtConnectClientFrame json object which contains information about a MTConnect request and the associated response. |
The TaaS method normally uses the ID field to uniquely identify distinct streams in a dataset, such as MQTT topics
or OPC UA tag IDs/paths. For RawMTConnect-v0.1 specifically, this is a constant value.
RawMTConnect-v0.1
{"TIMESTAMP": "2027-01-01T00:00:01.000+00:00", "ID": "MtConnectClientFrame", "PAYLOAD": { ... }}
{"TIMESTAMP": "2027-01-01T00:00:02.000+00:00", "ID": "MtConnectClientFrame", "PAYLOAD": { ... }}
{"TIMESTAMP": "2027-01-01T00:00:03.000+00:00", "ID": "MtConnectClientFrame", "PAYLOAD": { ... }}
{"TIMESTAMP": "2027-01-01T00:00:04.000+00:00", "ID": "MtConnectClientFrame", "PAYLOAD": { ... }}A MtConnectClientFrame which is the PAYLOAD object in a dataset line contains information about a MTConnect request
and the associated response to that request.
| Name | Description |
|---|---|
| timestamp | The timestamp of when the response to the request was received. This may be different than the dataset TIMESTAMP. |
| type | The request type, which can be probe, current, or sample. |
| parameters | The parameters of the request, which are different depending on the type. |
| url | The url of the request. |
| response | A string containing the entire XML response returned in response to the request. (Empty string if an exception was raised/thrown.) |
| exception | A description of the exception that was raised/thrown during the request, if an exception was raised/thrown. |
The structure of a MtConnectClientFrame ensures that the request parameters and the resulting response are fully captured.
If an end user is encountering issues using a MTConnect agent, this structure allows the end user to capture data from a
MTConnect agent and send that data to a subject matter expert who can analyze the requests and responses to aid in
diagnosing the cause of the issue and proposing solutions.
This method was devised during challenges encountered in this case study.
The first frame in a dataset MUST be a probe type. This is because a probe response enumerates devices and
what data they provide, which is required for current and sample responses to be parsed.
// A probe request which returns a MTConnectDevices XML document.
"PAYLOAD": {
"timestamp": "2027-01-01T00:00:01.000+00:00",
"type": "probe",
"parameters": {
"device": null
},
"url": "https://demo.mtconnect.org/probe",
"response": "...<MTConnectDevices>...</MTConnectDevices>...",
"exception": null
}
// A current request which returns a MTConnectStreams XML document.
"PAYLOAD": {
"timestamp": "2027-01-01T00:00:02.000+00:00",
"type": "current",
"parameters": {
"path": null,
"at": null,
"device": null
},
"url": "https://demo.mtconnect.org/current",
"response": "...<MTConnectStreams>...</MTConnectStreams>...",
"exception": null
}
// A sample request which returns a MTConnectStreams XML document.
"PAYLOAD": {
"timestamp": "2027-01-01T00:00:03.000+00:00",
"type": "sample",
"parameters": {
"path": null,
"from": 32365919,
"count": null,
"interval": 1000,
"device": null
},
"url": "https://demo.mtconnect.org/sample?from=32365919&interval=1000",
"response": "...<MTConnectStreams>...</MTConnectStreams>...",
"exception": null
}There are multiple modes for capturing data from an MTConnect agent.
Stream
This mode uses a long-lived streaming sample request, effectively 'subscribing' to all Agent data. Using this
method, after establishing a streaming connection, the Agent continuously sends changes to the value of dataItems
to the client which instantiated the connection until the client detaches from the stream.
- Execute a
proberequest to acquire device models. - Execute a
currentrequest to acquire the current value of alldataItems and thenextSequence. - Execute a
samplerequest with a specifiednextSequenceandinterval, and parse continuously streameingMTConnectStreamsresponses.
Sample
This mode uses polling sample requests, repeatedly acquiring the value of dataItems in the Agent's buffer that have
changed since the last request as made.
- Execute a
proberequest to acquire device models. - Execute a
currentrequest to acquire the current value of alldataItems and thenextSequence. - Execute a
samplerequest with a specifiednextSequence, and parse thenextSequencefrom the response. - Repeat the last step every
interval(configurable) milliseconds to continuously acquiredataItems that have changed since the last request.
Current
This mode uses polling current requests, repeatedly acquiring the current value of all dataItems.
- Execute a
proberequest to acquire device models. - Execute a
currentrequest to acquire the current value of alldataItems. - Repeat the last step every
interval(configurable) milliseconds to continuously acquire the current value of alldataItems.
Key Distinction
current requests provide a snapshot of machine state at the instant that the request was made. As a result, the current
mode may not capture all data. For example, if current requests are made every second, and a dataItem's value
changes to another value then changes back to the original value in the time between current requests being made,
the change in value will not be identified.
However, sample requests (stream and sample modes) identify all changes in dataItem values.
As a result, stream and sample modes are recommended to ensure that all changes are identified and captured.
While stream mode is generally recommended, sample is an alternative if an Agent does not support stream mode,
and current is an alternative (with limitations) if an Agent does not support sample mode.
The recommended modes in order of priority are:
streammode (Recommended)samplemodecurrentmode (Not Recommended)
The Datasets page allows you to view, upload, download, rename, and delete datasets.
The Play page allows you to play a .jsonl dataset.
When playing a dataset, an instance of the MTConnect Agent, and a SHDR adapter
are automatically created and started.
flowchart LR
Dataset.jsonl[("Dataset.jsonl")]
subgraph "MTConnectExplorer"
Agent["Agent"]
SHDR["SHDR Adapter"]
MTCP["Play"]
end
MTCP["Play"] --> SHDR
SHDR --> Agent
Dataset.jsonl --Read File--> MTCP
Agent --Stream/Sample/Current--> CL["Client"]
Agent --Stream/Sample/Current--> Dashboard["Dashboard"]
Agent --Stream/Sample/Current--> DS["Digital Shadow"]




