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
| Value | State |
|---|---|
| 1 | Disconnected |
| 31 | Idle |
| 32 | Idle Error |
| 33 | Shutdown |
| 34 | Print Initializing |
| 35 | Printing |
| 36 | Print Finalizing |
| 37 | Print Complete |
| 38 | Print Paused |
| 39 | Print Initializing Error Aborting |
| 40 | Print Initializing Error Aborted |
| 41 | Print Error Aborting |
| 42 | Print Error Aborted |
| 43 | Print Cancel Aborting |
| 44 | Print Cancel Aborted |
| 45 | Maintenance |
# 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 viamtconnect-passthroughand can be mapped in Data Mapping. Theconditionsblock 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.