# Manual Reference
English | 日本語
## Public control classes
| Class | Role |
|---|---|
| `pm2cd.pm2cd_single.PM2CDsingle` | Single-process controller |
| `pm2cd.pm2cd_ctrl.PM2CD` | Multiprocess controller |
| `pm2cd.pm2cd_device.PM2CDDevice` | Device command layer |
| `pm2cd.core.communication_tcp.Communication` | TCP transport |
## Common operations
| API | Purpose |
|---|---|
| `get_position(motor)` | Read current position |
| `move(target, motor, backlash, relative)` | Absolute or relative motion |
| `move_relative(target, motor, backlash)` | Relative motion |
| `wait_for_complete(motor, timeout_sec, interval_sec, target_position, show_position)` | Wait for motion completion |
| `stop(motor)` / `emergency_stop(motor)` | Controlled / emergency stop |
| `get_status(motor)` / `get_status_all()` | Read motor status |
| `set_speed(motor, ...)` / `get_speed(motor)` | Set / read speed (see generated API for exact arguments) |
| `get_limit(motor, ...)` / `set_limit(motor, ...)` | Software limits (see generated API for exact arguments) |
Boolean results generally indicate success or failure. Read operations may return `None` on failure. Invalid arguments can raise exceptions.
## Motion signatures
```python
move(target: int, motor: Optional[int] = None, backlash: Union[str, bool, None] = True, relative: bool = False) -> bool
move_relative(target: int, motor: Optional[int] = None, backlash: Union[str, bool, None] = True) -> bool
```
## Implementation-defined limits
`PM2CDDevice` defines position limits of `-8388608` to `8388607`, speed limits of `5` to `100000` pps, backlash limits of `-9999` to `9999`, and hold times of `50` to `3000` ms. Refer to the implementation for method-specific validation.
> Before moving hardware, verify wiring, limit switches, travel direction, and permissible travel. The examples have not been run against a physical controller.