UniteLabs
Reference

QInstruments ColdPlate

Get a QInstruments ColdPlate or ColdPlate slim connected through GroundControl and hold a first target temperature from Python.

The ColdPlate is a Peltier plate without a shaker. It is driven by the same QINSTRUMENTS BioShake connector as the shakers; only the temperature and configuration modules apply.

The code on this page is not yet run by the docs pipeline; it follows the connector's public interface (unitelabs-qinstruments-bioshake 0.3.0). It gains a "tested against" label once the snippet pipeline lands.

What you need

ItemDetail
InstrumentColdPlate or ColdPlate slim, powered on, with airflow to its fans
CableThe USB (RS-232) cable QInstruments ships
ConnectorQINSTRUMENTS BioShake from the UniteLabs registry
Vendor softwareNone
MachineWindows, Linux or macOS running GroundControl
AccessA tenant and the SDK installed — see Setup

Install and configure the connector

  1. In GroundControl, add a connector and pick QINSTRUMENTS BioShake (how to add a connector).
  2. Configuration:
    FieldValue
    deviceColdPlate or ColdPlate slim
    serial_numberFrom the device label, or empty to skip the identity check
    portThe serial port, e.g. COM4 or /dev/ttyUSB0
    simulatedfalse
  3. Start the connector. It exposes ConfigurationService and TemperatureController; a shaking module on a ColdPlate means the wrong device was chosen.

First successful test

Set a target, switch control on, read one temperature sample, switch control off.

from unitelabs.sdk import AsyncApiClient

client = AsyncApiClient()
plate = await client.get_service_by_name(name="QINSTRUMENTS BioShake")

await plate.configuration_service.leave_eco_mode()
print(await plate.temperature_controller.get_minimum_allowed_temperature(),
      await plate.temperature_controller.get_maximum_allowed_temperature())

await plate.temperature_controller.set_target_temperature(target_temp=10)
await plate.temperature_controller.turn_temperature_control_on()

subscription = await plate.temperature_controller.subscribe_current_temperature()
async with subscription:
    print(await anext(subscription))  # one reading, in °C, about a second later

await plate.temperature_controller.turn_temperature_control_off()

Expected: the allowed range prints (device-specific), the plate starts cooling, one reading in °C prints, control switches off.

Known quirks and errors

You seeIt meansDo this
EcoModeActiveEco Mode rejects every commandleave_eco_mode() first
TemperatureControlAlreadyEnabled / …DisabledControl is already in the requested stateRead is_temperature_control_enabled() before toggling if you need to branch
OverheatError (33010 / 33020)Internal temperature too high; 33020 has tripped the fuseLet it cool; on 33020 power-cycle the device
FanErrorA fan stalled or its airway is blockedClear the airflow around the device
TecPowerErrorPeltier power supply faultCheck the power supply; contact QInstruments if it persists
Target rejectedOutside the device rangeRead get_minimum_allowed_temperature() / get_maximum_allowed_temperature()

More snippets

  • Wait until stable: loop over subscribe_current_temperature() and stop when the reading is within tolerance of get_target_temperature().
  • Calibration offsets: get_temperature_offset_at_40c_calibrationpoint() and the set_… counterparts — only after the vendor's calibration procedure.

Connector reference

The full list of modules and actions is generated from the connector's release data in a later step. Until then, browse them in GroundControl or with print(plate.temperature_controller.actions.keys()).

Vendor documentation

Temperature ranges, condensation handling and safety are in QInstruments' ColdPlate manual.

Last updated