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.
lockedshows the overall state,emission_onreports why it is still locked. power_permilleis refused while locked and on an external trigger; writingsoft_lockgoes throughemission_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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.