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:
- Initialize instrument
- Pick up four tips
- Initialize instrument again
That worked correctly and discarded the tips to waste without crashing.
From the Hamilton USB trace, before the second initialization:
So all four tips were mounted.
Method Editor then sent:
C0DIid0229xp13400&yp4050 3425 2800 2175tp1970tz1870te2450tm0&tt04ti0
After this command, tips were still present:
Then Method Editor sent the actual discard command:
C0TRid0234xp13400&yp4050 3425 2800 2175tp1970tz1870th2450te2450tm1&ti0
And after that:
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
STARBackend.setup()discards mounted tips throughC0DI, unlike Hamilton Method Editor, causing crash at wasteHello, 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
C0DIto discard mounted tips during setup, while Hamilton Method Editor usesC0DIonly for initialization and then usesC0TRfor the actual tip discard.Hardware/configuration
xw13400→ tip waste X =1340.0 mmys180→ minimum raster pitch =18.0 mmObserved behavior in PyLabRobot
During
STARBackend.setup(), PyLabRobot does:initialize_pip()then sendsC0DIwith active channels and a deep discard range:This means setup uses DI as the mounted-tip discard path.
Comparison with Hamilton Method Editor
I ran this sequence in Hamilton Method Editor:
That worked correctly and discarded the tips to waste without crashing.
From the Hamilton USB trace, before the second initialization:
So all four tips were mounted.
Method Editor then sent:
After this command, tips were still present:
Then Method Editor sent the actual discard command:
And after that:
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