Skip to content

Repository files navigation

MTConnectExplorer

Caution

This application is an early stage prototype. Use with caution.

MTConnectExplorer is a utility for:

  1. Viewing the data provided by an MTConnect Agent.
  2. 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.
  3. 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}
}

Explore

The Explore page allows you to view the data available from a MTConnect agent.

Explore Page

Explore Page

Capture

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.

Capture Page

flowchart LR
    Dataset.jsonl[("Dataset.jsonl")]
    subgraph "MTConnectExplorer"
        MTCE["Capture"]
    end
    MTCE --Write File--> Dataset.jsonl
    Agent --Stream/Sample/Current--> MTCE
Loading

Dataset Format

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": { ... }}

Payload/MtConnectClientFrame Format

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
}

Capture Mode

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.

  1. Execute a probe request to acquire device models.
  2. Execute a current request to acquire the current value of all dataItems and the nextSequence.
  3. Execute a sample request with a specified nextSequence and interval, and parse continuously streameing MTConnectStreams responses.

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.

  1. Execute a probe request to acquire device models.
  2. Execute a current request to acquire the current value of all dataItems and the nextSequence.
  3. Execute a sample request with a specified nextSequence, and parse the nextSequence from the response.
  4. Repeat the last step every interval (configurable) milliseconds to continuously acquire dataItems that have changed since the last request.

Current

This mode uses polling current requests, repeatedly acquiring the current value of all dataItems.

  1. Execute a probe request to acquire device models.
  2. Execute a current request to acquire the current value of all dataItems.
  3. Repeat the last step every interval (configurable) milliseconds to continuously acquire the current value of all dataItems.

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:

  1. stream mode (Recommended)
  2. sample mode
  3. current mode (Not Recommended)

Datasets

The Datasets page allows you to view, upload, download, rename, and delete datasets.

Datasets Page

Play

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.

Play Page Screenshot

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"]
Loading

About

No description, website, or topics provided.

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages