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
| Item | Detail |
|---|---|
| Instrument | TurnStation, powered on, plate adapter mounted, clearance to rotate |
| 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 deviceTurnStationserial_numberFrom the device label, or empty to skip the identity check portThe serial port, e.g. COM6or/dev/ttyUSB2simulatedfalse - Start the connector. It exposes
ConfigurationServiceandTurningController.
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 see | It means | Do this |
|---|---|---|
InitializationRequiredError | A move was requested before initialize_turnstation() since power-on | Initialise first |
TurnInitializationError (515, 518) | Initialisation failed after a preceding error or a motor stall | Clear the rotation path, power-cycle, initialise again |
TurnError (507) | Positioning error in the magnetic measurement system | Retry after initialize_turnstation(); contact QInstruments if it repeats |
ConfigurationModeAlreadySetException | The requested configuration mode is already active | Read get_configuration_mode() before setting it |
EcoModeActive | Eco Mode rejects every command | leave_eco_mode() first |
GroundControl lists a ShakingController | The device field is set to a BioShake model | Set device to TurnStation and restart the connector |
More snippets
- Slower turns:
set_turn_speed(speed=…)takesSLOW,NORMALorFAST(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