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
| Item | Detail |
|---|---|
| Instrument | TiltStation, powered on, plate adapter mounted, nothing blocking the tilt path |
| Cable | The USB (RS-232) cable QInstruments ships |
| Connector | QINSTRUMENTS BioShake from the UniteLabs registry |
| Vendor software | None |
| Machine | Windows, Linux or macOS running GroundControl |
| Access | A tenant and the SDK installed — see Setup |
Install and configure the connector
- In GroundControl, add a connector and pick QINSTRUMENTS BioShake (how to add a connector).
- Configuration:
Field Value deviceTiltStationserial_numberFrom the device label, or empty to skip the identity check portThe serial port, e.g. COM5or/dev/ttyUSB1simulatedfalse - Start the connector. It exposes
ConfigurationService,TiltingControllerandElmController.
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 see | It means | Do this |
|---|---|---|
InitializationRequiredError | A move was requested before initialize() since power-on | await tilt.tilting_controller.initialize() first |
TiltInitializationError (415–418) | Initialisation failed: a preceding error, the ELM did not unlock, a position deviation, or a stall | Clear the tilt path, check the plate is seated, power-cycle and initialise again |
TiltError (402) | Position deviation while moving — too high a load or resistance | Reduce the load; check nothing touches the adapter |
EcoModeActive | Eco Mode rejects every command | leave_eco_mode() first |
ReleaseBlocked | Unlock requested while the station moves | stop(unlock=True) and let it reach home first |
GroundControl lists a ShakingController | The device field is set to a BioShake model | Set 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 areHOME,EASTandWEST(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