Skip to content

bug: ValueError -- A absorbanceReaderType cannot be loaded into slot 6 [running in simulation mode] #19961

@sgbaird

Description

@sgbaird

Overview

When running in simulation, can't load an absorbance reader (works when running in a protocol run)

Steps to reproduce

import re
import os

SIMULATION_MODE = os.getenv("SIMULATION_MODE", "true").lower() == "true"

if SIMULATION_MODE:
    print("Running in simulation mode.")
    import opentrons.simulate

    protocol = opentrons.simulate.get_protocol_api("2.21")
else:
    print("WARNING: Running on physical hardware.")
    import opentrons.execute

    protocol = opentrons.execute.get_protocol_api("2.21")

print(f"Protocol API {protocol.api_version} loaded.")

# NOTE: 2.16 tested with https://github.com/AccelerationConsortium/ac-training-lab/blob/3988313d80d3d9b1f2a795ceb8701194af00d8e3/src/ac_training_lab/ot-2/_scripts/OT2mqtt.py # noqa: E501
# protocol = opentrons.execute.get_protocol_api("2.16")

pr_mod = protocol.load_module(module_name="absorbanceReaderV1", location="C3")

pr_mod.close_lid()
pr_mod.initialize(
    mode="single", wavelengths=[600]
)  # can add (reference_wavelength=) for normalization (reference wavelenth data will be subtracted from wavelength indicated)
pr_data = pr_mod.read()
print(pr_data)
pr_data[600]["A1"]
pr_data = pr_mod.read(export_filename="raw_absorbance_in")  # CSV file

Current behavior

Exception has occurred: ProtocolCommandFailedError       (note: full exception trace is shown but execution is paused at: _run_module_as_main)
Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): PythonException: ValueError: A absorbanceReaderType cannot be loaded into slot 6
  File "/opt/anaconda3/envs/opentrons/lib/python3.12/site-packages/opentrons/protocol_engine/clients/transports.py", line 84, in execute_command
    original_error=error,

                message=f"{error.errorType}: {error.detail}",

            )
  File "/opt/anaconda3/envs/opentrons/lib/python3.12/site-packages/opentrons/protocol_engine/clients/sync_client.py", line 126, in execute_command_without_recovery
    return self._transport.execute_command(create_request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/anaconda3/envs/opentrons/lib/python3.12/site-packages/opentrons/protocol_api/core/engine/protocol.py", line 724, in load_module
    cmd.LoadModuleParams(

                model=EngineModuleModel(model),

                location=DeckSlotLocation(slotName=normalized_deck_slot),

            )

        )
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/anaconda3/envs/opentrons/lib/python3.12/site-packages/opentrons/protocol_api/protocol_context.py", line 1035, in load_module
    model=requested_model,

            deck_slot=deck_slot,

            configuration=configuration,

        )
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/anaconda3/envs/opentrons/lib/python3.12/site-packages/opentrons/protocols/api_support/util.py", line 389, in _check_version_wrapper
    return decorated_obj(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/zeqingbao/Documents/GitHub/drug_surfactant/experiments/20250912-Plate Interpretation/absorbance_sim_reproducer.py", line 22, in <module>
    pr_mod = protocol.load_module(module_name="absorbanceReaderV1", location="C3")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/anaconda3/envs/opentrons/lib/python3.12/runpy.py", line 88, in _run_code
    exec(code, run_globals)
  File "/opt/anaconda3/envs/opentrons/lib/python3.12/runpy.py", line 198, in _run_module_as_main (Current frame)
    return _run_code(code, main_globals, None,
opentrons.protocol_engine.errors.error_occurrence.ProtocolCommandFailedError: Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): PythonException: ValueError: A absorbanceReaderType cannot be loaded into slot 6

Expected behavior

Allow the initialization at that slot

Operating system

None

System and robot setup or anything else?

Running directly on an OT-Flex via SSH:

python absorbance_sim_reproducer.py

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions