Upgrade Agilent VSpin and Access2 protocol drivers - #1227
Conversation
|
What would speak against making a Windows-specific exception for VSpin and allowing it to On Windows, the VSpin can appear as a normal virtual COM port. If PyLabRobot could use that directly, users would not have to replace the FTDI driver with I know, this is mainly an operational concern, still we Windows users already suffer enough through Microslop, why make us perform driver archaeology before spinning a plate? ;) This would also align well with PyLabRobot’s existing IO model, since Something like: VSpin(name="vspin", device_id="FTDI_SERIAL") # unchanged default FTDI path
VSpin(name="vspin", serial_port="COM7") # optional VCP path |
Summary
This PR substantially upgrades PyLabRobot's Agilent VSpin centrifuge and Access2 loader support
using complete protocol and sequencing knowledge from the
vspin-cockpitproject.The existing PLR APIs and FTDI transports are retained, while opaque wire captures are replaced
with named protocol operations, typed status decoding, explicit trajectory calculations, bounded
polling, and safer state-confirmed workflows.
Thanks
Special thanks to Reed Kelso for generously sharing his work on the Agilent VSpin and Access2 in the
vspin-cockpitrepository and allowing us to adapt therelevant logic for PyLabRobot.
The reference implementation was pinned during development to
2e6ff6b9327cb66f7889d76cdefefc2a5b5652b2.A durable acknowledgement is also included in the package-local VSpin README.
VSpin changes
mask.
topology validation, and final 57,600-baud setup.
encoder-distance conversions.
MOVE_DONEand zero measured velocity.Access2 changes
ReaderandWriterhelpers throughout.partial-read handling.
adjustments.
TCP Access2 support is intentionally deferred. A future implementation can use
pylabrobot.io.Socketwithout changing the existing FTDI path.Compatibility
The principal PLR interfaces remain intact:
VSpin.spin(g, duration, acceleration, deceleration)go_to_bucket1()andgo_to_bucket2()Access2.load()andAccess2.unload()Internal helpers and protocol names were refactored repository-wide without deprecation aliases.