en ja

System Architecture

The OWON XDM1000/XDM1241 integration separates the low-level SCPI driver, high-level instrument control, optional worker process, and FastAPI/ese774_frame transport. The controller can operate in the current process or delegate instrument I/O to a child process. The FastAPI layer publishes selected controller operations without making the controller depend on FastAPI.

Documentation scope: This English guide is an abridged technical companion to the complete Japanese manual. This page is a summary of the supplied Japanese document; consult the Japanese version for details and complete examples.

File layout

xdm1000/
├── config.py
├── xdm1000_scpi.py
├── xdm1000_ctrl.py
├── xdm1000_worker.py
└── server_fastapi/
    ├── spec.py
    ├── models/
    │   └── common.py
    ├── routers/
    │   └── xdm1000_router.py
    └── clients/
        ├── sync_xdm1000_client.py
        └── async_xdm1000_client.py

Layer structure

User code / example
        │
        ▼
Xdm1000Ctrl
        │
        ├── use_process=False
        │       └── Xdm1000Scpi を同一プロセスで直接使用
        │
        └── use_process=True
                ├── Parent Process
                │   ├── command queue
                │   ├── response queue
                │   ├── shared state
                │   ├── result store
                │   └── stop event
                │
                └── Worker Process
                    └── Xdm1000Scpi
                        └── pyserial.Serial

Local usage

from xdm1000.xdm1000_ctrl import Xdm1000Ctrl


dmm = Xdm1000Ctrl(port="/dev/cu.usbserial-10", use_process=True)
try:
    print(dmm.idn())
    result = dmm.meas_voltage_dc()
    print(result)
finally:
    dmm.close()

Direct SCPI usage

from xdm1000.xdm1000_scpi import Xdm1000Scpi


dmm = Xdm1000Scpi(port="/dev/cu.usbserial-10")
try:
    print(dmm.idn())
    dmm.configure_voltage_dc("AUTO")
    dmm.set_rate("F")
    print(dmm.meas_main())
finally:
    dmm.close()

FastAPI usage

Configuration

PORT: "/dev/cu.usbserial-10"
BAUDRATE: 115200
TIMEOUT: 2.0
LOGGER_LEVEL: "debug"
SERVER_HOST: "127.0.0.1"
SERVER_PORT: 8000