UniteLabs Tecan FluentControl Connector
Description
A SiLA 2 1.1 compliant connector that enables control of the FluentControl software of the Tecan Fluent pipetting robot. This connector uses the VisionX COM API of the FluentControl software. It provides endpoints to control and monitor the execution of pipetting methods.
Technical Data
Technical requirements:
- Requires Python >3.9
- Requires FluentControl software
- Tested on version: FluentControl (V 3.4.9.61784, V 3.4.10.62215)
- Not tested on version: FluentControl (3.4.9.61784 > V > 3.4.10.62215)
- Available on GitLab: https://gitlab.com/unitelabs/connectors/tecan-fluentcontrol
- Documentation for deployment and installation (on request): https://docs.google.com/document/d/1Vxdi_MGrZGU42xE5HIitcrlD3lwULmkDIRcVW-jdLv0/edit?usp=sharing
SiLA Features
ExecutionController v1.0
Originator: com.tecan
View XML
<?xml version="1.0" encoding="utf-8" ?> <Feature SiLA2Version="1.1" FeatureVersion="1.0" MaturityLevel="Draft" Originator="com.tecan" Category="fluent.control" xmlns="http://www.sila-standard.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sila-standard.org https://gitlab.com/SiLA2/sila_base/raw/master/schema/FeatureDefinition.xsd"> <Identifier>ExecutionController</Identifier> <DisplayName>Execution Controller</DisplayName> <Description> Control of the currently running execution channel of FluentControl. Execution channels provide fine-grained control over specific commands that you send to the device. </Description> <Command> <Identifier>ExecuteCommand</Identifier> <DisplayName>Execute Command</DisplayName> <Description>Trigger the execution of the given command on the running execution channel.</Description> <Observable>No</Observable> <Parameter> <Identifier>Command</Identifier> <DisplayName>Command</DisplayName> <Description>The XML representation of the command to execute.</Description> <DataType> <Constrained> <DataType> <Basic>Binary</Basic> </DataType> <Constraints> <ContentType> <Type>application</Type> <Subtype>xml</Subtype> </ContentType> </Constraints> </Constrained> </DataType> </Parameter> <DefinedExecutionErrors> <Identifier>InvalidState</Identifier> </DefinedExecutionErrors> </Command> <Command> <Identifier>FinishExecution</Identifier> <DisplayName>Finish Execution</DisplayName> <Description>Finish the execution of the currently executing channel.</Description> <Observable>No</Observable> </Command> <Command> <Identifier>AbortExecution</Identifier> <DisplayName>Abort Execution</DisplayName> <Description>Abort the execution of the currently executing channel.</Description> <Observable>No</Observable> </Command> <Property> <Identifier>IsAlive</Identifier> <DisplayName>Is Alive</DisplayName> <Description>Whether there currently is a channel executing.</Description> <Observable>No</Observable> <DataType> <Basic>Boolean</Basic> </DataType> </Property> <DefinedExecutionError> <Identifier>InvalidState</Identifier> <DisplayName>Invalid State</DisplayName> <Description>The FluentControl is currently in an invalid state to perform the requested action.</Description> </DefinedExecutionError> </Feature>
RuntimeController v1.0
Originator: com.tecan
View XML
<?xml version="1.0" encoding="utf-8" ?> <Feature SiLA2Version="1.1" FeatureVersion="1.0" MaturityLevel="Draft" Originator="com.tecan" Category="fluent.control" xmlns="http://www.sila-standard.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sila-standard.org https://gitlab.com/SiLA2/sila_base/raw/master/schema/FeatureDefinition.xsd"> <Identifier>RuntimeController</Identifier> <DisplayName>Runtime Controller</DisplayName> <Description> Control the currently connected runtime environment of the FluentControl. The runtime environment gives you control over the starting, stopping and monitoring of method executions and provides access to execution channels on which you can execute individual commands. </Description> <Command> <Identifier>PrepareMethod</Identifier> <DisplayName>Prepare Method</DisplayName> <Description>Load and run context check of the provided method to prepare it for execution.</Description> <Observable>No</Observable> <Parameter> <Identifier>Method</Identifier> <DisplayName>Method</DisplayName> <Description>The name of the method to prepare.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <DefinedExecutionErrors> <Identifier>InvalidState</Identifier> <Identifier>InvalidMethodName</Identifier> </DefinedExecutionErrors> </Command> <Command> <Identifier>RunMethod</Identifier> <DisplayName>Run Method</DisplayName> <Description>Run the currently prepared method.</Description> <Observable>No</Observable> <DefinedExecutionErrors> <Identifier>InvalidState</Identifier> </DefinedExecutionErrors> </Command> <Command> <Identifier>PauseRun</Identifier> <DisplayName>Pause Run</DisplayName> <Description>Pause the currently running method.</Description> <Observable>No</Observable> <DefinedExecutionErrors> <Identifier>InvalidState</Identifier> </DefinedExecutionErrors> </Command> <Command> <Identifier>ResumeRun</Identifier> <DisplayName>Resume Run</DisplayName> <Description>Resume a paused method execution.</Description> <Observable>No</Observable> <DefinedExecutionErrors> <Identifier>InvalidState</Identifier> </DefinedExecutionErrors> </Command> <Command> <Identifier>StopMethod</Identifier> <DisplayName>Stop Method</DisplayName> <Description>Stop the currently running method.</Description> <Observable>No</Observable> </Command> <Command> <Identifier>CloseMethod</Identifier> <DisplayName>Close Method</DisplayName> <Description>Close the currently opened/prepared method, so that another method can be prepared.</Description> <Observable>No</Observable> <DefinedExecutionErrors> <Identifier>InvalidState</Identifier> </DefinedExecutionErrors> </Command> <Command> <Identifier>GetVariableValue</Identifier> <DisplayName>Get Variable Value</DisplayName> <Description> Read out the variable value from the currently opened/prepared method (if available). Should only be called after method is started. </Description> <Observable>No</Observable> <Parameter> <Identifier>Name</Identifier> <DisplayName>Name</DisplayName> <Description>The name of the variable to get the value for.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <Response> <Identifier>Value</Identifier> <DisplayName>Value</DisplayName> <Description>The current value of the variable.</Description> <DataType> <Basic>String</Basic> </DataType> </Response> <DefinedExecutionErrors> <Identifier>InvalidState</Identifier> <Identifier>InvalidVariableName</Identifier> </DefinedExecutionErrors> </Command> <Command> <Identifier>SetVariableValue</Identifier> <DisplayName>Set Variable Value</DisplayName> <Description>Set the value of the provided variable for the currently opened/prepared method.</Description> <Observable>No</Observable> <Parameter> <Identifier>Name</Identifier> <DisplayName>Name</DisplayName> <Description>The name of the variable to set the value for.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <Parameter> <Identifier>Value</Identifier> <DisplayName>Value</DisplayName> <Description>The new value of the variable.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <Response> <Identifier>Success</Identifier> <DisplayName>Success</DisplayName> <Description>Whether setting the variable value was successful.</Description> <DataType> <Basic>Boolean</Basic> </DataType> </Response> </Command> <Command> <Identifier>ResolveExpression</Identifier> <DisplayName>Resolve Expression</DisplayName> <Description> Evaluates the given expression consisting of arithmetic expressions. If a script is currently running, functions and variables within the script's context are also available. </Description> <Observable>No</Observable> <Parameter> <Identifier>Expression</Identifier> <DisplayName>Expression</DisplayName> <Description>The expression to evaluate.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <Response> <Identifier>Result</Identifier> <DisplayName>Result</DisplayName> <Description>The result of the evaluation.</Description> <DataType> <Basic>String</Basic> </DataType> </Response> </Command> <Command> <Identifier>CloseQueryAtStartupDialog</Identifier> <DisplayName>Close Query At Startup Dialog</DisplayName> <Description>Optionally close the "QueryAtStartupDialog", if open.</Description> <Observable>No</Observable> <Parameter> <Identifier>AcceptValues</Identifier> <DisplayName>Accept Values</DisplayName> <Description>Whether to close the dialog as if the user clicks on the OK button.</Description> <DataType> <Basic>Boolean</Basic> </DataType> </Parameter> <DefinedExecutionErrors> <Identifier>InvalidState</Identifier> </DefinedExecutionErrors> </Command> <Command> <Identifier>InteriorLight</Identifier> <DisplayName>Interior Light</DisplayName> <Description>Switch interior light on or off.</Description> <Observable>No</Observable> <Parameter> <Identifier>On</Identifier> <DisplayName>On</DisplayName> <Description>Whether to switch the interior light on or off.</Description> <DataType> <Basic>Boolean</Basic> </DataType> </Parameter> </Command> <Command> <Identifier>InitializeInstrument</Identifier> <DisplayName>Initialize Instrument</DisplayName> <Description>Initialize the instrument.</Description> <Observable>No</Observable> <Parameter> <Identifier>WorkspaceSelection</Identifier> <DisplayName>Workspace Selection</DisplayName> <Description> The type of workspace selection to use. Available modes are "UsingRuntimeWorkspace", "UsingBaseWorkspace", and "UsingMethodWorkspace". </Description> <DataType> <Constrained> <DataType> <Basic>String</Basic> </DataType> <Constraints> <Set> <Value>UsingRuntimeWorkspace</Value> <Value>UsingBaseWorkspace</Value> <Value>UsingMethodWorkspace</Value> </Set> </Constraints> </Constrained> </DataType> </Parameter> <Parameter> <Identifier>WorkspaceOrMethodName</Identifier> <DisplayName>Workspace Or Method Name</DisplayName> <Description>The workspace or method name.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> </Command> <Command> <Identifier>ValidateUser</Identifier> <DisplayName>Validate User</DisplayName> <Description>Validates if the given credentials are correct.</Description> <Observable>No</Observable> <Parameter> <Identifier>Username</Identifier> <DisplayName>Username</DisplayName> <Description>The username of the user to validate.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <Parameter> <Identifier>Password</Identifier> <DisplayName>Password</DisplayName> <Description>The password of the user to validate.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <Response> <Identifier>Success</Identifier> <DisplayName>Success</DisplayName> <Description>Whether the credentials are valid.</Description> <DataType> <Basic>Boolean</Basic> </DataType> </Response> </Command> <Command> <Identifier>LoginUser</Identifier> <DisplayName>Login User</DisplayName> <Description>Login the given user with the currently running FluentControl instance.</Description> <Observable>No</Observable> <Parameter> <Identifier>Username</Identifier> <DisplayName>Username</DisplayName> <Description>The username of the user to login.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <Parameter> <Identifier>Password</Identifier> <DisplayName>Password</DisplayName> <Description>The password of the user to login.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <Response> <Identifier>Success</Identifier> <DisplayName>Success</DisplayName> <Description>Whether the user was successfully logged in.</Description> <DataType> <Basic>Boolean</Basic> </DataType> </Response> </Command> <Command> <Identifier>RespondToDialog</Identifier> <DisplayName>Respond To Dialog</DisplayName> <Description> Respond to a shown dialog with the button that should be pressed. To receive notifications about any dialog showing up, subscribe to the Dialog property and use the Dialog Identifier and one of the available Buttons to resolve it. </Description> <Observable>No</Observable> <Parameter> <Identifier>DialogIdentifier</Identifier> <DisplayName>Dialog Identifier</DisplayName> <Description>The unique identifier of the dialog.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <Parameter> <Identifier>Button To Press</Identifier> <DisplayName>Button To Press</DisplayName> <Description>The button to be pressed in response to the dialog message.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> </Command> <Property> <Identifier>RunnableMethods</Identifier> <DisplayName>Runnable Methods</DisplayName> <Description> Collection of all available and runnable FluentControl methods. Method must be marked as "Is visible in Touch Tools". </Description> <Observable>No</Observable> <DataType> <List> <DataType> <Basic>String</Basic> </DataType> </List> </DataType> </Property> <Property> <Identifier>MaintenanceMethods</Identifier> <DisplayName>Maintenance Methods</DisplayName> <Description> Collection of all available and runnable FluentControl maintenance methods. Method must be marked as "Maintenance". </Description> <Observable>No</Observable> <DataType> <List> <DataType> <Basic>String</Basic> </DataType> </List> </DataType> </Property> <Property> <Identifier>Variables</Identifier> <DisplayName>Variables</DisplayName> <Description> Collection of all FluentControl variables of the currently prepared method in scope of "Run". </Description> <Observable>No</Observable> <DataType> <List> <DataType> <Basic>String</Basic> </DataType> </List> </DataType> <DefinedExecutionErrors> <Identifier>InvalidState</Identifier> </DefinedExecutionErrors> </Property> <Property> <Identifier>QueryVariables</Identifier> <DisplayName>Query Variables</DisplayName> <Description> Collection of all FluentControl variables of the currently prepared method with the flag "QueryAtStartup". </Description> <Observable>No</Observable> <DataType> <List> <DataType> <Basic>String</Basic> </DataType> </List> </DataType> <DefinedExecutionErrors> <Identifier>InvalidState</Identifier> </DefinedExecutionErrors> </Property> <Property> <Identifier>IsReady</Identifier> <DisplayName>Is Ready</DisplayName> <Description>Whether the FluentControl process is ready for executing methods.</Description> <Observable>No</Observable> <DataType> <Basic>Boolean</Basic> </DataType> </Property> <Property> <Identifier>State</Identifier> <DisplayName>State</DisplayName> <Description>The current state of the FluentControl process.</Description> <Observable>Yes</Observable> <DataType> <Constrained> <DataType> <Basic>String</Basic> </DataType> <Constraints> <Set> <Value>StartUpPhaseLoading</Value> <Value>StartUpPhaseAdditionalLoadingAndUserLogIn</Value> <Value>StartUpPhaseError</Value> <Value>StartUpPhaseSystemReady</Value> <Value>StartUpPhaseAborting</Value> <Value>ShutDownShuttingDown</Value> <Value>EditMode</Value> <Value>RunModePreparingRun</Value> <Value>RunModePreparingRecovery</Value> <Value>RunModeWaitingForSystem</Value> <Value>RunModeQueryVariables</Value> <Value>RunModeRunning</Value> <Value>RunModePauseRequested</Value> <Value>RunModePaused</Value> <Value>RunModeStopOnError</Value> <Value>RunModeRunFinished</Value> <Value>RunModeResetTips</Value> <Value>RunModeResumeConditionCheck</Value> <Value>RunModeBeginRun</Value> <Value>RunModeRecoveryRunning</Value> <Value>Unknown</Value> </Set> </Constraints> </Constrained> </DataType> </Property> <Property> <Identifier>Error</Identifier> <DisplayName>Error</DisplayName> <Description>The most recent error that occurred.</Description> <Observable>Yes</Observable> <DataType> <Basic>String</Basic> </DataType> </Property> <Property> <Identifier>Dialog</Identifier> <DisplayName>Dialog</DisplayName> <Description>The most recent dialog that was shown.</Description> <Observable>Yes</Observable> <DataType> <Structure> <Element> <Identifier>ErrorID</Identifier> <DisplayName>Error ID</DisplayName> <Description>A unique value to identify the specific dialog.</Description> <DataType> <Basic>String</Basic> </DataType> </Element> <Element> <Identifier>Description</Identifier> <DisplayName>Description</DisplayName> <Description>The message shown on the dialog window that describes the error or warning.</Description> <DataType> <Basic>String</Basic> </DataType> </Element> <Element> <Identifier>Buttons</Identifier> <DisplayName>Buttons</DisplayName> <Description>The available buttons to respond to the message.</Description> <DataType> <List> <DataType> <Basic>String</Basic> </DataType> </List> </DataType> </Element> </Structure> </DataType> </Property> <Property> <Identifier>Progress</Identifier> <DisplayName>Progress</DisplayName> <Description>The progress of the method execution in percent.</Description> <Observable>Yes</Observable> <DataType> <Constrained> <DataType> <Basic>Integer</Basic> </DataType> <Constraints> <MinimalInclusive>0</MinimalInclusive> <MaximalInclusive>100</MaximalInclusive> </Constraints> </Constrained> </DataType> </Property> <Property> <Identifier>InitializationProgress</Identifier> <DisplayName>Initialization Progress</DisplayName> <Description>The progress of the instrument initialization in percent.</Description> <Observable>Yes</Observable> <DataType> <Constrained> <DataType> <Basic>Integer</Basic> </DataType> <Constraints> <MinimalInclusive>0</MinimalInclusive> <MaximalInclusive>100</MaximalInclusive> </Constraints> </Constrained> </DataType> </Property> <Property> <Identifier>Usernames</Identifier> <DisplayName>Usernames</DisplayName> <Description>Collection of all available usernames.</Description> <Observable>No</Observable> <DataType> <List> <DataType> <Basic>String</Basic> </DataType> </List> </DataType> </Property> <Property> <Identifier>CurrentUsername</Identifier> <DisplayName>Current Username</DisplayName> <Description>The name of the currently logged-in user.</Description> <Observable>No</Observable> <DataType> <Basic>String</Basic> </DataType> </Property> <DefinedExecutionError> <Identifier>InvalidState</Identifier> <DisplayName>Invalid State</DisplayName> <Description>The FluentControl is currently in an invalid state to perform the requested action.</Description> </DefinedExecutionError> <DefinedExecutionError> <Identifier>InvalidVariableName</Identifier> <DisplayName>Invalid Variable Name</DisplayName> <Description>The provided variable name is not known by the FluentControl process.</Description> </DefinedExecutionError> <DefinedExecutionError> <Identifier>InvalidMethodName</Identifier> <DisplayName>Invalid Method Name</DisplayName> <Description>The provided method name is not known by the FluentControl process.</Description> </DefinedExecutionError> </Feature>
FluentController v1.0
Originator: com.tecan
View XML
<?xml version="1.0" encoding="utf-8" ?> <Feature SiLA2Version="1.1" FeatureVersion="1.0" MaturityLevel="Draft" Originator="com.tecan" Category="fluent.control" xmlns="http://www.sila-standard.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sila-standard.org https://gitlab.com/SiLA2/sila_base/raw/master/schema/FeatureDefinition.xsd"> <Identifier>FluentController</Identifier> <DisplayName>Fluent Controller</DisplayName> <Description> Control and manage the FluentControl process running under Windows. With the Fluent Controller, you can start and stop the FluentControl software with various parameters to gain access to a runtime in which you execute and control methods. </Description> <Command> <Identifier>Start</Identifier> <DisplayName>Start</DisplayName> <Description>Start and attach to a FluentControl process or attach to an already running instance.</Description> <Observable>No</Observable> </Command> <Command> <Identifier>StartAndLogin</Identifier> <DisplayName>Start And Login</DisplayName> <Description>Start a FluentControl process and login the given user with the running instance.</Description> <Observable>No</Observable> <Parameter> <Identifier>Username</Identifier> <DisplayName>Username</DisplayName> <Description>The username of the user to login.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <Parameter> <Identifier>Password</Identifier> <DisplayName>Password</DisplayName> <Description>The password of the user to login.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <Parameter> <Identifier>StartupOption</Identifier> <DisplayName>Startup Option</DisplayName> <Description> The mode in which to start the FluentControl process. Available modes are "None", "Simulation", and "Hidden". </Description> <DataType> <Constrained> <DataType> <Basic>String</Basic> </DataType> <Constraints> <Set> <Value>None</Value> <Value>Simulation</Value> <Value>Hidden</Value> </Set> </Constraints> </Constrained> </DataType> </Parameter> <DefinedExecutionErrors> <Identifier>AlreadyRunning</Identifier> <Identifier>InvalidUsername</Identifier> <Identifier>InvalidPassword</Identifier> </DefinedExecutionErrors> </Command> <Command> <Identifier>StartInSimulationMode</Identifier> <DisplayName>Start In Simulation Mode</DisplayName> <Description>Start and attach to a FluentControl process in simulation mode.</Description> <Observable>No</Observable> <DefinedExecutionErrors> <Identifier>AlreadyRunning</Identifier> </DefinedExecutionErrors> </Command> <Command> <Identifier>StartInIntegrationMode</Identifier> <DisplayName>Start In Integration Mode</DisplayName> <Description>Start and attach to a FluentControl process in system integration mode.</Description> <Observable>No</Observable> <DefinedExecutionErrors> <Identifier>AlreadyRunning</Identifier> </DefinedExecutionErrors> </Command> <Command> <Identifier>Shutdown</Identifier> <DisplayName>Shutdown</DisplayName> <Description>Shutdown the currently running FluentControl process.</Description> <Observable>No</Observable> </Command> <Command> <Identifier>ForceShutdown</Identifier> <DisplayName>Force Shutdown</DisplayName> <Description>Forcefully shutdown the currently running FluentControl process.</Description> <Observable>No</Observable> </Command> <Command> <Identifier>ConnectRuntime</Identifier> <DisplayName>Connect Runtime</DisplayName> <Description>Connect to the runtime of the currently running FluentControl process to be able to access, run and control methods.</Description> <Observable>No</Observable> </Command> <Property> <Identifier>IsRunning</Identifier> <DisplayName>Is Running</DisplayName> <Description>Check if a FluentControl process is currently running.</Description> <Observable>No</Observable> <DataType> <Basic>Boolean</Basic> </DataType> </Property> <Property> <Identifier>IsAttached</Identifier> <DisplayName>Is Attached</DisplayName> <Description>Check if this process is attached to a running FluentControl process.</Description> <Observable>No</Observable> <DataType> <Basic>Boolean</Basic> </DataType> </Property> <Property> <Identifier>Notifications</Identifier> <DisplayName>Notifications</DisplayName> <Description>All logging messages about the currently running FluentControl process.</Description> <Observable>Yes</Observable> <DataType> <Basic>String</Basic> </DataType> </Property> <DefinedExecutionError> <Identifier>AlreadyRunning</Identifier> <DisplayName>Already Running</DisplayName> <Description>A FluentControl process is currently already running.</Description> </DefinedExecutionError> <DefinedExecutionError> <Identifier>InvalidUsername</Identifier> <DisplayName>Invalid Username</DisplayName> <Description>The provided username is not known by the FluentControl process.</Description> </DefinedExecutionError> <DefinedExecutionError> <Identifier>InvalidPassword</Identifier> <DisplayName>Invalid Password</DisplayName> <Description>The provided password is invalid for the given username.</Description> </DefinedExecutionError> </Feature>
AuthenticationService v1.0
Originator: org.silastandard
View XML
<?xml version="1.0" encoding="utf-8" ?> <Feature SiLA2Version="1.0" FeatureVersion="1.0" MaturityLevel="Draft" Originator="org.silastandard" Category="core" xmlns="http://www.sila-standard.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sila-standard.org https://gitlab.com/SiLA2/sila_base/raw/master/schema/FeatureDefinition.xsd"> <Identifier>AuthenticationService</Identifier> <DisplayName>Authentication Service</DisplayName> <Description> This Feature provides SiLA Clients with access tokens based on a user identification and password. 1. the user needs to login with the Login command into the server with a user identification (=user name) and a password 2. after verification, an Access Token with the Token Lifetime information will be generated and provided by the server. 3. the user can log-out from the server with the Logout command - a valid Access Token is required to run this command. </Description> <Command> <Identifier>Login</Identifier> <DisplayName>Login</DisplayName> <Description>Provides an access token based on user information.</Description> <Observable>No</Observable> <Parameter> <Identifier>UserIdentification</Identifier> <DisplayName>User Identification</DisplayName> <Description>The user identification string (e.g. a user name)</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <Parameter> <Identifier>Password</Identifier> <DisplayName>Password</DisplayName> <Description>The password</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <Parameter> <Identifier>RequestedServer</Identifier> <DisplayName>Requested Server</DisplayName> <Description>The ServerUUID of the server for which an authorization is requested.</Description> <DataType> <Constrained> <DataType> <Basic>String</Basic> </DataType> <Constraints> <Length>36</Length> <Pattern>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}</Pattern> </Constraints> </Constrained> </DataType> </Parameter> <Parameter> <Identifier>RequestedFeatures</Identifier> <DisplayName>Requested Features</DisplayName> <Description>The fully qualified identifiers of features that are requested to access. If no feature is provided, this means that all features are requested.</Description> <DataType> <List> <DataType> <Constrained> <DataType> <Basic>String</Basic> </DataType> <Constraints> <FullyQualifiedIdentifier>FeatureIdentifier</FullyQualifiedIdentifier> </Constraints> </Constrained> </DataType> </List> </DataType> </Parameter> <Response> <Identifier>AccessToken</Identifier> <DisplayName>Access Token</DisplayName> <Description>The token to be used along with accessing a Command or Property on a SiLA Server.</Description> <DataType> <Basic>String</Basic> </DataType> </Response> <Response> <Identifier>TokenLifetime</Identifier> <DisplayName>Token Lifetime</DisplayName> <Description> The lifetime (in seconds) of the provided access token as the maximum validity period after the last SiLA Server request. </Description> <DataType> <Constrained> <DataType> <Basic>Integer</Basic> </DataType> <Constraints> <Unit> <Label>s</Label> <Factor>1</Factor> <Offset>0</Offset> <UnitComponent> <SIUnit>Second</SIUnit> <Exponent>1</Exponent> </UnitComponent> </Unit> </Constraints> </Constrained> </DataType> </Response> <DefinedExecutionErrors> <Identifier>AuthenticationFailed</Identifier> </DefinedExecutionErrors> </Command> <DefinedExecutionError> <Identifier>AuthenticationFailed</Identifier> <DisplayName>Authentication Failed</DisplayName> <Description>The provided credentials are not valid.</Description> </DefinedExecutionError> <Command> <Identifier>Logout</Identifier> <DisplayName>Logout</DisplayName> <Description>Invalidates the given access token immediately.</Description> <Observable>No</Observable> <Parameter> <Identifier>AccessToken</Identifier> <DisplayName>Access Token</DisplayName> <Description>The access token to be invalidated.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <DefinedExecutionErrors> <Identifier>InvalidAccessToken</Identifier> </DefinedExecutionErrors> </Command> <DefinedExecutionError> <Identifier>InvalidAccessToken</Identifier> <DisplayName>Invalid Access Token</DisplayName> <Description>The sent access token is not valid.</Description> </DefinedExecutionError> </Feature>
SimulationController v1.0
Originator: org.silastandard
View XML
<?xml version="1.0" encoding="utf-8" ?> <Feature SiLA2Version="1.0" FeatureVersion="1.0" MaturityLevel="Verified" Originator="org.silastandard" Category="core" xmlns="http://www.sila-standard.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sila-standard.org https://gitlab.com/SiLA2/sila_base/raw/master/schema/FeatureDefinition.xsd"> <Identifier>SimulationController</Identifier> <DisplayName>Simulation Controller</DisplayName> <Description> This Feature provides control over the simulation behaviour of a SiLA Server. A SiLA Server can run in two modes: (a) Real Mode - with real activities, e.g. addressing or controlling real hardware, e.g. through serial/CANBus commands, writing to real databases, moving real objects etc. (b) Simulation Mode - where every command is only simulated and responses are just example returns. Note that certain commands and properties might not be affected by this feature if they do not interact with the real world. </Description> <Command> <Identifier>StartSimulationMode</Identifier> <DisplayName>Start Simulation Mode</DisplayName> <Description> Sets the SiLA Server to run in Simulation Mode, i.e. all following commands are executed in simulation mode. The Simulation Mode can only be entered, if all hardware operations have been safely terminated or are in a controlled, safe state. The simulation mode can be stopped by issuing the 'Start Real Mode' command. </Description> <Observable>No</Observable> <DefinedExecutionErrors> <Identifier>StartSimulationModeFailed</Identifier> </DefinedExecutionErrors> </Command> <Command> <Identifier>StartRealMode</Identifier> <DisplayName>Start Real Mode</DisplayName> <Description> Sets the SiLA Server to run in real mode, i.e. all following commands are executed with real-world interactions, like serial port/CAN communication, motor actions etc. If the server is in Simulation Mode it can be interrupted at any time. A re-initialization of the hardware might be required. The Real Mode can be stopped by issuing the 'Start Simulation Mode' command. </Description> <Observable>No</Observable> <DefinedExecutionErrors> <Identifier>StartRealModeFailed</Identifier> </DefinedExecutionErrors> </Command> <Property> <Identifier>SimulationMode</Identifier> <DisplayName>SimulationMode</DisplayName> <Description>Indication whether SiLA Server is in Simulation Mode or not.</Description> <Observable>No</Observable> <DataType> <Basic>Boolean</Basic> </DataType> </Property> <DefinedExecutionError> <Identifier>StartSimulationModeFailed</Identifier> <DisplayName>The start of Simulation Mode failed.</DisplayName> <Description> The server cannot change to Simulation Mode. This error can, e.g., be thrown, if a real-world process needs to be ended before switching to simulation mode. </Description> </DefinedExecutionError> <DefinedExecutionError> <Identifier>StartRealModeFailed</Identifier> <DisplayName>The start of Real Mode failed.</DisplayName> <Description> The server cannot change to Real Mode. This error can, e.g., be thrown, if a device is not ready to change into Real Mode. </Description> </DefinedExecutionError> </Feature>
CancelController v1.0
Originator: org.silastandard
View XML
<?xml version="1.0" encoding="utf-8" ?> <Feature SiLA2Version="1.0" FeatureVersion="1.0" MaturityLevel="Verified" Originator="org.silastandard" Category="core.commands" xmlns="http://www.sila-standard.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sila-standard.org https://gitlab.com/SiLA2/sila_base/raw/master/schema/FeatureDefinition.xsd"> <Identifier>CancelController</Identifier> <DisplayName>Cancel Controller</DisplayName> <Description> This feature offers commands to cancel/terminate Commands. Cancellation is the act of stopping the running Command execution(s), irrevocably. The SiLA Server SHOULD be able to be in a state where any further commands can be issued after a cancellation. </Description> <Command> <Identifier>CancelCommand</Identifier> <DisplayName>Cancel Command</DisplayName> <Description> Cancel a specified currently running Observable Command or cancel all currently running Observable Commands . For any canceled Observable Command the SiLA Server MUST update the Command Execution Status to "Command Finished with Error". The SiLA Server MUST throw a descriptive error message indicating cancellation as the reason for the Command execution not being able to finish successfully for any canceled Command. </Description> <Observable>No</Observable> <Parameter> <Identifier>CommandExecutionUUID</Identifier> <DisplayName>Command Execution UUID</DisplayName> <Description>The Command Execution UUID according to the SiLA Standard.</Description> <DataType> <DataTypeIdentifier>UUID</DataTypeIdentifier> </DataType> </Parameter> <DefinedExecutionErrors> <Identifier>InvalidCommandExecutionUUID</Identifier> <Identifier>OperationNotSupported</Identifier> </DefinedExecutionErrors> </Command> <Command> <Identifier>CancelAll</Identifier> <DisplayName>Cancel All</DisplayName> <Description> Cancels all currently running Observable and Unobservable Commands running on this SiLA Server. The SiLA Server MUST throw an Execution Error indicating 'cancellation' as the reason for the Command not being able to finish successfully. </Description> <Observable>No</Observable> </Command> <DataTypeDefinition> <Identifier>UUID</Identifier> <DisplayName>UUID</DisplayName> <Description>A Universally Unique Identifier (UUID) referring to observable command executions.</Description> <DataType> <Constrained> <DataType> <Basic>String</Basic> </DataType> <Constraints> <Length>36</Length> <Pattern>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}</Pattern> </Constraints> </Constrained> </DataType> </DataTypeDefinition> <DefinedExecutionError> <Identifier>InvalidCommandExecutionUUID</Identifier> <DisplayName>Invalid Command Execution UUID</DisplayName> <Description> The given Command Execution UUID does not specify a command that is currently being executed. </Description> </DefinedExecutionError> <DefinedExecutionError> <Identifier>OperationNotSupported</Identifier> <DisplayName>Operation Not Supported</DisplayName> <Description> Canceling is not supported for the SiLA 2 Command with the specified CommandExecutionUUID. </Description> </DefinedExecutionError> </Feature>
RunController v1.0
Originator: io.unitelabs
View XML
<?xml version="1.0" encoding="utf-8" ?> <Feature SiLA2Version="1.0" FeatureVersion="1.0" MaturityLevel="Draft" Originator="io.unitelabs" Category="core" xmlns="http://www.sila-standard.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sila-standard.org https://gitlab.com/SiLA2/sila_base/raw/master/schema/FeatureDefinition.xsd"> <Identifier>RunController</Identifier> <DisplayName>Run Controller</DisplayName> <Description>Control the execution of methods.</Description> <Command> <Identifier>Run</Identifier> <DisplayName>Run</DisplayName> <Description>Executes the given method with a set of parameters.</Description> <Observable>Yes</Observable> <Parameter> <Identifier>Method</Identifier> <DisplayName>Method</DisplayName> <Description>The name of the method to execute.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <Parameter> <Identifier>Parameters</Identifier> <DisplayName>Parameters</DisplayName> <Description>A list of parameter values to parametrize the method execution.</Description> <DataType> <List> <DataType> <DataTypeIdentifier>Parameter</DataTypeIdentifier> </DataType> </List> </DataType> </Parameter> <DefinedExecutionErrors> <Identifier>InvalidMethod</Identifier> <Identifier>FailedExecution</Identifier> </DefinedExecutionErrors> </Command> <Command> <Identifier>GetParameters</Identifier> <DisplayName>Get Parameters</DisplayName> <Description>Request a list of parameter names which are required to execute the given method.</Description> <Observable>No</Observable> <Parameter> <Identifier>Method</Identifier> <DisplayName>Method</DisplayName> <Description>The name of the method for which to request the parameters.</Description> <DataType> <Basic>String</Basic> </DataType> </Parameter> <Response> <Identifier>Parameters</Identifier> <DisplayName>Parameters</DisplayName> <Description> A list of parameter names that are required for executing the given method. </Description> <DataType> <List> <DataType> <DataTypeIdentifier>Parameter</DataTypeIdentifier> </DataType> </List> </DataType> </Response> <DefinedExecutionErrors> <Identifier>InvalidMethod</Identifier> </DefinedExecutionErrors> </Command> <Property> <Identifier>Methods</Identifier> <DisplayName>Methods</DisplayName> <Description>A list of method names that are available for execution.</Description> <Observable>No</Observable> <DataType> <List> <DataType> <Basic>String</Basic> </DataType> </List> </DataType> </Property> <DefinedExecutionError> <Identifier>InvalidMethod</Identifier> <DisplayName>Invalid Method</DisplayName> <Description>The provided method name is not known by the FluentControl process.</Description> </DefinedExecutionError> <DefinedExecutionError> <Identifier>InvalidState</Identifier> <DisplayName>Invalid State</DisplayName> <Description>The FluentControl is currently in an invalid state to perform the requested action.</Description> </DefinedExecutionError> <DefinedExecutionError> <Identifier>FailedExecution</Identifier> <DisplayName>Failed Execution</DisplayName> <Description>The execution failed due to an error that occurred during runtime.</Description> </DefinedExecutionError> <DataTypeDefinition> <Identifier>Parameter</Identifier> <DisplayName>Parameter</DisplayName> <Description>Key value pairs to parametrize the method execution.</Description> <DataType> <Structure> <Element> <Identifier>Name</Identifier> <DisplayName>Name</DisplayName> <Description>The name of the parameter to set.</Description> <DataType> <Basic>String</Basic> </DataType> </Element> <Element> <Identifier>Value</Identifier> <DisplayName>Value</DisplayName> <Description>The value to set the parameter to.</Description> <DataType> <Basic>String</Basic> </DataType> </Element> </Structure> </DataType> </DataTypeDefinition> </Feature>
AuthorizationService v1.0
Originator: org.silastandard
View XML
<?xml version="1.0" encoding="utf-8" ?> <Feature SiLA2Version="1.0" FeatureVersion="1.0" MaturityLevel="Draft" Originator="org.silastandard" Category="core" xmlns="http://www.sila-standard.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sila-standard.org https://gitlab.com/SiLA2/sila_base/raw/master/schema/FeatureDefinition.xsd"> <Identifier>AuthorizationService</Identifier> <DisplayName>Authorization Service</DisplayName> <Description> This Feature provides access control for the implementing server. It specifies the SiLA Client Metadata for the access token, that has been provided by the AuthenticationService core Feature. </Description> <Metadata> <Identifier>AccessToken</Identifier> <DisplayName>Access Token</DisplayName> <Description>Token to be sent with every call in order to get access to the SiLA Server functionality.</Description> <DataType> <Basic>String</Basic> </DataType> <DefinedExecutionErrors> <Identifier>InvalidAccessToken</Identifier> </DefinedExecutionErrors> </Metadata> <DefinedExecutionError> <Identifier>InvalidAccessToken</Identifier> <DisplayName>Invalid Access Token</DisplayName> <Description>The sent access token is not valid.</Description> </DefinedExecutionError> </Feature>
InitializationController v1.0
Originator: io.unitelabs
View XML
<?xml version="1.0" encoding="utf-8" ?> <Feature SiLA2Version="1.0" FeatureVersion="1.0" MaturityLevel="Draft" Originator="io.unitelabs" Category="core" xmlns="http://www.sila-standard.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sila-standard.org https://gitlab.com/SiLA2/sila_base/raw/master/schema/FeatureDefinition.xsd"> <Identifier>InitializationController</Identifier> <DisplayName>Initialization Controller</DisplayName> <Description> Sets the instrument to be ready to use and resets any state for example state changes caused by human intervention. </Description> <Command> <Identifier>Initialize</Identifier> <DisplayName>Initialize</DisplayName> <Description>Initialize the instrument.</Description> <Observable>No</Observable> </Command> <Property> <Identifier>IsInitialized</Identifier> <DisplayName>Is Initialized</DisplayName> <Description>Whether the instrument is ready to be used.</Description> <Observable>No</Observable> <DataType> <Basic>Boolean</Basic> </DataType> </Property> <Property> <Identifier>Progress</Identifier> <DisplayName>Progress</DisplayName> <Description>The progress of the initialization in percent.</Description> <Observable>Yes</Observable> <DataType> <Constrained> <DataType> <Basic>Real</Basic> </DataType> <Constraints> <MinimalInclusive>0</MinimalInclusive> <MaximalInclusive>100</MaximalInclusive> </Constraints> </Constrained> </DataType> </Property> </Feature>
PauseController v2.0
Originator: org.silastandard
View XML
<?xml version="1.0" encoding="utf-8" ?> <Feature SiLA2Version="1.0" FeatureVersion="2.0" MaturityLevel="Verified" Originator="org.silastandard" Category="core.commands" xmlns="http://www.sila-standard.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sila-standard.org https://gitlab.com/SiLA2/sila_base/raw/master/schema/FeatureDefinition.xsd"> <Identifier>PauseController</Identifier> <DisplayName>Pause Controller</DisplayName> <Description> Allows to pause or resume a currently running Observable Command. Pausing is the act of stopping the progress of the desired intent of a Command with the option of continuing the execution when resuming. A SiLA Client SHOULD be able to pause or resume the Observable Commands at any time. Not every Observable Command might support this Feature. If not, an "OperationNotSupported" Execution Error MUST be thrown. </Description> <Command> <Identifier>Pause</Identifier> <DisplayName>Pause</DisplayName> <Description> Pause the Command execution. The Command can then be resumed again. The Command Execution Status of the Observable Command MUST not be affected. </Description> <Observable>No</Observable> <Parameter> <Identifier>CommandExecutionUUID</Identifier> <DisplayName>Command Execution UUID</DisplayName> <Description>The Command Execution UUID according to the SiLA Standard.</Description> <DataType> <DataTypeIdentifier>UUID</DataTypeIdentifier> </DataType> </Parameter> <DefinedExecutionErrors> <Identifier>InvalidCommandExecutionUUID</Identifier> <Identifier>InvalidCommandState</Identifier> <Identifier>OperationNotSupported</Identifier> </DefinedExecutionErrors> </Command> <Command> <Identifier>Resume</Identifier> <DisplayName>Resume</DisplayName> <Description>Resume the Command after it has been paused.</Description> <Observable>No</Observable> <Parameter> <Identifier>CommandExecutionUUID</Identifier> <DisplayName>Command Execution UUID</DisplayName> <Description>The Command Execution UUID according to the SiLA Standard.</Description> <DataType> <DataTypeIdentifier>UUID</DataTypeIdentifier> </DataType> </Parameter> <DefinedExecutionErrors> <Identifier>InvalidCommandExecutionUUID</Identifier> <Identifier>InvalidCommandState</Identifier> <Identifier>OperationNotSupported</Identifier> </DefinedExecutionErrors> </Command> <Property> <Identifier>PausedCommands</Identifier> <DisplayName>Paused Commands</DisplayName> <Description>A List of Command Execution UUID that are in a paused state.</Description> <Observable>Yes</Observable> <DataType> <List> <DataType> <DataTypeIdentifier>UUID</DataTypeIdentifier> </DataType> </List> </DataType> </Property> <DefinedExecutionError> <Identifier>InvalidCommandExecutionUUID</Identifier> <DisplayName>Invalid Command Execution UUID</DisplayName> <Description> The given Command Execution UUID does not specify a command that is currently being active. </Description> </DefinedExecutionError> <DefinedExecutionError> <Identifier>InvalidCommandState</Identifier> <DisplayName>Invalid Command State</DisplayName> <Description> The specified command is not in a valid state to perform the operation (Pause or Resume). </Description> </DefinedExecutionError> <DefinedExecutionError> <Identifier>OperationNotSupported</Identifier> <DisplayName>Operation Not Supported</DisplayName> <Description> The operation (Pause or Resume) is not supported for the SiLA 2 command which the specified Command Execution UUID belongs to. </Description> </DefinedExecutionError> <DataTypeDefinition> <Identifier>UUID</Identifier> <DisplayName>UUID</DisplayName> <Description>A Universally Unique Identifier (UUID) referring to observable command executions.</Description> <DataType> <Constrained> <DataType> <Basic>String</Basic> </DataType> <Constraints> <Length>36</Length> <Pattern>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}</Pattern> </Constraints> </Constrained> </DataType> </DataTypeDefinition> </Feature>