Skip to content

Difference between Hamilton Method Editor initialization and PLR initialization #1159

Description

@HaamsRee

STARBackend.setup() discards mounted tips through C0DI, unlike Hamilton Method Editor, causing crash at waste

Hello, it's me again with the weird half-sized 4-channel setup. Finally back to testing. This seems to be a separate problem.

Summary

On my Hamilton STAR, calling STARBackend.setup() while tips are mounted can crash during the pipetting-channel initialization/discard step. The robot moves to the firmware waste X position, then appears to shift further in X during the discard motion. The tips hit the slope of the waste/trash block instead of the flat part, Z touch does not trigger normally, and the channels continue down, bending the tips.

This seems to happen because PyLabRobot uses C0DI to discard mounted tips during setup, while Hamilton Method Editor uses C0DI only for initialization and then uses C0TR for the actual tip discard.

Hardware/configuration

  • Robot: Hamilton STAR
  • Pipetting channels: 4
  • Channel minimum Y spacing: 18 mm, not the usual 9 mm
  • Firmware extended configuration reports:
    • xw13400 → tip waste X = 1340.0 mm
    • ys180 → minimum raster pitch = 18.0 mm
  • The crash happens during initialization when tips are already mounted.

Observed behavior in PyLabRobot

During STARBackend.setup(), PyLabRobot does:

tip_presences = await self.request_tip_presence()

if not initialized or any(tip_presences):
  await self.initialize_pip()

initialize_pip() then sends C0DI with active channels and a deep discard range:

    await self.initialize_pipetting_channels(
      x_positions=[
        int(self.extended_conf.tip_waste_x_position * 10)
      ],  # Tip eject waste X position.
      y_positions=y_positions,
      begin_of_tip_deposit_process=int(self._channel_traversal_height * 10),
      end_of_tip_deposit_process=1220,
      z_position_at_end_of_a_command=3600,
      tip_pattern=[True] * self.num_channels,
      tip_type=4,  # TODO: get from tip types
      discarding_method=0,
    )

This means setup uses DI as the mounted-tip discard path.

Comparison with Hamilton Method Editor

I ran this sequence in Hamilton Method Editor:

  1. Initialize instrument
  2. Pick up four tips
  3. Initialize instrument again

That worked correctly and discarded the tips to waste without crashing.

From the Hamilton USB trace, before the second initialization:

C0RT ... rt1 1 1 1

So all four tips were mounted.

Method Editor then sent:

C0DIid0229xp13400&yp4050 3425 2800 2175tp1970tz1870te2450tm0&tt04ti0

After this command, tips were still present:

C0RT ... rt1 1 1 1

Then Method Editor sent the actual discard command:

C0TRid0234xp13400&yp4050 3425 2800 2175tp1970tz1870th2450te2450tm1&ti0

And after that:

C0RT ... rt0 0 0 0

So Method Editor does not discard mounted tips through C0DI. It runs it with tm0& (instead of tm1 for PLR), then discards using C0TR.

What I don't know is if Method Editor's pattern is universal or if I just have a special firmware/instrument config.

Here's the trace file.

HxUsbComm20260708.txt

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions