Skip to main content

3D Systems DMP 350 Flex over MTConnect

Protocol: MTConnect · Agent port: 5000 · Verify: http://<agent-ip>:5000/current · Cable: the machine's Ethernet port. One agent can serve several printer modules as separate devices.

For where the cable goes and how to set the control's IP, subnet and gateway, see Physical Connection in the MTConnect overview.

The 3D Systems DMP 350 Flex exposes machine data via a built-in MTConnect Agent running on port 5000. The agent may serve multiple virtual devices (one per printer module) from a single endpoint.

Identifying Your Device UUID​

Navigate to http://<agent-ip>:5000/current in a browser. Each DeviceStream element in the response has a uuid attribute — use that value as the device identifier when configuring the connection in MachineMetrics.

Connection String​

In MachineMetrics, use the MTConnect Agent connection type with the following connection string format:

<agent-ip>/<device-uuid>

Example: 192.168.1.105/asset_12345-6789A00000001

Adapter Script​

Apply the following transform adapter script to derive execution state, surface fault conditions, and extract structured job data from the Build-Job-Data JSON field.

Printer State Reference

ValueState
1Disconnected
31Idle
32Idle Error
33Shutdown
34Print Initializing
35Printing
36Print Finalizing
37Print Complete
38Print Paused
39Print Initializing Error Aborting
40Print Initializing Error Aborted
41Print Error Aborting
42Print Error Aborted
43Print Cancel Aborting
44Print Cancel Aborted
45Maintenance
# 3D Systems DMP 350 Flex - MTConnect Transform Adapter
# printer_state values documented in table above

version: 2

mtconnect-passthrough: true

# ===== INPUT =====
declare-keys:
- Printer-State
- Fault-General-Fault
- Fault-Blower-Motor
- Fault-Chiller
- Fault-Coupling-Safety-Sensor
- Fault-Invalid-Oxygen-Value
- Build-Job-Data

deny-keys:
- Build-Job-Data

# ===== TRANSFORMATION =====
variables:
execution:
- state:
# NOTE: States 34 (Print Initializing) and 36 (Print Finalizing) are
# included as ACTIVE. Adjust to READY if these should not count as utilization.
- ACTIVE: Printer-State == 34 or Printer-State == 35 or Printer-State == 36
- INTERRUPTED: Printer-State == 38 or Printer-State == 39 or Printer-State == 41 or Printer-State == 43
- READY: true

job-name:
- source: Build-Job-Data
- pattern-match:
pattern: /\"name\":\"([^\"]+)\"/
group: 1

job-id:
- source: Build-Job-Data
- pattern-match:
pattern: /\"job_id\":\"([^\"]+)\"/
group: 1

job-material:
- source: Build-Job-Data
- pattern-match:
pattern: /\"material\":\"([^\"]+)\"/
group: 1

job-total-layers:
- source: Build-Job-Data
- pattern-match:
pattern: /\"total_layers\":([0-9]+)/
group: 1

job-status:
- source: Build-Job-Data
- pattern-match:
pattern: /\"status\":([0-9]+)/
group: 1

job-start-time:
- source: Build-Job-Data
- pattern-match:
pattern: /\"start_time\":([0-9]+)/
group: 1

job-x-extent:
- source: Build-Job-Data
- pattern-match:
pattern: /\"x_extent\":([0-9.]+)/
group: 1

job-y-extent:
- source: Build-Job-Data
- pattern-match:
pattern: /\"y_extent\":([0-9.]+)/
group: 1

job-z-extent:
- source: Build-Job-Data
- pattern-match:
pattern: /\"z_extent\":([0-9.]+)/
group: 1

job-material-estimate-g:
- source: Build-Job-Data
- pattern-match:
pattern: /\"material_estimate_total\":\[([0-9]+)\]/
group: 1

job-material-estimate-vol:
- source: Build-Job-Data
- pattern-match:
pattern: /\"material_estimate_total_volume\":\[([0-9]+)\]/
group: 1

# ===== OUTPUT =====
data-items:
- execution
- job-name
- job-id
- job-material
- job-total-layers
- job-status
- job-start-time
- job-x-extent
- job-y-extent
- job-z-extent
- job-material-estimate-g
- job-material-estimate-vol

conditions:
dmp-fault:
- code: general-fault
message: "${Fault-General-Fault}"
value:
FAULT: Fault-General-Fault != "UNAVAILABLE" and Fault-General-Fault != ""
dmp-warning:
- code: blower-motor
message: Blower motor fault
value:
WARNING: Fault-Blower-Motor != "UNAVAILABLE" and Fault-Blower-Motor != ""
- code: chiller
message: Chiller fault
value:
WARNING: Fault-Chiller != "UNAVAILABLE" and Fault-Chiller != ""
- code: coupling-safety-sensor
message: Coater safety coupling tripped
value:
WARNING: Fault-Coupling-Safety-Sensor != "UNAVAILABLE" and Fault-Coupling-Safety-Sensor != ""
- code: invalid-oxygen-value
message: Invalid oxygen sensor value
value:
WARNING: Fault-Invalid-Oxygen-Value != "UNAVAILABLE" and Fault-Invalid-Oxygen-Value != ""

Notes​

  • Fault conditions — The raw Fault-* fields pass through via mtconnect-passthrough and can be mapped in Data Mapping. The conditions block surfaces active faults and warnings as MachineMetrics alarm events.
  • Build-Job-Data — The raw JSON blob is denied from passthrough and replaced by the individual extracted fields listed in the output section above.
  • Printer-State — This field arrives as a numeric string. The execution logic compares it as a number.