Skip to content

Latest commit

 

History

History
183 lines (131 loc) · 6.03 KB

README.md

File metadata and controls

183 lines (131 loc) · 6.03 KB

Open Dataplate Controller

Open-source Python tooling and reverse-engineering notes for LHS-series digital hotplate / stirrer serial interfaces. This project packages a firmware-derived command set, an interactive REPL, a desktop GUI, protocol documentation, and annotated ROM notes.

The recovered firmware family appears across several rebrands and close variants, including Cole-Parmer Dataplate instruments, Omega LHS units, and Barnstead Thermolyne PMC 700-series hotplate/stirrers. Treat this as alpha-quality reverse-engineering work: verify the serial behavior on the unit in front of you before trusting automation.

Project Status

  • The Python client implements the command families recovered from the HC11 ROM and emulator traces.
  • Live probing of at least one related unit also exposed an older line-oriented protocol family that is not fully reconciled with the recovered ROM path.
  • The documentation includes both the implemented firmware-backed protocol and the remaining reverse-engineering caveats.
  • Heating and stirring commands can create real hazards. Supervise hardware tests and start with read-only probes.

Features

  • Firmware-backed Python client for the complete known SCI command set
  • Interactive REPL with:
    • command help (help, help a, help -F)
    • direct execution of every known protocol command
    • raw ASCII / hex / byte sending
    • COM-port listing and switching
    • interface verification (F vs diagnostic s)
  • Desktop GUI with:
    • plate temperature, stir, and ramp controls
    • delay-on and off-after timers for plate and stir actions
    • live snapshot polling
    • temperature and stir history graphs
    • start/stop capture logging for snapshot history and command history
    • CSV-backed hotplate programs
    • an integrated REPL pane
  • Clean protocol documentation
  • Annotated disassembly excerpts and a cleaned ROM listing copy

Installation

python -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install -e .

Supported Variants

This project is aimed at the HC11-based LHS-family controller used in several branded products. Known or likely compatible labels include:

  • Cole-Parmer Dataplate
  • Cole-Parmer 04644
  • Omega LHS
  • Barnstead Thermolyne PMC 700 series

Serial behavior should always be verified on the specific unit in front of you before trusting automation. Hardware options, firmware revisions, and front-panel labeling can differ even when the underlying command set looks similar.

Electrical Interface

The tested Cole-Parmer 04644 uses a 4-position RJ11 jack on the back panel. With the plate upright and viewed from the rear, the pins run left to right as:

Rear view, plate upright

+---RJ11 jack---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
  |   |   |   |
  |   |   |   +-- Plate Tx  -> connect to controller/driver Rx
  |   |   +------ GND
  |   +---------- GND
  +-------------- Plate Rx  <- connect to controller/driver Tx

The plate-side serial path is electrically inverted relative to a plain TTL UART. In practice you need one of these:

  • an inverting RS-232 line driver/receiver such as the onboard SP232ACP
  • or a TTL serial adapter with both Rx and Tx configured as inverted

For the SP232ACP, the important operating points are:

  • RS-232 receiver input range: -15 V to +15 V
  • receiver threshold region: roughly 0.8 V to 2.4 V
  • typical receiver switching points at 5 V: about 1.2 V low and 1.7 V high
  • typical hysteresis: about 0.5 V
  • RS-232 transmit swing: about +/-6.5 V typical, +/-5.0 V minimum into a 3 kOhm load

That inversion requirement is why an FT232-class adapter may appear to "work" electrically only after enabling inverted Rx and Tx in its EEPROM settings, or after placing a proper inverting line driver between the adapter and the plate.

Quick Start

List ports:

lhs-hotplate repl --list-ports

Run the REPL:

lhs-hotplate repl --port COM3

If you are working with a close variant that uses a different clock path, you can override the default 300 baud:

lhs-hotplate repl --port COM3 --baud 600

Run the GUI:

lhs-hotplate gui

Standalone Windows App

This repo can also produce a standalone Windows GUI bundle that does not require a separate Python installation on the target machine.

Build it from the project root with:

.\packaging\windows\build_windows_app.ps1

If PyInstaller is not already installed in the selected Python environment, you can let the script install it automatically:

.\packaging\windows\build_windows_app.ps1 -InstallBuildDeps

The build script creates:

  • release/windows-app/LHS-Dataplate-046440-Hotplate-Control-Panel\
  • release/windows-app/LHS-Dataplate-046440-Hotplate-Control-Panel.zip
  • release/windows-app/installer/*.msi

The packaged app entry point is:

LHS-Dataplate-046440-Hotplate-Control-Panel.exe

The installer artifact is a normal Windows MSI package that installs the app under %LOCALAPPDATA%\Programs\LHS-Dataplate-046440-Hotplate-Control-Panel and creates a Start Menu shortcut.

REPL Examples

help
help F
help baud
ports
open COM3
baud
baud 300
verify
F
k
m
a 100
A 50 46
hex 46
ascii F
bytes 0x46

Inside the REPL, baud shows the current rate and baud 600 changes it. The default remains 300 baud because that is what the tested Cole-Parmer 04644 uses.

CSV Program Format

Programs are saved as CSV with these columns:

offset_s,plate_c,probe_c,stir_rpm,ramp_c_per_hour,comment

See examples/sample_program.csv.

Documentation

Safety

This software can control a heater and stir motor. Review commands carefully, verify limits on your specific instrument, and supervise early tests. This project is not affiliated with or endorsed by the instrument manufacturers.