Skip to content

Use the PyMeasure Eurotherm driver and implement setpoint moves - #4

Merged
seb5g merged 6 commits into
5.0.xfrom
feature/pymeasure-eurotherm
Oct 13, 2026
Merged

seb5g merged 6 commits into
5.0.xfrom
feature/pymeasure-eurotherm

Conversation

@seb5g

@seb5g seb5g commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Replaces #1 (Adélaïs Bruel's PR), whose work this builds on. She is listed as an author in pyproject.toml and the README, and as co-author of the commits that port her code. Pierre-Anne Bausson (PABausson/pymodaq_plugins_eurotherm, whose 3500 driver went into PyMoDAQ/pymeasure#5) is also listed as an author.

Before: the plugin depended on nupylab, installed from GitHub, and the Eurotherm3200Series actuator was still the template (moves raised NotImplementedError).

After: the actuator uses pymeasure.instruments.eurotherm.Eurotherm3216 on a SerialAdapter. Moving writes the remote (comms) setpoint, refreshed every second, instead of the target setpoint, which is stored in EEPROM (about 100,000 writes, per the Eurotherm manuals); closing stores the last value as target setpoint and returns to the local setpoint, and a 'Setpoint' setting switches back to writing the target setpoint. The actuator has a single axis (one furnace per plugin instance), the unused Segment_000..007 axes are dropped. Stopping holds the current temperature, the PID parameters (proportional band, integral and derivative times) are shown and editable in the settings, and closing releases the serial port. Units are °C.

How: pyproject.toml installs PyMeasure from the PyMoDAQ fork branch feature/eurotherm-drivers (PyMoDAQ/pymeasure#5) until the drivers are in a PyMeasure release; the dependency then becomes a plain pymeasure>=<version>. The move and PID logic is ported from Adélaïs Bruel's work on adelaisbruel/pymodaq_plugins_eurotherm (feature/eurotherm-dev), adapted to the PyMeasure properties. Not ported from it: the fixed scaling offset of 273 set at init, close setting the setpoint to 30 °C, and move_home going to 27 °C; move_home is still the template stub.

Tested: pytest (3 passed, 1 skipped); check_plugin passes with 15 TODOs left instead of 30. Not tested on hardware.

🤖 Generated with Claude Code

https://claude.ai/code/session_01DEVtMjKj8sTCBv7uiR4gzQ


Generated by Claude Code

The Eurotherm3200Series actuator now builds pymeasure's Eurotherm3216 on
a SerialAdapter. PyMeasure is installed from the PyMoDAQ fork branch
until the drivers are released upstream.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DEVtMjKj8sTCBv7uiR4gzQ
@seb5g seb5g changed the title Use the PyMeasure Eurotherm driver instead of nupylab Use the PyMeasure Eurotherm driver and implement setpoint moves Oct 12, 2026
Ported from adelaisbruel/pymodaq_plugins_eurotherm (feature/eurotherm-dev)
onto the PyMeasure driver: move_abs/move_rel set the target setpoint,
stop_motion holds the current temperature, the PID parameters are exposed
as settings, and close releases the serial port.

Co-authored-by: Adélaïs Bruel <adelais.bruel@gmail.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DEVtMjKj8sTCBv7uiR4gzQ
@seb5g
seb5g force-pushed the feature/pymeasure-eurotherm branch from d85efc6 to f8dbb07 Compare October 12, 2026 15:52
claude and others added 4 commits October 12, 2026 15:59
Co-authored-by: Adélaïs Bruel <adelais.bruel@gmail.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DEVtMjKj8sTCBv7uiR4gzQ
Co-authored-by: Pierre-Anne Bausson <bausson.pierreanne@gmail.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DEVtMjKj8sTCBv7uiR4gzQ
The target setpoint is stored in EEPROM, limited to about 100,000 writes.
By default moves now write the remote (comms) setpoint, refreshed every
second as the controller expects it at least every 5 s. Closing stores the
last value as target setpoint and goes back to the local setpoint. The
previous behaviour stays available as 'Target (stored)'.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DEVtMjKj8sTCBv7uiR4gzQ
The eight Segment axes were never used and a slave axis would have written the
target setpoint, hence the EEPROM. One furnace is one plugin instance.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DEVtMjKj8sTCBv7uiR4gzQ
@seb5g
seb5g marked this pull request as ready for review October 13, 2026 22:12
@seb5g
seb5g merged commit 483136a into 5.0.x Oct 13, 2026
7 checks passed
@seb5g
seb5g deleted the feature/pymeasure-eurotherm branch October 13, 2026 22:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants