CO-RE 96 head initialization issue

I’m having a consistent issue with using the CO-RE 96 head immediately after initialization after a power cycle. When attempting to pick up tips at the beginning of a method in this scenario, I get the following error:

---------------------------------------------------------------------------
STARFirmwareError                         Traceback (most recent call last)
Cell In[11], line 1
----> 1 await lh.pick_up_tips96(lh.get_resource('tips_01'))

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/liquid_handler.py:1056, in LiquidHandler.pick_up_tips96(self, tip_rack, offset, **backend_kwargs)
   1054       tip_spot.tracker.rollback()
   1055     self.head96[i].rollback()
-> 1056   self._trigger_callback(
   1057     "pick_up_tips96",
   1058     liquid_handler=self,
   1059     pickup=pickup_operation,
   1060     error=error,
   1061     **backend_kwargs,
   1062   )
   1063 else:
   1064   for i, tip_spot in enumerate(tip_rack.get_all_items()):

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/liquid_handler.py:1654, in LiquidHandler._trigger_callback(self, method_name, error, *args, **kwargs)
   1652   callback(self, *args, error=error, **kwargs)
   1653 elif error is not None:
-> 1654   raise error

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/liquid_handler.py:1047, in LiquidHandler.pick_up_tips96(self, tip_rack, offset, **backend_kwargs)
   1045 pickup_operation = PickupTipRack(resource=tip_rack, offset=offset)
   1046 try:
-> 1047   await self.backend.pick_up_tips96(
   1048     pickup=pickup_operation,
   1049     **backend_kwargs
   1050   )
   1051 except Exception as error:  # pylint: disable=broad-except
   1052   for i, tip_spot in enumerate(tip_rack.get_all_items()):

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/backends/hamilton/STAR.py:61, in need_iswap_parked.<locals>.wrapper(self, *args, **kwargs)
     58 if self.iswap_installed and not self.iswap_parked:
     59   await self.park_iswap()
---> 61 result = await method(self, *args, **kwargs) # pylint: disable=not-callable
     63 return result

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/backends/hamilton/STAR.py:1970, in STAR.pick_up_tips96(self, pickup, tip_pickup_method, z_deposit_position, minimum_height_command_end, minimum_traverse_height_at_beginning_of_a_command)
   1967 ttti = await self.get_or_assign_tip_type_index(tip_a1)
   1968 position = tip_spot_a1.get_absolute_location() + tip_spot_a1.center() + pickup.offset
-> 1970 return await self.pick_up_tips_core96(
   1971   x_position=int(position.x * 10),
   1972   x_direction=0,
   1973   y_position=int(position.y * 10),
   1974   tip_type_idx=ttti,
   1975   tip_pickup_method=tip_pickup_method,
   1976   z_deposit_position=z_deposit_position,
   1977   minimum_height_command_end=minimum_height_command_end,
   1978   minimum_traverse_height_at_beginning_of_a_command=
   1979     minimum_traverse_height_at_beginning_of_a_command,
   1980 )

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/backends/hamilton/STAR.py:4825, in STAR.pick_up_tips_core96(self, x_position, x_direction, y_position, tip_type_idx, tip_pickup_method, z_deposit_position, minimum_traverse_height_at_beginning_of_a_command, minimum_height_command_end)
   4820 assert 0 <= minimum_traverse_height_at_beginning_of_a_command <= 3425, \
   4821   "minimum_traverse_height_at_beginning_of_a_command must be between 0 and 3425"
   4822 assert 0 <= minimum_height_command_end <= 3425, \
   4823   "minimum_height_command_end must be between 0 and 3425"
-> 4825 return await self.send_command(
   4826   module="C0",
   4827   command="EP",
   4828   xs=f"{x_position:05}",
   4829   xd=x_direction,
   4830   yh=f"{y_position:04}",
   4831   tt=f"{tip_type_idx:02}",
   4832   wu=tip_pickup_method,
   4833   za=f"{z_deposit_position:04}",
   4834   zh=f"{minimum_traverse_height_at_beginning_of_a_command:04}",
   4835   ze=f"{minimum_height_command_end:04}",
   4836 )

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/backends/hamilton/base.py:193, in HamiltonLiquidHandler.send_command(self, module, command, tip_pattern, write_timeout, read_timeout, wait, fmt, **kwargs)
    171 """ Send a firmware command to the Hamilton machine.
    172 
    173 Args:
   (...)
    188   A dictionary containing the parsed response, or None if no response was read within `timeout`.
    189 """
    191 cmd, id_ = self._assemble_command(module=module, command=command, tip_pattern=tip_pattern,
    192   **kwargs)
--> 193 resp = await self._write_and_read_command(id_=id_, cmd=cmd, write_timeout=write_timeout,
    194                 read_timeout=read_timeout, wait=wait)
    195 if resp is not None and fmt is not None:
    196   return self._parse_response(resp, fmt)

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/backends/hamilton/base.py:220, in HamiltonLiquidHandler._write_and_read_command(self, id_, cmd, write_timeout, read_timeout, wait)
    218 fut = loop.create_future()
    219 self._start_reading(id_, loop, fut, cmd, read_timeout)
--> 220 result = await fut
    221 return cast(str, result)

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/backends/hamilton/base.py:293, in HamiltonLiquidHandler._continuously_read(self)
    291 if response_id == id_:
    292   try:
--> 293     self.check_fw_string_error(resp)
    294   except Exception as e: # pylint: disable=broad-exception-caught
    295     loop.call_soon_threadsafe(fut.set_exception, e)

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/backends/hamilton/STAR.py:1181, in STAR.check_fw_string_error(self, resp)
   1172   if error.message == "Unknown parameter":
   1173     # temp. disabled until we figure out how to handle async in parse response (the
   1174     # background thread does not have an event loop, and I'm not sure if it should.)
   (...)
   1177 
   1178     # pylint: disable=unnecessary-dict-index-lookup
   1179     he[module_name].message += " (call lh.backend.request_name_of_last_faulty_parameter)"
-> 1181 raise he

STARFirmwareError: STARFirmwareError(errors={'CoRe 96 Head': HardwareError('Dispensing drive not initialized')}, raw_response=C0EPid0008er99/00 H002/51)

I’ve been able to work around this for the time being by plugging the robot back into the VENUS computer and running a simple method that does an initialization through VENUS itself, and then plugging back into the PLR computer.

However, this is usually (always?) followed by another issue that seems related. Essentially the head will now pick up the tips just fine, but when rising out of the tip rack, the head does not go up high enough in the z direction, so when it attempts to traverse to an aspiration it crashes into the tip rack it just picked up from. I’ve figured out I can get around this by testing a tip pickup after doing the above initialization workaround, and seeing if it rises high enough. If not, I restart the kernel + clear cells, redo the lh.setup(), and then try again. Usually this now results in the head rising the necessary height. This crash issue throws this error once it crashes, if helpful:

INFO:pylabrobot:Sent command: C0EPid0042xs01179xd0yh1458tt01wu0za2164zh2450ze2450
DEBUG:pylabrobot:Starting reading thread...
commencing cycle:  1
DEBUG:pylabrobot:Received data: bytearray(b'')
INFO:pylabrobot:Received response: 
DEBUG:pylabrobot:Received data: bytearray(b'')
INFO:pylabrobot:Received response: 
DEBUG:pylabrobot:Received data: bytearray(b'C0EPid0042er00/00')
INFO:pylabrobot:Received response: C0EPid0042er00/00
DEBUG:pylabrobot:Reading thread stopped.
INFO:pylabrobot:Sent command: C0EAid0043aa0xs03880xd0yh5300zh2450ze2450lz1999zt1881pp0100zm1269zv0032zq06180iw000ix0fh000af06750ag2500vt050bv00000wv00050cm0cs1bs0020wh10hv00000hc00hp000mj000hs1200cwFFFFFFFFFFFFFFFFFFFFFFFFcr000cj0cx0
DEBUG:pylabrobot:Starting reading thread...
DEBUG:pylabrobot:Received data: bytearray(b'C0EAid0043er99/00 X002/52 H002/57')
INFO:pylabrobot:Received response: C0EAid0043er99/00 X002/52 H002/57
DEBUG:pylabrobot:Reading thread stopped.
---------------------------------------------------------------------------
STARFirmwareError                         Traceback (most recent call last)
Cell In[35], line 2
      1 ## Run it
----> 2 await growth_cycles(num_cycles)

Cell In[9], line 14, in growth_cycles(cycles)
     12 if cycle == 0:
     13     initial_vol = growth_vol+read_vol
---> 14     await aspirate_trough(initial_vol)
     15     await initiate_growth(growth_vol)
     16     await dispense_reader(read_vol)

Cell In[6], line 18, in aspirate_trough(vol)
     16 async def aspirate_trough(vol):
     17     await lh.pick_up_tips96(lh.get_resource('tips_01'))
---> 18     await lh.aspirate_plate(lh.get_resource('trough_plate'), volume=vol, flow_rates=aspirate_speed)

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/liquid_handler.py:1259, in LiquidHandler.aspirate_plate(self, plate, volume, flow_rate, end_delay, blow_out_air_volume, **backend_kwargs)
   1257       well.tracker.rollback()
   1258     channel.get_tip().tracker.rollback()
-> 1259   self._trigger_callback(
   1260     "aspirate_plate",
   1261     liquid_handler=self,
   1262     aspiration=aspiration_plate,
   1263     error=error,
   1264     **backend_kwargs,
   1265   )
   1266 else:
   1267   for channel, well in zip(self.head96.values(), plate.get_all_items()):

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/liquid_handler.py:1654, in LiquidHandler._trigger_callback(self, method_name, error, *args, **kwargs)
   1652   callback(self, *args, error=error, **kwargs)
   1653 elif error is not None:
-> 1654   raise error

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/liquid_handler.py:1253, in LiquidHandler.aspirate_plate(self, plate, volume, flow_rate, end_delay, blow_out_air_volume, **backend_kwargs)
   1241 aspiration_plate = AspirationPlate(
   1242   resource=plate,
   1243   volume=volume,
   (...)
   1249   liquids=cast(List[List[Tuple[Optional[Liquid], float]]], all_liquids) # stupid
   1250 )
   1252 try:
-> 1253   await self.backend.aspirate96(aspiration=aspiration_plate, **backend_kwargs)
   1254 except Exception as error:  # pylint: disable=broad-except
   1255   for channel, well in zip(self.head96.values(), plate.get_all_items()):

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/backends/hamilton/STAR.py:61, in need_iswap_parked.<locals>.wrapper(self, *args, **kwargs)
     58 if self.iswap_installed and not self.iswap_parked:
     59   await self.park_iswap()
---> 61 result = await method(self, *args, **kwargs) # pylint: disable=not-callable
     63 return result

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/backends/hamilton/STAR.py:2150, in STAR.aspirate96(self, aspiration, jet, blow_out, use_lld, liquid_height, air_transport_retract_dist, hlc, aspiration_type, minimum_traverse_height_at_beginning_of_a_command, minimal_end_height, lld_search_height, maximum_immersion_depth, tube_2nd_section_height_measured_from_zm, tube_2nd_section_ratio, immersion_depth, immersion_depth_direction, liquid_surface_sink_distance_at_the_end_of_aspiration, transport_air_volume, pre_wetting_volume, gamma_lld_sensitivity, swap_speed, settling_time, homogenization_volume, homogenization_cycles, homogenization_position_from_liquid_surface, surface_following_distance_during_homogenization, speed_of_homogenization, limit_curve_index)
   2134 pull_out_distance_to_take_transport_air_in_function_without_lld = \
   2135   int(air_transport_retract_dist * 10)
   2137 # Was this ever true? Just copied it over from pyhamilton. Could have something to do with
   2138 # the liquid classes and whether blow_out mode is enabled.
   2139 # # Unfortunately, `blow_out_air_volume` does not work correctly, so instead we aspirate air
   (...)
   2147 #     aspiration_volumes=int(blow_out_air_volume * 10)
   2148 #   )
-> 2150 return await self.aspirate_core_96(
   2151   x_position=int(position.x * 10),
   2152   x_direction=0,
   2153   y_positions=int(position.y * 10),
   2154   aspiration_type=aspiration_type,
   2155 
   2156   minimum_traverse_height_at_beginning_of_a_command=
   2157    minimum_traverse_height_at_beginning_of_a_command,
   2158   minimal_end_height=minimal_end_height,
   2159   lld_search_height=lld_search_height,
   2160   liquid_surface_at_function_without_lld=liquid_surface_at_function_without_lld,
   2161   pull_out_distance_to_take_transport_air_in_function_without_lld=
   2162    pull_out_distance_to_take_transport_air_in_function_without_lld,
   2163   maximum_immersion_depth=maximum_immersion_depth,
   2164   tube_2nd_section_height_measured_from_zm=tube_2nd_section_height_measured_from_zm,
   2165   tube_2nd_section_ratio=tube_2nd_section_ratio,
   2166   immersion_depth=immersion_depth,
   2167   immersion_depth_direction=immersion_depth_direction,
   2168   liquid_surface_sink_distance_at_the_end_of_aspiration=
   2169    liquid_surface_sink_distance_at_the_end_of_aspiration,
   2170   aspiration_volumes=aspiration_volumes,
   2171   aspiration_speed=flow_rate,
   2172   transport_air_volume=transport_air_volume,
   2173   blow_out_air_volume=blow_out_air_volume,
   2174   pre_wetting_volume=pre_wetting_volume,
   2175   lld_mode=int(use_lld),
   2176   gamma_lld_sensitivity=gamma_lld_sensitivity,
   2177   swap_speed=swap_speed,
   2178   settling_time=settling_time,
   2179   homogenization_volume=homogenization_volume,
   2180   homogenization_cycles=homogenization_cycles,
   2181   homogenization_position_from_liquid_surface=
   2182    homogenization_position_from_liquid_surface,
   2183   surface_following_distance_during_homogenization=
   2184    surface_following_distance_during_homogenization,
   2185   speed_of_homogenization=speed_of_homogenization,
   2186   channel_pattern=channel_pattern,
   2187   limit_curve_index=limit_curve_index,
   2188   tadm_algorithm=False,
   2189   recording_mode=0,
   2190 )

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/backends/hamilton/STAR.py:5026, in STAR.aspirate_core_96(self, aspiration_type, x_position, x_direction, y_positions, minimum_traverse_height_at_beginning_of_a_command, minimal_end_height, lld_search_height, liquid_surface_at_function_without_lld, pull_out_distance_to_take_transport_air_in_function_without_lld, maximum_immersion_depth, tube_2nd_section_height_measured_from_zm, tube_2nd_section_ratio, immersion_depth, immersion_depth_direction, liquid_surface_sink_distance_at_the_end_of_aspiration, aspiration_volumes, aspiration_speed, transport_air_volume, blow_out_air_volume, pre_wetting_volume, lld_mode, gamma_lld_sensitivity, swap_speed, settling_time, homogenization_volume, homogenization_cycles, homogenization_position_from_liquid_surface, surface_following_distance_during_homogenization, speed_of_homogenization, channel_pattern, limit_curve_index, tadm_algorithm, recording_mode)
   5023 channel_pattern_bin_str = reversed(["1" if x else "0" for x in channel_pattern])
   5024 channel_pattern_hex = hex(int("".join(channel_pattern_bin_str), 2)).upper()[2:]
-> 5026 return await self.send_command(
   5027   module="C0",
   5028   command="EA",
   5029   aa=aspiration_type,
   5030   xs=f"{x_position:05}",
   5031   xd=x_direction,
   5032   yh=f"{y_positions:04}",
   5033   zh=f"{minimum_traverse_height_at_beginning_of_a_command:04}",
   5034   ze=f"{minimal_end_height:04}",
   5035   lz=f"{lld_search_height:04}",
   5036   zt=f"{liquid_surface_at_function_without_lld:04}",
   5037   pp=f"{pull_out_distance_to_take_transport_air_in_function_without_lld:04}",
   5038   zm=f"{maximum_immersion_depth:04}",
   5039   zv=f"{tube_2nd_section_height_measured_from_zm:04}",
   5040   zq=f"{tube_2nd_section_ratio:05}",
   5041   iw=f"{immersion_depth:03}",
   5042   ix=immersion_depth_direction,
   5043   fh=f"{liquid_surface_sink_distance_at_the_end_of_aspiration:03}",
   5044   af=f"{aspiration_volumes:05}",
   5045   ag=f"{aspiration_speed:04}",
   5046   vt=f"{transport_air_volume:03}",
   5047   bv=f"{blow_out_air_volume:05}",
   5048   wv=f"{pre_wetting_volume:05}",
   5049   cm=lld_mode,
   5050   cs=gamma_lld_sensitivity,
   5051   bs=f"{swap_speed:04}",
   5052   wh=f"{settling_time:02}",
   5053   hv=f"{homogenization_volume:05}",
   5054   hc=f"{homogenization_cycles:02}",
   5055   hp=f"{homogenization_position_from_liquid_surface:03}",
   5056   mj=f"{surface_following_distance_during_homogenization:03}",
   5057   hs=f"{speed_of_homogenization:04}",
   5058   cw=channel_pattern_hex,
   5059   cr=f"{limit_curve_index:03}",
   5060   cj=tadm_algorithm,
   5061   cx=recording_mode,
   5062 )

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/backends/hamilton/base.py:193, in HamiltonLiquidHandler.send_command(self, module, command, tip_pattern, write_timeout, read_timeout, wait, fmt, **kwargs)
    171 """ Send a firmware command to the Hamilton machine.
    172 
    173 Args:
   (...)
    188   A dictionary containing the parsed response, or None if no response was read within `timeout`.
    189 """
    191 cmd, id_ = self._assemble_command(module=module, command=command, tip_pattern=tip_pattern,
    192   **kwargs)
