Device Pool part of the kernel consist of one Pool object which acts as:

Main categories of objects managed by Device Pool:

classDiagram PoolObject <|-- PoolBaseElement PoolBaseElement <|-- PoolBaseController Controller <|-- MotorController MotorController <|-- MyCustomController PoolBaseController <|-- PoolController PoolBaseController "1" *-- Controller PoolController <|-- PoolPseudoMotorController PoolBaseController "0..*" *-- PoolElement PoolBaseElement <|-- PoolElement PoolElement <|-- PoolMotor PoolBaseGroup <|-- PoolPseudoMotor PoolBaseGroup "1..*" o-- PoolElement PoolElement <|-- PoolPseudoMotor PoolBaseGroup <|-- PoolGroupElement PoolBaseElement <|-- PoolGroupElement PoolGroupElement <|-- PoolMotorGroup cssClass "Controller,MotorController,MyCustomController" pluginNode cssClass "PoolObject,PoolBaseElement,PoolBaseController" coreNode cssClass "PoolController,PoolPseudoMotorController" coreNode cssClass "PoolBaseElement,PoolElement,PoolMotor" coreNode cssClass "PoolPseudoMotor,PoolBaseGroup,PoolGroupElement" coreNode cssClass "PoolMotorGroup" coreNode

Class diagram of motion related main classes


The objects currently under Pool management are communicated to the clients with the Elements attribute.

state of pseudo axis elements or groups is composed from state’s of their associated elements e.g.

  • group state turns Moving when one of its associated elements reports Moving

  • group state turns On when all of its associated elements reports On

State changes are notified with the publisher-subscriber implementation.

Motion and acquisition are handled with PoolMotion and PoolAcquisition respectively (the latter one is composed from specific sub-actions). Each axis elements and pseudo axis elements aggregates one action instance for exclusive use during an independent motion or acquisition. Groups aggregate a different action instance for grouped motion or acquisition which involves all elements associated to the group.