Repository navigation
Conversation
Modbus RTU drivers built on Instrument, with a shared EurothermBase handling framing, CRC and the IEEE register region for floats and times. Segments, programs and setpoints are exposed as channels. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DEVtMjKj8sTCBv7uiR4gzQ
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DEVtMjKj8sTCBv7uiR4gzQ
EurothermBase now frames requests as Modbus TCP when the adapter is a TCPIP resource (or tcp=True), Modbus RTU otherwise. EurothermEPC3000 uses the register map of the EPC3008 PyMoDAQ plugin by LNicolasOnera. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DEVtMjKj8sTCBv7uiR4gzQ
Author
|
"Code Coverage on codecov" fails at the upload step, not in the tests: Codecov answers Generated by Claude Code |
Proportional band, integral and derivative times, at the addresses used by the adelaisbruel/pymodaq_plugins_eurotherm plugin. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DEVtMjKj8sTCBv7uiR4gzQ
…s values The 3500 register map follows PABausson/pymodaq_plugins_eurotherm (MIT). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DEVtMjKj8sTCBv7uiR4gzQ
Co-authored-by: Adélaïs Bruel <adelais.bruel@gmail.com> 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
seb5g
marked this pull request as ready for review
October 12, 2026 18:16
Every test is marked UNVERIFIED (non-strict xfail) until it passed on a real controller; each file carries a verification record to fill in. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DEVtMjKj8sTCBv7uiR4gzQ
Eurotherm manuals limit non-volatile memory to about 100,000 write cycles and recommend the remote (communications) setpoint for changing values. Add it to the 2200, 2400 and EPC3000 and the alternative setpoint to the 3500 loops, with the addresses not confirmed by a manual marked as such. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DEVtMjKj8sTCBv7uiR4gzQ
- Remove @Unverified from 22 passing tests on EPC3000 controller - Add hardware verification record: 2026-11-05, Axel, EPC3000, TCP 134.157.58.62 - test_ramp_units remains @Unverified: register 531 is read-only on this model Co-authored-by: Junie <junie@jetbrains.com>
Verify Eurotherm EPC3000 driver on real hardware (22/23 tests passed)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Before: Eurotherm controllers were only usable through the
nupylabdrivers (GitHub only, built on minimalmodbus, GPLv3), whichpymodaq_plugins_eurothermdepends on, or through ad-hoc pymodbus code for the EPC3008.After:
from pymeasure.instruments.eurotherm import Eurotherm2200, Eurotherm2400, Eurotherm3216, Eurotherm3500, EurothermEPC3000gives pymeasure-native drivers, usable with any pymeasure adapter and testable withexpected_protocol. Serial links use Modbus RTU, Ethernet (TCPIP::<ip>::502::SOCKET) uses Modbus TCP.How:
EurothermBase(Instrument)implements Modbus (functions 0x03 and 0x10) overwrite_bytes/read_bytes, with RTU framing (CRC16) or TCP framing (MBAP header), chosen from the resource string or thetcpargument. Commands are"<kind>,<address>[,<value>]"with kindI(16-bit register),F(float) orT(time in s); floats and times go to the IEEE region (0x8000 + 2*address). Properties are regularInstrument.control/measurement. 3216 program segments, 2400 setpoints, programs and their segments, and the two 3500 loops areChannels whose address offset is applied ininsert_id(nested for program → segment).Adélaïs Bruel (PID registers, plugin logic) and Pierre-Anne Bausson (3500 register map) are added to
AUTHORS.txt.Setpoints and EEPROM: the Eurotherm manuals limit the non-volatile memory to about 100,000 writes and recommend the remote (comms) setpoint for changing values. The docstrings say so, and
remote_setpointis available on the 2200, 2400, 3216 and EPC3000 (alternative_setpointon the 3500 loops). Its address is confirmed for the 3216 (26, rewrite within 5 s) and the EPC3000 (277, rewrite every second); for the 2200, 2400 and 3500 it is inferred and marked as such.Notes:
program_status: nupylab uses 1 reset, 2 run, 4 hold, 8 holdback, 16 complete, while lapkindm/eurotherm2000 uses 0 reset, 1 run, 2 hold, 3 complete for the same register. The driver follows nupylab; which one is right is not confirmed and could not be tested, as the docstring warns.manual_output(3) and the loop 2 rate limit disable (1102) are inferred.🤖 Generated with Claude Code
https://claude.ai/code/session_01DEVtMjKj8sTCBv7uiR4gzQ
Generated by Claude Code