Skip to main content

Plesty Taiko PDL M1 Device

A PLESTY device module for the PicoQuant Taiko PDL M1: a laser driver that powers a pulsed/continuous-wave (cw) diode laser head. The module sets the pulse repetition rate and the power, switches between pulsed and cw operation, and reads the lock state, the calibrated average power and the temperatures.

The module is built so the laser never stays on by accident: see Safety.

Supported hardware

The Taiko PDL M1 driver with a laser head connected, over USB. It talks to the driver through PicoQuant's own library, PDLM_Lib.dll, so it runs on Windows. Everything else, including the simulator (mock), works without the library or the hardware.

Installation

git clone https://gitlab.com/plesty/hub/devices/picoquant/plesty-taiko-pdl-m1.git
cd plesty-taiko-pdl-m1
uv sync

PicoQuant's software and PDLM_Lib.dll

PDLM_Lib.dll is PicoQuant's. Its license forbids passing it on, so it is not in this repository and never will be. Install PicoQuant's Taiko software yourself (from PicoQuant); it puts the library on the PC.

The module runs in 64-bit Python and needs the 64-bit library. It looks for it at

C:\ProgramData\Taiko PDL M1\API\x64\PDLM_Lib.dll

If yours is elsewhere, set TAIKO_DLL_PATH (in .env or the environment) to the file or its folder. Many lab scripts use the 32-bit copy (...\API\Win32\) with 32-bit Python; the module refuses that file and says so, because a 64-bit program cannot load it.

Quick start

Copy .env.example to .env, then connect the driver by USB, switch it on, and close PicoQuant's own Taiko program (only one program can hold the driver).

from plesty.taiko_pdl_m1 import Device

# address: empty = the first Taiko found, "0".."7" = a USB index, a serial number,
# or "mock" = the simulator
with Device(address="mock") as laser:
    laser.write("laser_mode", "pulsed")
    laser.write("repetition_rate", 10_000_000)  # Hz
    laser.emission_on()  # releases the lock, power stays 0
    laser.write("power_permille", 100)  # 10 % of the maximum at this rate
    print(laser.query("power"))  # calibrated average power, mW
    laser.emission_off()  # power 0, then lock

As a server for experiments: uv run python -m plesty.taiko_pdl_m1 (port from TAIKO_TCP_PORT, default 5555).

Safety

  • Power 0 before every lock. With the laser locked the driver reads 0 and refuses power changes, but it keeps the setting and brings it back when the lock is released. So the module sets the power to 0 first, and after each unlock reads the power back and sets a restored value to 0.
  • Locked on disconnect. disconnect (also when the server stops) sets power 0 and engages the software lock before it closes the driver.
  • A driver found emitting is secured. Connecting to a driver that is unlocked with power above 0 (for example after a killed server) sets power 0 and the lock, with a warning.
  • Key and interlock cannot be overridden. The software lock is separate from the key switch and the interlock connector; the module can release only its own lock. locked shows the overall state, emission_on reports why it is still locked.
  • power_permille is refused while locked and on an external trigger; writing soft_lock goes through emission_on / emission_off.

Reference

Power is given in permille (thousandths) of the maximum, which depends on the repetition rate; average power in linear power mode grows with the rate at a fixed permille.

Parameter Type Unit / range Access
laser_mode str cw, pulsed read/write
repetition_rate int Hz, 1 to 100 000 000 read/write
power_permille int permille, 0 to 1000 read/write
power float mW, calibrated average read
soft_lock bool the module's own lock read/write
locked bool any lock active (soft, key, interlock, safety) read
trigger_mode str internal, external_falling, external_rising read
pulse_power_table str linear, max_power read
wavelength float nm, estimate from calibration read
head_temperature float degC read
target_temperature float degC read
case_temperature float degC read
Operation What it does
scan_devices List the drivers on USB without opening them
get_info Identify the driver and head and give the head's limits
get_status Decode the status word: locks, head, temperatures
read_errors Drain the driver's error queue
emission_on Release the soft lock; power stays 0
emission_off Power 0, then the soft lock

Communication

USB through PDLM_Lib.dll, driver index 0 to 7 (up to eight drivers). Environment, see .env.example: TAIKO_ADDRESS, TAIKO_DLL_PATH, TAIKO_TCP_PORT.

Field test

tests/field_test.py (generic gates, never turns the laser on) and tests/bench_questions.py (unlocks the laser briefly at up to 5 % power; run it with the beam blocked or on a power meter) are run by hand on the PC with the driver; see docs/index.md.

Metadata

Release files for plesty-taiko-pdl-m1 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for plesty-taiko-pdl-m1 0.1.0
File Size Uploaded Provenance Actions
plesty_taiko_pdl_m1-0.1.0.tar.gz 204.9 kB Without provenance Details for plesty_taiko_pdl_m1-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for plesty-taiko-pdl-m1 0.1.0
File Interpreter ABI Platform Actions
plesty_taiko_pdl_m1-0.1.0-py3-none-any.whl Python 3 none any Details for plesty_taiko_pdl_m1-0.1.0-py3-none-any.whl

Total release size: 260.3 kB

Release files / plesty_taiko_pdl_m1-0.1.0.tar.gz

Download URL plesty_taiko_pdl_m1-0.1.0.tar.gz
Size 204.9 kB
Tags Source
SHA-256 checksum
How to use checksums
f3edbfd21bf193ea5581c2ef03b92f39dc367b5f950918a4fdefc86900c426d0
BLAKE2b-256 checksum
How to use checksums
8c32f644784b44f35d83d6d56ebe13ea9234d9a0dc2f71a8b2423a8b9b259eec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / plesty_taiko_pdl_m1-0.1.0-py3-none-any.whl

Download URL plesty_taiko_pdl_m1-0.1.0-py3-none-any.whl
Size 55.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5a9cb1f3f0db1c8d0a283f5f76ead3e64cfd7f9ce4576fc6326683dc47bb5859
BLAKE2b-256 checksum
How to use checksums
1683afaedad94219eafed28ff9cd87bd17912b01d14fcad4353f6e71a8a358e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for plesty-taiko-pdl-m1 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page