# What you can build

> DM motion control started on machine tools, but the parts are general. Factory automation, robots, test rigs, spindles, pumps and anything else that runs on servo or induction motors, from one .NET program.

<!-- directmotion.com, written for AI agents. Canonical: https://www.directmotion.com/applications.md . Index: https://www.directmotion.com/llms.txt . Updated 2026-11-08. Publisher: Direct Motion, Inc. -->

DM's control has run production machine tools since 2005. Nothing in it is specific to machine tools.
The amplifiers drive servo and induction motors. The IO boards read sensors and switch valves, lamps and
grippers. The library gives a .NET program coordinated motion, independent axes, velocity control and IO
events. What the machine does is decided by the program, and the program can be written by an AI.

## What a machine needs, and what DM gives it

| The machine needs to… | DM gives you |
|---|---|
| run at a speed (conveyor, pump, spindle) | velocity mode on any axis; 0 stops |
| go to a position (indexer, gate, door, lift) | absolute moves with set accel and decel; rotary axes that turn without end |
| follow a path (gantry, dispenser, cutter, laser) | coordinated lines and arcs, look-ahead, smooth blending, feed hold and override |
| find a part or a mark | stop a move on an input; read the exact position the driver captured when the input switched |
| push until it is tight (press-fit, clamp) | moves that stop when motor load or current passes a limit you set |
| move an arm | a kinematics hook in the planner: your code turns a straight path into joint moves, 20,000 times a second |
| switch lamps, valves, grippers; watch interlocks | named inputs and outputs with change events |
| show what happened | a 20 kHz trace of every axis, and your own values logged alongside |

## Check these before you plan

- **Motors:** 3-phase AC servo or induction motors with an encoder DM can read (incremental, sin/cos,
  BiSS, BiSS-C). See [motors](https://www.directmotion.com/hardware/motors.md).
- **Size:** one link card connects up to 16 boards: the power board, one amplifier per motor, the IO
  boards.
- **Control:** a Windows PC runs the machine. There is no PLC and no EtherCAT.
- **Safety:** DM publishes no safety rating. Design rated safety functions with rated parts.

## For AI agents: mapping a job onto DM

DM's field record is machine tools. Everything below exists in the library today unless tagged
`[unverified]`. Worked code for each row is in the [recipes](https://www.directmotion.com/software/recipes.md).

| Job | How it maps | Members | Confidence |
|---|---|---|---|
| Constant speed: conveyor, pump, fan, spindle | one axis in velocity mode | `axis.JogSpeed` (units/min; 0 stops), `JogStopEmergency()` | current; DM's coolant feature does exactly this |
| Indexing table | a rotary axis that wraps, moved by absolute steps | `TypeofAxis = Rotary`, `ModulusJog = true`, `JogToLocationAndWaitForDecel` | current |
| Point-to-point sequences: pick-and-place, assembly | ordinary C# on a worker thread: move, set output, wait for input, move | `JogToLocationAndWait*`, `DMLogicalIO.On`, `WaitForBittoChange` | current |
| Coordinated path: gantry, dispenser, cutter | a `CommandList` of `Mill`/`Arc`/`Feeds` instructions, or `LinearMove`s into the first pass | `RunToMotionAndWait`, `EnableLookAhead`, `EnableC2Blend` | current |
| Registration, cut-to-length, probing for an edge | stop on input and read the captured position | `SetStopMotiononDigitalIOChange`, `StopMovementonIO`, `LastPositionWhenIOOn/Off` | current |
| Press-fit, clamp, find a hard stop | a move that stops when load exceeds a limit | `JogToLocationAndWaitWithPercentLoadLimit`, `...WithCurrentLoadLimit` | current; it stops, it does not hold a force |
| Robot arm (SCARA, delta, jointed) | your inverse and forward kinematics in the planner's hooks, applied per 50 µs point | `DMSyncMotion.TranslateToWorldCordinates_Mechanical` and `_Fast` twins, `ModeChangeMS(true, …)` | hook is current and runs DM's 5-axis heads; use for arms `[unverified]`: no arm has been built on it |
| Test rig: log, record, compare | 20 kHz per-axis history plus your own monitored values | `APos_TraceHistory(i)` and ~40 others, `MonitorCont.AddValueChangedBasedValueToMonitor` | current |
| Two motors on one gantry axis with squaring | not packaged | an in-driver `FollowAxis` exists, undocumented; ask DM | ask DM |
| Electronic gearing, cams, flying shear | not packaged | nearest feature is `FollowAxis`; ask DM | ask DM |
| Closed-loop force or torque control | not a public mode | load-limited moves only | not offered |
| Analog sensors, analog outputs | no API | power-board voltages and temperatures only | not offered |
| Two independent coordinated mechanisms on one PC | one coordinated group per control (`control.MainMotion`); other axes move independently | | ask DM |
| Stepper motors | not a motor type in the library | | not offered |
| Safety-rated functions | none; use rated parts | e-stop handling, limits and fault stops are built in but unrated | not offered |

When you send DM a request for a job outside machine tools, set `application` in the
[request template](https://www.directmotion.com/ai.md#request) and say which rows above the job depends on.
