UniteLabs
Reference

QInstruments TurnStation

Get a QInstruments TurnStation connected through GroundControl, initialise it and turn a plate to a first position from Python.

The TurnStation rotates a plate between positions so a gripper can pick it up in a different orientation. It is driven by the QINSTRUMENTS BioShake connector; its own module is TurningController. Like the TiltStation it must be initialised after power-on.

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
InstrumentTurnStation, powered on, plate adapter mounted, clearance to rotate
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
    deviceTurnStation
    serial_numberFrom the device label, or empty to skip the identity check
    portThe serial port, e.g. COM6 or /dev/ttyUSB2
    simulatedfalse
  3. Start the connector. It exposes ConfigurationService and TurningController.

First successful test

Initialise, read the speed range and the current position, then move to a position.

from unitelabs.sdk import AsyncApiClient

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

await turn.configuration_service.leave_eco_mode()
await turn.turning_controller.initialize_turnstation()   # required after every power-on

print(await turn.turning_controller.get_minimum_speed(), await turn.turning_controller.get_maximum_speed())
print(await turn.turning_controller.get_current_position())

# Positions are device-defined: read the accepted values from the action's own parameter schema.
print(await turn.turning_controller.set_move_to_position.parameters)

Then call set_move_to_position(position=…) with one of the listed values and read get_current_position() again.

Expected: initialisation homes the station; the speed range and position print; after the move the position reads as the one you requested.

Known quirks and errors

You seeIt meansDo this
InitializationRequiredErrorA move was requested before initialize_turnstation() since power-onInitialise first
TurnInitializationError (515, 518)Initialisation failed after a preceding error or a motor stallClear the rotation path, power-cycle, initialise again
TurnError (507)Positioning error in the magnetic measurement systemRetry after initialize_turnstation(); contact QInstruments if it repeats
ConfigurationModeAlreadySetExceptionThe requested configuration mode is already activeRead get_configuration_mode() before setting it
EcoModeActiveEco Mode rejects every commandleave_eco_mode() first
GroundControl lists a ShakingControllerThe device field is set to a BioShake modelSet device to TurnStation and restart the connector

More snippets

  • Slower turns: set_turn_speed(speed=…) takes SLOW, NORMAL or FAST (TurnSpeed).
  • Emergency stop: emergency_stop() halts immediately — initialize_turnstation() before the next move.

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(turn.turning_controller.actions.keys()).

Vendor documentation

Rotation positions, load limits and safety are in QInstruments' TurnStation manual.

Last updated