Sending XML Commands
Once a method is running and the XML channel is open, the FluentControl connector acts as an XML message bus. Each call to execute_command() sends one command string and awaits acknowledgement from FluentControl before returning — commands are processed sequentially.
Prerequisites
- A running method with the XML channel open (see Connect & Run a Method)
- Knowledge of the carrier names and site numbers in your FluentControl worktable definition
Checking the Active Channel
During development, use get_channel() to confirm the XML channel is open before sending commands.
channel = await service.execution_channel_controller.get_channel()
print(f"XML channel active on: {channel}")
Sending a Command
Pass any XML command string to execute_command(). The call blocks until FluentControl acknowledges the command.
await service.execution_channel_controller.execute_command(command=xml_command_string)
The ScriptGroup Envelope
Every command sent to FluentControl must be wrapped in a ScriptGroup XML envelope:
<ScriptGroup>
<Objects>
<!-- your command XML goes here -->
</Objects>
<Name></Name>
<IsBreakpoint>False</IsBreakpoint>
<IsDisabledForExecution>False</IsDisabledForExecution>
<LineNumber>0</LineNumber>
</ScriptGroup>
The inner command XML uses Tecan's scripting namespace (Tecan.Core.Scripting.*). Build helper functions to assemble and wrap commands for the types used in your workflow.
Discovering XML Command Structures
FluentControl stores methods as XML internally. To find the correct XML structure for any command type — including operator prompts, labware registration, and pipetting (LiHa) commands — open the FluentControl script editor, add the desired step visually, then inspect or export the resulting .fcs method file. The XML can be read directly from there and adapted for use in execute_command().