Tecan Fluent Integration
Drive your liquid handler in Python, without an operator at the FluentControl screen
List and run FluentControl methods, set their variables, stream XML commands into a running method, and answer its dialogs, all from code.
- Supports
- Fluent 480, 780
- Connects over
- VisionX COM API
- Local interface
- SiLA 2
- Vendor software
- FluentControl
- Runs On
- Windows
What You Can Command on the Fluent
Process control, method runs, variables, the XML execution channel, live state and dialogs each arrive as their own callable capability. FluentControl does the pipetting, and your code decides what runs and when.
FluentControl Process
Start or attach to FluentControl, in simulation or system integration mode, log a user in, and shut it down again.
Method Runs
List runnable and maintenance methods, then prepare, run, pause, resume, stop and close them, or run one with parameters in a single call.
Method Variables
Read and set variables on the prepared method, including QueryAtStartup variables, and evaluate expressions against them.
Execution Channel
Stream XML commands into a running method, one acknowledged command at a time, then finish or abort the channel.
Live State
Subscribe to FluentControl's state, run progress, initialization progress, errors and log notifications.
Dialogs and Instrument
Answer or auto-close FluentControl dialogs during a run, initialize the instrument, and switch the interior light.
Run a Method From Python
Ordinary async Python. Version it, test it, generate it at runtime like any other code.
# list methods, run one, stream a command into it, close the session
import asyncio
from pathlib import Path
from unitelabs.sdk import AsyncApiClient
client = AsyncApiClient()
fluent = await client.get_service_by_name("Tecan FluentControl")
print(await fluent.runtime_controller.get_runnable_methods())
await fluent.runtime_controller.prepare_method(method="plate_prep")
await fluent.runtime_controller.run_method()
await asyncio.sleep(3) # give FluentControl time to open the XML channel
prompt = Path("verify_deck.xml").read_text() # a ScriptGroup command
await fluent.execution_channel_controller.execute_command(command=prompt)
await fluent.execution_channel_controller.finish_command() # back to EditMode
await fluent.runtime_controller.close_method()
Know One Connector, and You Know Them All
Every instrument is found and called the same way, and the same Python drives whatever comes next.
One API, Every Instrument
Find it by name, then call its actions. It's the same on a liquid handler, a reader or an incubator, whatever the vendor ships underneath.
Ask a Connector What It Can Do
Modules and actions are discoverable at runtime, and parameters carry their own types, units and constraints. You don't need a PDF to find out.
Also Works With
The same Python script can drive every instrument on the bench. A liquid handler sets up the plate, a thermal cycler can cycle it, and a reader measures it, all from one script.
Tecan Fluent
The questions automation engineers ask before integrating a Fluent.
Yes, through FluentControl. With the UniteLabs connector you list and run FluentControl methods from Python, set their variables, and stream commands into a method while it runs. It's ordinary async Python, so it can be version-controlled, tested and generated at runtime like any other code.
Yes. The connector drives FluentControl through its VisionX COM API, so it runs on the Windows PC where FluentControl is installed, and FluentControl does the instrument control. The connector exposes it as a SiLA 2 service on a local gRPC port, and opens one outbound TLS connection on port 443 to your tenant.
Yes. Add an XML execution channel step to the method, and your script can stream commands into it while it runs: set up the worktable, register labware and trigger liquid handling. Each command is acknowledged before the next one goes.
The Fluent 480 and Fluent 780. The connector works at the FluentControl level, so what it can run depends on the methods and worktable you've set up there.
Yes. The connector is SiLA 2 1.1 compliant and exposes FluentControl as a SiLA 2 service on a local gRPC port, with modules you can list at runtime. Find out more about how we use the SiLA 2 standard for instrument interoperability.
Your code sees it. Dialogs and errors arrive as live subscriptions and as updates on a running method, and you can answer a dialog from code or have the connector close dialogs automatically during a run.
Yes. The connector can start FluentControl in its own simulation mode, and the UniteLabs workflow template ships a FluentControl mock that stands in for the live service while you build the structure of a workflow.