--> 193 resp = await self._write_and_read_command(id_=id_, cmd=cmd, write_timeout=write_timeout,
    194                 read_timeout=read_timeout, wait=wait)
    195 if resp is not None and fmt is not None:
    196   return self._parse_response(resp, fmt)

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/backends/hamilton/base.py:220, in HamiltonLiquidHandler._write_and_read_command(self, id_, cmd, write_timeout, read_timeout, wait)
    218 fut = loop.create_future()
    219 self._start_reading(id_, loop, fut, cmd, read_timeout)
--> 220 result = await fut
    221 return cast(str, result)

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/backends/hamilton/base.py:293, in HamiltonLiquidHandler._continuously_read(self)
    291 if response_id == id_:
    292   try:
--> 293     self.check_fw_string_error(resp)
    294   except Exception as e: # pylint: disable=broad-exception-caught
    295     loop.call_soon_threadsafe(fut.set_exception, e)

File ~/Documents/Lab/PyLabRobot/pylabrobot/pylabrobot/liquid_handling/backends/hamilton/STAR.py:1181, in STAR.check_fw_string_error(self, resp)
   1172   if error.message == "Unknown parameter":
   1173     # temp. disabled until we figure out how to handle async in parse response (the
   1174     # background thread does not have an event loop, and I'm not sure if it should.)
   (...)
   1177 
   1178     # pylint: disable=unnecessary-dict-index-lookup
   1179     he[module_name].message += " (call lh.backend.request_name_of_last_faulty_parameter)"
-> 1181 raise he

STARFirmwareError: STARFirmwareError(errors={'X-drives': HardwareError('Unknown trace information code 52'), 'CoRe 96 Head': HardwareError('Y drive movement error')}, raw_response=C0EAid0043er99/00 X002/52 H002/57)

Can you share the venus log of a run where initialization + tip pickup96/drop96 are successful? program files \ hamilton \ logfiles

Yep, see below. This is immediately after a power cycle, the method has three step:

Initialize
Pick up tips
Drop tips at pickup location

! 10:50:03.601 8AF#8000#00: USB Info: DEVICE_ARRIVAL: \\?\USB#VID_08AF&PID_8000#00#{bd0dab87-838b-44c5-a114-1cba5be0e45f}
< 10:50:56.048 8AF#8000#00: C0RQid0101
> 10:50:56.063 8AF#8000#00: C0RQid0101rq0000
< 10:50:56.063 8AF#8000#00: C0QBid0102
> 10:50:56.079 8AF#8000#00: C0QBid0102er00/00qb1
< 10:50:56.079 8AF#8000#00: C0RIid0103
> 10:50:56.095 8AF#8000#00: C0RIid0103er00/00si2018-09-27sn1487
< 10:50:56.095 8AF#8000#00: C0QMid0104
> 10:50:56.132 8AF#8000#00: C0QMid0104er00/00ka000003xt30xa30xw08000xl05xr00xm03500xx11400ys090xu3700xv3700yu0060kl360kc0yx0060ke00000000xn00xo00ym6065kr0km360
< 10:50:56.148 8AF#8000#00: C0RMid0105
> 10:50:56.195 8AF#8000#00: C0RMid0105er00/00kb01kp08 C00000 X00000 P10000 P20000 P30000 P40000 P50000 P60000 P70000 P80000 H00000
< 10:50:56.210 8AF#8000#00: C0RFid0106
> 10:50:56.226 8AF#8000#00: C0RFid0106er00/00rf7.5S 14 2017_09_26 (GRU C0 PLE)
< 10:50:56.226 8AF#8000#00: P1RFid0107
> 10:50:56.232 8AF#8000#00: P1RFid0107rf3.9S f 2016-06-02
< 10:50:56.232 8AF#8000#00: P1RJid0108
> 10:50:56.248 8AF#8000#00: P1RJid0108jd2020-06-10js1
< 10:50:56.248 8AF#8000#00: P2RFid0109
> 10:50:56.264 8AF#8000#00: P2RFid0109rf3.9S f 2016-06-02
< 10:50:56.264 8AF#8000#00: P2RJid0110
> 10:50:56.279 8AF#8000#00: P2RJid0110jd2020-06-10js1
< 10:50:56.279 8AF#8000#00: P3RFid0111
> 10:50:56.279 8AF#8000#00: P3RFid0111rf3.9S f 2016-06-02
< 10:50:56.279 8AF#8000#00: P3RJid0112
> 10:50:56.295 8AF#8000#00: P3RJid0112jd2020-06-10js1
< 10:50:56.295 8AF#8000#00: P4RFid0113
> 10:50:56.311 8AF#8000#00: P4RFid0113rf3.9S f 2016-06-02
< 10:50:56.311 8AF#8000#00: P4RJid0114
> 10:50:56.327 8AF#8000#00: P4RJid0114jd2020-06-10js1
< 10:50:56.333 8AF#8000#00: P5RFid0115
> 10:50:56.333 8AF#8000#00: P5RFid0115rf3.9S f 2016-06-02
< 10:50:56.333 8AF#8000#00: P5RJid0116
> 10:50:56.348 8AF#8000#00: P5RJid0116jd2020-06-10js1
< 10:50:56.348 8AF#8000#00: P6RFid0117
> 10:50:56.364 8AF#8000#00: P6RFid0117rf3.9S f 2016-06-02
< 10:50:56.364 8AF#8000#00: P6RJid0118
> 10:50:56.379 8AF#8000#00: P6RJid0118jd2020-06-10js1
< 10:50:56.379 8AF#8000#00: P7RFid0119
> 10:50:56.395 8AF#8000#00: P7RFid0119rf3.9S f 2016-06-02
< 10:50:56.395 8AF#8000#00: P7RJid0120
> 10:50:56.395 8AF#8000#00: P7RJid0120jd2020-06-10js1
< 10:50:56.395 8AF#8000#00: P8RFid0121
> 10:50:56.411 8AF#8000#00: P8RFid0121rf3.9S f 2016-06-02
< 10:50:56.411 8AF#8000#00: P8RJid0122
> 10:50:56.433 8AF#8000#00: P8RJid0122jd2020-06-10js1
< 10:50:56.433 8AF#8000#00: C0QBid0123
> 10:50:56.448 8AF#8000#00: C0QBid0123er00/00qb1
< 10:50:56.448 8AF#8000#00: X0RFid0124
> 10:50:56.448 8AF#8000#00: X0RFid0124rf1.4S 2012-04-25
< 10:50:56.464 8AF#8000#00: X0RJid0125
> 10:50:56.464 8AF#8000#00: X0RJid0125jd2020-06-10js1
< 10:50:56.464 8AF#8000#00: H0RFid0126
> 10:50:56.480 8AF#8000#00: H0RFid0126rf5.0S 2010-11-03 (H0 XE167)
< 10:50:56.480 8AF#8000#00: H0RJid0127
> 10:50:56.496 8AF#8000#00: H0RJid0127jd2020-06-10js1
< 10:50:56.496 8AF#8000#00: C0RMid0128
> 10:50:56.565 8AF#8000#00: C0RMid0128er00/00kb01kp08 C00000 X00000 P10000 P20000 P30000 P40000 P50000 P60000 P70000 P80000 H00000
< 10:50:56.580 8AF#8000#00: C0QMid0129
> 10:50:56.627 8AF#8000#00: C0QMid0129er00/00ka000003xt30xa30xw08000xl05xr00xm03500xx11400ys090xu3700xv3700yu0060kl360kc0yx0060ke00000000xn00xo00ym6065kr0km360
< 10:50:56.627 8AF#8000#00: H0QGid0130
> 10:50:56.633 8AF#8000#00: H0QGid0130qg2
< 10:50:56.633 8AF#8000#00: C0SRid0131
> 10:50:56.649 8AF#8000#00: C0SRid0131er00/00sr055
< 10:50:56.680 8AF#8000#00: C0RUid0132
> 10:50:56.712 8AF#8000#00: C0RUid0132er00/00ru00950 08000 30000 30000
< 10:51:08.208 8AF#8000#00: C0RVid0133vo00
> 10:51:08.271 8AF#8000#00: C0RVid0133er00/00vd2020-06-09 14:10vs1
< 10:51:08.271 8AF#8000#00: C0RVid0134vo01
> 10:51:08.340 8AF#8000#00: C0RVid0134er00/00vd2020-06-09 14:10vs1
< 10:51:08.340 8AF#8000#00: C0RSid0135
> 10:51:08.355 8AF#8000#00: C0RSid0135er00/00ts2020-06-09 14:21
< 10:51:08.355 8AF#8000#00: C0RIid0136
> 10:51:08.371 8AF#8000#00: C0RIid0136er00/00si2018-09-27sn1487
< 10:51:08.371 8AF#8000#00: C0RMid0137
> 10:51:08.440 8AF#8000#00: C0RMid0137er00/00kb01kp08 C00000 X00000 P10000 P20000 P30000 P40000 P50000 P60000 P70000 P80000 H00000
< 10:51:08.440 8AF#8000#00: P1RVid0138
> 10:51:08.456 8AF#8000#00: P1RVid0138na0000048580nb0000003118nc0000056682nd0000209828
< 10:51:08.456 8AF#8000#00: P2RVid0139
> 10:51:08.471 8AF#8000#00: P2RVid0139na0000028369nb0000003112nc0000037075nd0000084285
< 10:51:08.471 8AF#8000#00: P3RVid0140
> 10:51:08.493 8AF#8000#00: P3RVid0140na0000023841nb0000003105nc0000033656nd0000077230
< 10:51:08.493 8AF#8000#00: P4RVid0141
> 10:51:08.509 8AF#8000#00: P4RVid0141na0000027664nb0000003095nc0000036824nd0000087131
< 10:51:08.509 8AF#8000#00: P5RVid0142
> 10:51:08.525 8AF#8000#00: P5RVid0142na0000027451nb0000003095nc0000037019nd0000088311
< 10:51:08.525 8AF#8000#00: P6RVid0143
> 10:51:08.540 8AF#8000#00: P6RVid0143na0000014435nb0000003095nc0000024876nd0000059883
< 10:51:08.540 8AF#8000#00: P7RVid0144
> 10:51:08.556 8AF#8000#00: P7RVid0144na0000106107nb0000003101nc0000032191nd0000078895
< 10:51:08.556 8AF#8000#00: P8RVid0145
> 10:51:08.572 8AF#8000#00: P8RVid0145na0000117757nb0000003103nc0000041832nd0000180285
< 10:51:08.572 8AF#8000#00: P1VWid0146
> 10:51:08.587 8AF#8000#00: P1VWid0146er30
< 10:51:08.587 8AF#8000#00: P2VWid0147
> 10:51:08.599 8AF#8000#00: P2VWid0147er30
< 10:51:08.599 8AF#8000#00: P3VWid0148
> 10:51:08.599 8AF#8000#00: P3VWid0148er30
< 10:51:08.599 8AF#8000#00: P4VWid0149
> 10:51:08.616 8AF#8000#00: P4VWid0149er30
< 10:51:08.616 8AF#8000#00: P5VWid0150
> 10:51:08.632 8AF#8000#00: P5VWid0150er30
< 10:51:08.632 8AF#8000#00: P6VWid0151
> 10:51:08.648 8AF#8000#00: P6VWid0151er30
< 10:51:08.648 8AF#8000#00: P7VWid0152
> 10:51:08.648 8AF#8000#00: P7VWid0152er30
< 10:51:08.663 8AF#8000#00: P8VWid0153
> 10:51:08.663 8AF#8000#00: P8VWid0153er30
< 10:51:08.715 8AF#8000#00: C0TTid0154tt44tf1tl0570tv01750tg3tu0
> 10:51:08.747 8AF#8000#00: C0TTid0154er00/00
< 10:51:08.747 8AF#8000#00: C0TTid0155tt33tf0tl0319tv00700tg6tu0
> 10:51:08.778 8AF#8000#00: C0TTid0155er00/00
< 10:51:08.795 8AF#8000#00: C0TTid0156tt22tf0tl0424tv00650tg2tu0
> 10:51:08.818 8AF#8000#00: C0TTid0156er00/00
< 10:51:08.833 8AF#8000#00: C0TTid0157tt11tf0tl0490tv00150tg2tu1
> 10:51:08.849 8AF#8000#00: C0TTid0157er00/00
< 10:51:08.864 8AF#8000#00: C0TTid0158tt03tf1tl0219tv00100tg1tu0
> 10:51:08.896 8AF#8000#00: C0TTid0158er00/00
< 10:51:08.900 8AF#8000#00: C0TTid0159tt45tf1tl0870tv03450tg3tu0
> 10:51:08.932 8AF#8000#00: C0TTid0159er00/00
< 10:51:08.947 8AF#8000#00: C0TTid0160tt34tf0tl0235tv00010tg2tu0
> 10:51:08.979 8AF#8000#00: C0TTid0160er00/00
< 10:51:08.979 8AF#8000#00: C0TTid0161tt23tf1tl0424tv00600tg2tu0
> 10:51:09.016 8AF#8000#00: C0TTid0161er00/00
< 10:51:09.032 8AF#8000#00: C0TTid0162tt12tf0tl0490tv03500tg2tu1
> 10:51:09.048 8AF#8000#00: C0TTid0162er00/00
< 10:51:09.063 8AF#8000#00: C0TTid0163tt04tf0tl0871tv12500tg3tu0
> 10:51:09.099 8AF#8000#00: C0TTid0163er00/00
< 10:51:09.101 8AF#8000#00: C0TTid0164tt46tf0tl0290tv17200tg3tu1
> 10:51:09.133 8AF#8000#00: C0TTid0164er00/00
< 10:51:09.148 8AF#8000#00: C0TTid0165tt35tf0tl0570tv03500tg3tu0
> 10:51:09.179 8AF#8000#00: C0TTid0165er00/00
< 10:51:09.179 8AF#8000#00: C0TTid0166tt24tf0tl0820tv01800tg3tu1
> 10:51:09.210 8AF#8000#00: C0TTid0166er00/00
< 10:51:09.226 8AF#8000#00: C0TTid0167tt13tf0tl0820tv12500tg3tu1
> 10:51:09.258 8AF#8000#00: C0TTid0167er00/00
< 10:51:09.273 8AF#8000#00: C0TTid0168tt05tf1tl0871tv10650tg3tu0
> 10:51:09.289 8AF#8000#00: C0TTid0168er00/00
< 10:51:09.307 8AF#8000#00: C0TTid0169tt47tf0tl0465tv00010tg2tu0
> 10:51:09.339 8AF#8000#00: C0TTid0169er00/00
< 10:51:09.354 8AF#8000#00: C0TTid0170tt36tf0tl0870tv03850tg3tu0
> 10:51:09.370 8AF#8000#00: C0TTid0170er00/00
< 10:51:09.408 8AF#8000#00: C0TTid0171tt25tf0tl1080tv54200tg5tu0
> 10:51:09.423 8AF#8000#00: C0TTid0171er00/00
< 10:51:09.439 8AF#8000#00: C0TTid0172tt14tf0tl0220tv00010tg0tu0
> 10:51:09.470 8AF#8000#00: C0TTid0172er00/00
< 10:51:09.486 8AF#8000#00: C0TTid0173tt06tf0tl0519tv00700tg2tu1
> 10:51:09.508 8AF#8000#00: C0TTid0173er00/00
< 10:51:09.523 8AF#8000#00: C0TTid0174tt48tf0tl0829tv08000tg3tu1
> 10:51:09.555 8AF#8000#00: C0TTid0174er00/00
< 10:51:09.570 8AF#8000#00: C0TTid0175tt37tf0tl0319tv00700tg6tu0
> 10:51:09.602 8AF#8000#00: C0TTid0175er00/00
< 10:51:09.608 8AF#8000#00: C0TTid0176tt26tf0tl1080tv00010tg5tu0
> 10:51:09.639 8AF#8000#00: C0TTid0176er00/00
< 10:51:09.655 8AF#8000#00: C0TTid0177tt15tf0tl0256tv00350tg4tu0
> 10:51:09.671 8AF#8000#00: C0TTid0177er00/00
< 10:51:09.686 8AF#8000#00: C0TTid0178tt07tf0tl0519tv03500tg2tu1
> 10:51:09.717 8AF#8000#00: C0TTid0178er00/00
< 10:51:09.733 8AF#8000#00: C0TTid0179tt49tf0tl0820tv03020tg3tu1
> 10:51:09.764 8AF#8000#00: C0TTid0179er00/00
< 10:51:09.780 8AF#8000#00: C0TTid0180tt38tf0tl0490tv00650tg2tu1
> 10:51:09.796 8AF#8000#00: C0TTid0180er00/00
< 10:51:09.817 8AF#8000#00: C0TTid0181tt27tf0tl0190tv00010tg0tu0
> 10:51:09.849 8AF#8000#00: C0TTid0181er00/00
< 10:51:09.864 8AF#8000#00: C0TTid0182tt16tf0tl0251tv00350tg0tu0
> 10:51:09.880 8AF#8000#00: C0TTid0182er00/00
< 10:51:09.896 8AF#8000#00: C0TTid0183tt08tf0tl0871tv12500tg3tu1
> 10:51:09.934 8AF#8000#00: C0TTid0183er00/00
< 10:51:09.949 8AF#8000#00: C0TTid0184tt09tf0tl0731tv12500tg3tu0
> 10:51:09.965 8AF#8000#00: C0TTid0184er00/00
< 10:51:09.980 8AF#8000#00: C0TTid0185tt39tf0tl0820tv01200tg3tu1
> 10:51:10.018 8AF#8000#00: C0TTid0185er00/00
< 10:51:10.034 8AF#8000#00: C0TTid0186tt28tf0tl0626tv04000tg6tu0
> 10:51:10.050 8AF#8000#00: C0TTid0186er00/00
< 10:51:10.065 8AF#8000#00: C0TTid0187tt17tf0tl0251tv00350tg0tu0
> 10:51:10.096 8AF#8000#00: C0TTid0187er00/00
< 10:51:10.118 8AF#8000#00: C0TTid0188tt29tf1tl1080tv43670tg5tu0
> 10:51:10.134 8AF#8000#00: C0TTid0188er00/00
< 10:51:10.150 8AF#8000#00: C0TTid0189tt18tf1tl0210tv12500tg0tu1
> 10:51:10.181 8AF#8000#00: C0TTid0189er00/00
< 10:51:10.196 8AF#8000#00: C0TTid0190tt19tf0tl0534tv00670tg2tu0
> 10:51:10.219 8AF#8000#00: C0TTid0190er00/00
< 10:51:10.234 8AF#8000#00: C0TTid0191tt50tf0tl0820tv08000tg3tu1
> 10:51:10.266 8AF#8000#00: C0TTid0191er00/00
< 10:51:10.281 8AF#8000#00: C0TTid0192tt51tf0tl0111tv00010tg0tu0
> 10:51:10.315 8AF#8000#00: C0TTid0192er00/00
< 10:51:10.319 8AF#8000#00: C0TTid0193tt40tf0tl0820tv02000tg3tu1
> 10:51:10.350 8AF#8000#00: C0TTid0193er00/00
< 10:51:10.366 8AF#8000#00: C0TTid0194tt52tf0tl0430tv00010tg0tu0
> 10:51:10.397 8AF#8000#00: C0TTid0194er00/00
< 10:51:10.397 8AF#8000#00: C0TTid0195tt41tf0tl0820tv03460tg3tu1
> 10:51:10.438 8AF#8000#00: C0TTid0195er00/00
< 10:51:10.453 8AF#8000#00: C0TTid0196tt30tf0tl0519tv04000tg2tu0
> 10:51:10.469 8AF#8000#00: C0TTid0196er00/00
< 10:51:10.485 8AF#8000#00: C0TTid0197tt00tf0tl0519tv04000tg2tu0
> 10:51:10.523 8AF#8000#00: C0TTid0197er00/00
< 10:51:10.523 8AF#8000#00: C0TTid0198tt53tf0tl0485tv35000tg0tu0
> 10:51:10.554 8AF#8000#00: C0TTid0198er00/00
< 10:51:10.569 8AF#8000#00: C0TTid0199tt42tf0tl0490tv03550tg2tu1
> 10:51:10.601 8AF#8000#00: C0TTid0199er00/00
< 10:51:10.622 8AF#8000#00: C0TTid0200tt31tf0tl0422tv00650tg2tu0
> 10:51:10.646 8AF#8000#00: C0TTid0200er00/00
< 10:51:10.661 8AF#8000#00: C0TTid0201tt20tf0tl0343tv00650tg4tu0
> 10:51:10.677 8AF#8000#00: C0TTid0201er00/00
< 10:51:10.692 8AF#8000#00: C0TTid0202tt01tf1tl0519tv03600tg2tu0
> 10:51:10.731 8AF#8000#00: C0TTid0202er00/00
< 10:51:10.735 8AF#8000#00: C0TTid0203tt43tf0tl0820tv11350tg3tu1
> 10:51:10.766 8AF#8000#00: C0TTid0203er00/00
< 10:51:10.782 8AF#8000#00: C0TTid0204tt32tf0tl0219tv00150tg1tu0
> 10:51:10.813 8AF#8000#00: C0TTid0204er00/00
< 10:51:10.830 8AF#8000#00: C0TTid0205tt21tf0tl0442tv00610tg6tu1
> 10:51:10.848 8AF#8000#00: C0TTid0205er00/00
< 10:51:10.864 8AF#8000#00: C0TTid0206tt10tf0tl0519tv04000tg2tu0
> 10:51:10.895 8AF#8000#00: C0TTid0206er00/00
< 10:51:10.911 8AF#8000#00: C0TTid0207tt02tf0tl0219tv00150tg1tu0
> 10:51:10.933 8AF#8000#00: C0TTid0207er00/00
< 10:51:10.933 8AF#8000#00: C0DRid0208
> 10:51:10.949 8AF#8000#00: C0DRid0208er00/00
< 10:51:10.949 8AF#8000#00: C0CUid0209cu0
> 10:51:10.980 8AF#8000#00: C0CUid0209er00/00
< 10:51:10.980 8AF#8000#00: PXAFid0210af0
> 10:51:11.102 8AF#8000#00: PXAFid0210er00
< 10:51:11.117 8AF#8000#00: C0QSid0211
> 10:51:11.155 8AF#8000#00: C0QSid0211er00/00qs0 0 0 0 0 0 0 0
< 10:51:11.155 8AF#8000#00: C0RJid0212
> 10:51:11.202 8AF#8000#00: C0RJid0212er00/00tq1 1 1 1 1 1 1 1
< 10:51:11.202 8AF#8000#00: C0AWid0213
> 10:51:11.557 8AF#8000#00: C0AWid0213er00/00
< 10:51:11.557 8AF#8000#00: C0CBid0214bt7Fmq00
> 10:51:11.588 8AF#8000#00: C0CBid0214er00/00
< 10:51:11.720 8AF#8000#00: C0QWid0215
> 10:51:11.782 8AF#8000#00: C0QWid0215er00/00qw0
< 10:51:11.782 8AF#8000#00: C0RTid0216
> 10:51:11.829 8AF#8000#00: C0RTid0216er00/00rt0 0 0 0 0 0 0 0
< 10:51:11.829 8AF#8000#00: C0QHid0217
> 10:51:11.858 8AF#8000#00: C0QHid0217er00/00qh1
< 10:51:11.858 8AF#8000#00: C0VIid0218
> 10:51:27.208 8AF#8000#00: C0VIid0218er00/00
< 10:51:27.224 8AF#8000#00: C0DIid0219xp08000&yp4050 3782 3514 3246 2978 2710 2442 2175tp2450tz1220te2450tm1&tt04ti0
> 10:52:00.521 8AF#8000#00: C0DIid0219er00/00kz000 000 000 000 000 000 000 000vz000 000 000 000 000 000 000 000
< 10:52:00.536 8AF#8000#00: C0EIid0220xs00650xd1yh1183za2290ze2450
> 10:52:20.765 8AF#8000#00: C0EIid0220er00/00
< 10:52:20.780 8AF#8000#00: C0EPid0221xs01179xd0yh1458tt05wu0za2164zh2450ze2450
> 10:52:28.306 8AF#8000#00: C0EPid0221er00/00
< 10:52:28.344 8AF#8000#00: C0ERid0222xs01179xd0yh1458za2164zh2450ze2450
> 10:52:34.193 8AF#8000#00: C0ERid0222er00/00
< 10:52:34.315 8AF#8000#00: C0AWid0223
> 10:52:34.652 8AF#8000#00: C0AWid0223er00/00
< 10:52:34.668 8AF#8000#00: C0RTid0224
> 10:52:34.715 8AF#8000#00: C0RTid0224er00/00rt0 0 0 0 0 0 0 0
< 10:52:34.721 8AF#8000#00: C0QHid0225
> 10:52:34.737 8AF#8000#00: C0QHid0225er00/00qh0
< 10:52:34.752 8AF#8000#00: C0ZAid0226
> 10:52:34.900 8AF#8000#00: C0ZAid0226er00/00
< 10:52:34.900 8AF#8000#00: C0EVid0227
> 10:52:43.214 8AF#8000#00: C0EVid0227er00/00
< 10:52:43.214 8AF#8000#00: C0JEid0228
> 10:52:44.788 8AF#8000#00: C0JEid0228er00/00
< 10:52:44.788 8AF#8000#00: C0DRid0229
> 10:52:44.804 8AF#8000#00: C0DRid0229er00/00
< 10:52:44.804 8AF#8000#00: C0AZid0230
> 10:52:45.566 8AF#8000#00: C0AZid0230er00/00
< 10:52:45.581 8AF#8000#00: P1RVid0231
> 10:52:45.597 8AF#8000#00: P1RVid0231na0000048580nb0000003118nc0000056682nd0000209828
< 10:52:45.597 8AF#8000#00: P2RVid0232
> 10:52:45.603 8AF#8000#00: P2RVid0232na0000028369nb0000003112nc0000037075nd0000084285
< 10:52:45.603 8AF#8000#00: P3RVid0233
> 10:52:45.619 8AF#8000#00: P3RVid0233na0000023841nb0000003105nc0000033656nd0000077230
< 10:52:45.619 8AF#8000#00: P4RVid0234
> 10:52:45.635 8AF#8000#00: P4RVid0234na0000027664nb0000003095nc0000036824nd0000087131
< 10:52:45.635 8AF#8000#00: P5RVid0235
> 10:52:45.650 8AF#8000#00: P5RVid0235na0000027451nb0000003095nc0000037019nd0000088311
< 10:52:45.650 8AF#8000#00: P6RVid0236
> 10:52:45.666 8AF#8000#00: P6RVid0236na0000014435nb0000003095nc0000024876nd0000059883
< 10:52:45.666 8AF#8000#00: P7RVid0237
> 10:52:45.682 8AF#8000#00: P7RVid0237na0000106107nb0000003101nc0000032191nd0000078895
< 10:52:45.682 8AF#8000#00: P8RVid0238
> 10:52:45.704 8AF#8000#00: P8RVid0238na0000117757nb0000003103nc0000041832nd0000180285
< 10:52:45.704 8AF#8000#00: H0RVid0239
> 10:52:45.720 8AF#8000#00: H0RVid0239na0000004727nb0000004728nc0000008605nd0000009750
1 Like

Where is your 96 head waste location? Could you share a picture?

Unfortunately I don’t actually have a 96 waste slide for either STARlet we have.

where would you usually discard the tips?

For the purpose of getting methods to run, I set a default waste in VENUS from one of the two available options, see below photo for what I used.

In reality though for anything I’m doing right now, I prefer to just eject them back where I got them, so I haven’t actually dealt with this issue really. I’ve of course had a couple instances where the robot wants to eject the tips there after a fault of some sort or another, which I’ve dealt with by variously catching the tips in an empty rack (fun :laughing:) or letting them just drop onto the deck and cleaning them up.

2 Likes

initialize core96 head on STAR · PyLabRobot/pylabrobot@11ea4e5 · GitHub fixed it for our STARlet, but the trash position may be different compared to what you defined and is not currently dynamically loaded. Working on fixing it now.