Chronos Plugins  5.1.6
This documentation covers the plugin interfaces definitions and an example implementation.
AxelSemrau.Chronos.Plugin Namespace Reference

Classes and interfaces that are meant for plugins. The classes and interfaces below this namespace are meant to be upwards compatible across Chronos versions. If you notice any incompatibilities, please let us know. More...

Namespaces

namespace  Columns
 Interfaces for custom column type definitions. These interfaces allow one to define additional sample list column types providing their own menus for autofill operations.
 
namespace  Config
 Information regarding the currently active configuration. These classes reflect configuration information which is meant to be accessed by plugins. If you miss information here, please let us know, and don't start parsing the Chronos configuration files, as these may change in the future.
 
namespace  LegacyDevices
 Access to some functionality of Chronos builtin device drivers. These are added as required. If you are missing something here that would be useful for your plugin, please let us know.
 
namespace  MethodEditor
 Auxiliary functions that can improve the usablility of the method editor for your task types.
 
namespace  SDKSupport
 Functionality supporting CTC's Task SDK plugins. This is not maintained by Axel Semrau, but by CTC directly. We can forward any requests about this if necessary.
 

Classes

class  CustomTaskCategoryAttribute
 Use this if none of the predefined categories fit and you have a better idea than "Misc". More...
 
class  DefaultUnitAttribute
 Use this on your task property if you want the method editor to show a default unit. More...
 
class  DeviceExtensions
 Hopefully useful extensions for IDevice More...
 
class  DevicesLimitedAttribute
 Add this attribute to your ITaskForDevice.SetDevice method or your IDevice property if you are using more than one device to limit the range of autosamplers that is offered in the method editor. More...
 
class  DynamicPropertyMasterAttribute
 Set this attribute if changing its value in the method editor will result in a different list of properties for the task/service. More...
 
class  Helpers
 Static instance for access to utility functions. More...
 
interface  IAbortableTask
 Implement this interface if your task does some long lasting operation which should be interruptible. More...
 
interface  IAbortSchedules
 Implement this interface if you need to abort schedules on some error condition. More...
 
interface  IAccessProperty
 Gives full access to other tasks's properties. More...
 
interface  IAcquisitionService
 Implement this interface if you want to provide an acquisition service that is loaded on program start, can provide an optional configuration dialog and be used by the normal Acquisition task in Chronos. More...
 
interface  IAcquisitionServiceBase
 Base for acquisition services, parts that are the same regardless of the parameter list. If you want to provide an acquisition service from your plugin, you must implement the generic interface for your specific parameter type. More...
 
interface  IBarcodeReader
 Implement this interface if your device is a barcode reader that can be used with the ReadBarcode task. More...
 
interface  ICanInterrupt
 For devices that support pausing/aborting independent of a task More...
 
interface  ICellAccessor
 Gives access to a cell's value. More...
 
interface  IColumnInfo
 Information about a column defined in a method. More...
 
interface  ICommandUsingAcquisitionService
 Implement this interface if your acquisition service supports some kind of utility commands that could be run from a method. More...
 
interface  IConfigInfo
 Get information about the currently active configuration. More...
 
interface  IConfigurableAcquisitionService
 Implement this interface if your acquisition service requires some kind of configuration More...
 
interface  IDebugHelper
 Utility functions for debugging purposes More...
 
interface  IDemoAwareTask
 For tasks that try to do some special actions during schedule demo execution. More...
 
interface  IDetailProvidingAcquisitionService
 If there are several instruments or you can provide some version/configuration information for the service, this is the place to do it. More...
 
interface  IDevice
 To be implemented by the "device driver" part of a Chronos plugin. More...
 
interface  IDeviceInfo
 Gives access to information about a device and its connection state, if known. More...
 
interface  IDirectDeviceAccess
 Implement this interface if you need direct access to the list of configured devices. More...
 
interface  IEbisEnabledAcquisitionService
 To be implemented by acquisition services that cooperate with the EBIS module for Chronos. More...
 
interface  IEmbedMethods
 Implement this interface if you want to run a method from within your task. More...
 
interface  IGiveARuntimeHint
 If you can calculate your runtime, you should implement this interface. More...
 
interface  IGuiHelper
 Helper functions for GUI related tasks. More...
 
interface  IHaveConfigurator
 The GUI for the configuration is kept seperately from the service More...
 
interface  IHaveDebugOutput
 Implement this interface if you wish to provide debug log output. More...
 
interface  IHaveInteractiveErrorHandling
 For devices that allow interactive error handling (like retrying the last action) More...
 
interface  IHaveMachineParameters
 Parameters that are constant for the duration of a schedule. More...
 
interface  IHaveRunlogOutput
 Implement this interface if you have messages for our run log. More...
 
interface  IInspectJob
 Allows to get information about other tasks within our task's job and about other jobs. More...
 
interface  IJitLinkAware
 Implement this interface on your ParamT if you need to check for the presence of just in time evaluated expressions for the calling AcquisitionTask. More...
 
interface  IJobAwareDevice
 Implement this if your device needs to know when a specific job of the running scheduler has finished. More...
 
interface  IManageConnectionState
 Implement this if your device wants to expose its connection state to other plugins. More...
 
interface  IMethodInfo
 Information about the method that was used to create this job More...
 
interface  IMultipartDevice
 Implement this interface if your device consists of multiple parts which can be used in parallel - like the heads/body of a PAL3. In the part, please return BaseDeviceName + ":" + PartName for consistency reasons. More...
 
interface  INeedAConnection
 For devices that need some kind of user configured connection string to address the hardware. More...
 
interface  INeedCellAccess
 Implement this interface in your sample list worker class if you need access to the content of cells. More...
 
interface  INeedToCheckForJITLinks
 Implement this interface if you have to know (usually for validation) if a certain property of a given task will be filled in later by a {jit:} scripting expression More...
 
interface  INeedToInspectOtherTasks
 Implement this interface if you have to access other tasks within the schedule. More...
 
interface  INeedToRunSampleLists
 For automatic generation of sample lists and running the resulting schedules. More...
 
class  InteractiveErrorHandlingEventArgs
 Everything needed for showing the error dialog / reacting on input. More...
 
class  InvisibleByDefaultAttribute
 Use this attribute to mark a property as only visible to users who explicitly look for invisible properties. More...
 
interface  IPal3Access
 Provides access to some options and configuration information for the PAL3 samplers even out of the schedule execution context. More...
 
interface  IPal3Options
 Makes some aspects of the PAL3 behavior configurable More...
 
interface  IPAL3Services
 An object implementing this interface is provided by Chronos and passed to the PAL3task just before execution. More...
 
interface  IPluginAdapter
 Generic way to access a plugin object that was wrapped by Chronos More...
 
interface  IPluginDeviceAdapter
 Do not implement this interface. More...
 
interface  IPluginTaskAdapter
 Do not implement this interface. More...
 
interface  IProvideDiagnosticLogs
 This can be called for a sample list worker or device that writes its own set of log files which should be available with the "gather diagnostics" option. More...
 
interface  IProvideStatusMessages
 Implement this interface if you want to keep the user up-to-date about what your device is doing. More...
 
interface  IProvideTrayGeometry
 Allow to ask the sampler for the geometry of a tray. More...
 
interface  IReactOnCultureChanges
 Allows you to support runtime language switching just like Chronos does. More...
 
interface  IResourceManager
 The resource manager is your interface to the scheduler regarding occupied or locked objects. More...
 
interface  ISampleListAccessor
 Provides basic sample list information and lets you iterate over all lines. More...
 
interface  ISampleListLine
 Gives access to all cells of a line. More...
 
interface  IScheduleEvents
 Currently starting schedule stage More...
 
interface  IScheduleStateAware
 Implement this interface if you need to track the state of schedules. More...
 
interface  ISequenceAwareAcquisitionService
 Implement this if your acquisition service has to know when a Chronos sequence starts / ends. More...
 
interface  IStandbySupportingAcquisitionService
 For services that can be put into some kind of standby mode (by an error method, for example) More...
 
interface  IStatusView
 To be implemented by the Status view part of a Chronos plugin. More...
 
interface  IStopRuns
 Implement this interface with your device or sample list worker to get fine-grained control about stopping a currently running schedule or the complete queue. More...
 
interface  IStorageInspector
 Inspect stored data. More...
 
interface  ITask
 To be implemented by the "task" part of a Chronos plugin. Public properties of the implementing type are visible in Chronos' method editor. More...
 
interface  ITaskForDevice
 To be implemented if the task needs to access a device ("Autosampler" property in Chronos) More...
 
interface  ITaskInfo
 Gives access to a task's implementation and to all user visible properties. More...
 
interface  IToolbox
 To be implemented by the Toolbox part of a Chronos plugin. More...
 
interface  ITraceLogger
 Writes some text to the trace log More...
 
interface  IUsableDuringRun
 Implement this if you want your toolbox to be visible during a sequence run. More...
 
interface  IUseResources
 Implement this interface if you need to communicate with the scheduler about locked/occupied objects. More...
 
interface  IUtilityFactories
 Helper factories for utility classes implemented within Chronos More...
 
interface  IWantEditorUpdates
 Implement this interface in your task if you want the method editor to notify it of changed properties. More...
 
interface  IWorkWithSampleLists
 For plugins that want to manipulate or run sample lists. More...
 
class  LicenseCheckerAttribute
 Use this attribute if you want to expose the contents of your plugin assembly only after a license check was successful. More...
 
class  LinkPropertyAttribute
 Attribute to link the decorated Property with the specifyed Task and TaskProperty More...
 
class  LockInstrumentAttribute
 Decorate a property of your ParamT class with this property if your acquisition service can be used simultaneously on multiple instruments. More...
 
class  MethodLaunchEventArgs
 Could be extended in the future if e.g. arguments should be passed to the method running task planer. More...
 
class  RequiresAdvancedAttribute
 If this attribute is present, the respective class is not available in Chronos XT. More...
 
class  RunSampleListEventArgs
 Parameters for sample list loading and schedule creation More...
 
class  ScheduleDiagramColorAttribute
 Override the default color that is used to display the task in the schedule diagram. More...
 
class  ScheduleStateEventArgs
 Information about the current state change More...
 
class  SortPriorityAttribute
 Override the normal sort priority in the method editor. More...
 
class  StandardValueProviderAttribute
 If your standard value list cannot be provided without knowing the actual task's details, you can derive from this attribute class. More...
 
class  StopRunArgs
 Options for stopping the schedule/queue. More...
 
class  SuppressPathPrefixAttribute
 Please don't use this unless you are sure you know what you are doing! Set this attribute on your task if you have to avoid "Plugin." prefix in property paths. More...
 
class  TaskCategoryAttribute
 The Task Category Method Attribute More...
 
class  TraceWriteEventArgs
 For future extension (categories, priorities...) More...
 
class  TrayGeometry
 Basic description of a simple rectangle tray geometry. More...
 

Enumerations

enum  ResultKind {
  ResultKind.Name, ResultKind.Amount, ResultKind.Area, ResultKind.Height,
  ResultKind.RTExpected, ResultKind.RTObserved
}
 The kind of result expected from the ExecuteDataReader call to an EBIS enabled acquisition service. More...
 
enum  ConnectionState {
  ConnectionState.Disconnected, ConnectionState.Connecting, ConnectionState.Connected, ConnectionState.Disconnecting,
  ConnectionState.Failed
}
 If your connectivity state changes, you should tell the user about it. More...
 
enum  ErrorType { ErrorType.Other, ErrorType.BarcodeNotRead, ErrorType.MissingVial }
 Lets a device implementing IHaveInteractiveErrorHandling specify which kind of error occurred. More...
 
enum  ScheduleState { ScheduleState.Validated, ScheduleState.Starting, ScheduleState.Ended, ScheduleState.SamplersStopped }
 Which stage? More...
 
enum  TaskCategory {
  TaskCategory.SamplePrep = 1, TaskCategory.Cleaning = 2, TaskCategory.Injection = 3, TaskCategory.IO = 4,
  TaskCategory.CDS = 5, TaskCategory.FlowControl = 6, TaskCategory.SPME = 7, TaskCategory.Misc = 8,
  TaskCategory.PAL3SDK = 9, TaskCategory.LCMS = 10, TaskCategory.ITSP = 11, TaskCategory.ITEX = 12
}
 The enumeration of Task Categories More...
 

Functions

delegate Exception RunSampleListHandler (object sender, RunSampleListEventArgs args)
 Runs the given sample list. More...
 
delegate object dExpressionResolver (string text, int rowNo)
 
delegate bool JITCheckerDelegate (object task, string propertyPath)
 The delegate that does the check for you. More...
 

Detailed Description

Classes and interfaces that are meant for plugins. The classes and interfaces below this namespace are meant to be upwards compatible across Chronos versions. If you notice any incompatibilities, please let us know.

Enumeration Type Documentation

◆ ConnectionState

If your connectivity state changes, you should tell the user about it.

Enumerator
Disconnected 

The device is not connected.

Connecting 

We are just trying to establish a connection.

Connected 

The connection has been established.

Disconnecting 

We are trying to disconnect from the device.

Failed 

There was an error while trying to connect, the device is not usable.

Definition at line 14 of file DeviceInterfaces.cs.

15  {
20 
24  Connecting,
25 
29  Connected,
30 
35 
39  Failed
40  }

◆ ErrorType

Lets a device implementing IHaveInteractiveErrorHandling specify which kind of error occurred.

The user can configure which kinds of errors could/should be handled in which way. For example, abort on missing barcode, skip sample on missing vial and ask for other errors.

Enumerator
Other 

Any kind of error that does not fit into the predefined categories.

BarcodeNotRead 

Device was unable to read a barcode.

MissingVial 

A card/vial/whatever is containing the sample was not found in the expected place.

Definition at line 251 of file DeviceInterfaces.cs.

252  {
256  Other,
265  }

◆ ResultKind

The kind of result expected from the ExecuteDataReader call to an EBIS enabled acquisition service.

Enumerator
Name 
Amount 
Area 
Height 
RTExpected 
RTObserved 

Definition at line 146 of file AcquisitionInterfaces.cs.

147  {
149  Name,
151  Amount,
153  Area,
155  Height,
157  RTExpected,
159  RTObserved
160  }

◆ ScheduleState

Which stage?

Enumerator
Validated 

Validation was completed

Starting 

Before the first task is executed

Ended 

After the last task finished or an error occurred, but before autosamplers are disconnected

SamplersStopped 

After all autosamplers have been stopped.

Definition at line 81 of file MiscInterfaces.cs.

82  {
86  Validated,
90  Starting,
91 
95  Ended,
100  }

◆ TaskCategory

The enumeration of Task Categories

Enumerator
SamplePrep 

The sample prep Category

Cleaning 

The cleaning Category

Injection 

The injection Category

IO 

The Input Output Category

CDS 

The CDS Category

FlowControl 

The flow control Category

SPME 

The SPME Category

Misc 

The miscellaneous Category

PAL3SDK 

The PAL3 SDK Category

LCMS 

The LCMS Category

ITSP 

The ITSP Category

ITEX 

The ITEX Category

Definition at line 626 of file TaskInterfaces.cs.

627  {
631  SamplePrep = 1,
635  Cleaning = 2,
639  Injection = 3,
643  IO = 4,
647  CDS = 5,
651  FlowControl = 6,
655  SPME = 7,
659  Misc = 8,
663  PAL3SDK = 9,
667  LCMS = 10,
671  ITSP = 11,
675  ITEX = 12
676  }

Function Documentation

◆ dExpressionResolver()

delegate object AxelSemrau.Chronos.Plugin.dExpressionResolver ( string  text,
int  rowNo 
)

◆ JITCheckerDelegate()

delegate bool AxelSemrau.Chronos.Plugin.JITCheckerDelegate ( object  task,
string  propertyPath 
)

The delegate that does the check for you.

Parameters
taskEither an ITask or the object from ITaskInfo.Task
propertyPathFull path to the property in question. Inside a plugin you will probably need to call this delegate using "Plugin.FancyStuff" for a FancyStuff property. isFancyStuffJitted = mJITChecker(this, "Plugin.FancyStuff");
Returns
True if the property is set by a JIT link

◆ RunSampleListHandler()

delegate Exception AxelSemrau.Chronos.Plugin.RunSampleListHandler ( object  sender,
RunSampleListEventArgs  args 
)

Runs the given sample list.

Parameters
sender
args
Returns
If running the list failed, you'll get the exception here, else null.
AxelSemrau.Chronos.Plugin.ErrorType.Other
@ Other
Any kind of error that does not fit into the predefined categories.
AxelSemrau.Chronos.Plugin.ErrorType.MissingVial
@ MissingVial
A card/vial/whatever is containing the sample was not found in the expected place.
AxelSemrau.Chronos.Plugin.TaskCategory.IO
@ IO
The Input Output Category
AxelSemrau.Chronos.Plugin.TaskCategory.SPME
@ SPME
The SPME Category
AxelSemrau.Chronos.Plugin.ConnectionState.Connecting
@ Connecting
We are just trying to establish a connection.
AxelSemrau.Chronos.Plugin.TaskCategory.SamplePrep
@ SamplePrep
The sample prep Category
AxelSemrau.Chronos.Plugin.ConnectionState.Failed
@ Failed
There was an error while trying to connect, the device is not usable.
AxelSemrau.Chronos.Plugin.TaskCategory.Injection
@ Injection
The injection Category
AxelSemrau.Chronos.Plugin.ScheduleState.Validated
@ Validated
Validation was completed
AxelSemrau.Chronos.Plugin.ScheduleState.Starting
@ Starting
Before the first task is executed
AxelSemrau.Chronos.Plugin.TaskCategory.PAL3SDK
@ PAL3SDK
The PAL3 SDK Category
AxelSemrau.Chronos.Plugin.ScheduleState.SamplersStopped
@ SamplersStopped
After all autosamplers have been stopped.
AxelSemrau.Chronos.Plugin.ResultKind.Amount
@ Amount
AxelSemrau.Chronos.Plugin.TaskCategory.ITSP
@ ITSP
The ITSP Category
AxelSemrau.Chronos.Plugin.ScheduleState.Ended
@ Ended
After the last task finished or an error occurred, but before autosamplers are disconnected
AxelSemrau.Chronos.Plugin.ResultKind.Height
@ Height
AxelSemrau.Chronos.Plugin.TaskCategory.FlowControl
@ FlowControl
The flow control Category
AxelSemrau.Chronos.Plugin.ResultKind.Area
@ Area
AxelSemrau.Chronos.Plugin.TaskCategory.Cleaning
@ Cleaning
The cleaning Category
AxelSemrau.Chronos.Plugin.TaskCategory.ITEX
@ ITEX
The ITEX Category
AxelSemrau.Chronos.Plugin.ResultKind.RTExpected
@ RTExpected
AxelSemrau.Chronos.Plugin.ErrorType.BarcodeNotRead
@ BarcodeNotRead
Device was unable to read a barcode.
AxelSemrau.Chronos.Plugin.TaskCategory.LCMS
@ LCMS
The LCMS Category
AxelSemrau.Chronos.Plugin.TaskCategory.Misc
@ Misc
The miscellaneous Category
AxelSemrau.Chronos.Plugin.ResultKind.RTObserved
@ RTObserved
AxelSemrau.Chronos.Plugin.ConnectionState.Disconnecting
@ Disconnecting
We are trying to disconnect from the device.
AxelSemrau.Chronos.Plugin.ConnectionState.Disconnected
@ Disconnected
The device is not connected.
AxelSemrau.Chronos.Plugin.TaskCategory.CDS
@ CDS
The CDS Category
AxelSemrau.Chronos.Plugin.ResultKind.Name
@ Name
AxelSemrau.Chronos.Plugin.ConnectionState.Connected
@ Connected
The connection has been established.