UniteLabs
Reference

QInstruments TiltStation

Get a QInstruments TiltStation connected through GroundControl, initialise it and run a first tilt cycle from Python.

The TiltStation tilts a plate to a fixed position or oscillates it. It is driven by the QINSTRUMENTS BioShake connector; its own modules are TiltingController and ElmController. Unlike the shakers it must be initialised after power-on before any move.

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
InstrumentTiltStation, powered on, plate adapter mounted, nothing blocking the tilt path
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
    deviceTiltStation
    serial_numberFrom the device label, or empty to skip the identity check
    portThe serial port, e.g. COM5 or /dev/ttyUSB1
    simulatedfalse
  3. Start the connector. It exposes ConfigurationService, TiltingController and ElmController.

First successful test

Initialise, lock the plate, oscillate for a few seconds, stop and unlock.

import asyncio

from unitelabs.sdk import AsyncApiClient

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

await tilt.configuration_service.leave_eco_mode()
await tilt.tilting_controller.initialize()          # required after every power-on
print(await tilt.tilting_controller.get_position())

# Oscillate: acceleration ramp in seconds, frequency in oscillations per minute, plate locked.
await tilt.tilting_controller.start(acceleration=1, frequency=30, lock=True)
await asyncio.sleep(5)
await tilt.tilting_controller.stop(unlock=True)     # back to home, plate released
print(await tilt.tilting_controller.get_state())

Expected: initialize() moves the station to its home position; the plate rocks for five seconds; the final state reads as idle at home with the lock released.

Known quirks and errors

You seeIt meansDo this
InitializationRequiredErrorA move was requested before initialize() since power-onawait tilt.tilting_controller.initialize() first
TiltInitializationError (415–418)Initialisation failed: a preceding error, the ELM did not unlock, a position deviation, or a stallClear the tilt path, check the plate is seated, power-cycle and initialise again
TiltError (402)Position deviation while moving — too high a load or resistanceReduce the load; check nothing touches the adapter
EcoModeActiveEco Mode rejects every commandleave_eco_mode() first
ReleaseBlockedUnlock requested while the station movesstop(unlock=True) and let it reach home first
GroundControl lists a ShakingControllerThe device field is set to a BioShake modelSet device to TiltStation and restart the connector

More snippets

  • Hold a fixed angle: set_position(position=…) moves to a tilt position and locks there; the positions are HOME, EAST and WEST (TiltPosition).
  • Counted cycles: start_for_count(acceleration=1, frequency=30, count=10, lock=True) stops by itself after ten oscillations; start_for_time(…, duration=30, …) stops after thirty seconds.
  • Emergency stop: emergency_stop() halts at an undefined position — initialize() again 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(tilt.tilting_controller.actions.keys()).

Vendor documentation

Tilt angles, load limits and safety are in QInstruments' TiltStation manual.

Last updated