########################################################################
### FILE: fluidics.mod
### PURPOSE: Fluidics initialization
### SCOPE: Top Level
###
### Copyrights (C) 2010 Life Technologies. All rights reserved.
########################################################################
### Add Fluidics:ARM commands once robot is ready
STATE:NEW Fluidics:Arm -requires=Fluidics:Robot
STATe:TRIGger -immediate -states=Fluidics:Arm -edge=Set InitArm
PUBLish Info "Setting up Fluidics ARM mehods..."
FLUidics:ARM:MODule aliases.mod
FLUidics:ARM:MODule fluidicsarm.mod
### Create aliases for RinseInside/RinseOutside
FLUidics:ALIas RinseInside ARM:RinseInside
FLUidics:ALIas RinseOutside ARM:RinseOutside
### Add stage axes "-StageX" and "-StageY" axes to
### Robotics subsystem once MCB is available
STATe:NEW Fluidics:InjectionPorts -requires=Fluidics:Robot,MCB
STATe:TRIGger -states=Fluidics:InjectionPorts -edge=Set StageAxes:Add
INFO "Adding stage axes X & Y to robotics control"
MCB:MOTion:X:BASE?
FLUidics:ARM:AXIS+ -type=stage STageX $1 $2
FLUidics:ARM:STageX:SKIP= True
MCB:MOTion:Y:BASE?
FLUidics:ARM:AXIS+ -type=stage STageY $1 $2
FLUidics:ARM:STageY:SKIP= True
FLUidics:ARM:REServation+ InjectionPorts -STageX -STageY
STATe:TRIGger -states=Fluidics:InjectionPorts -edge=Clear StageAxes:Clear
IF $(STATE? -errorState=True Fluidics:Robot)
TRY
INFO "Removing stage axes X & Y from robotics control"
FLUidics:ARM:REServation- InjectionPorts
FLUidics:ARM:AXIS- StageX
FLUidics:ARM:AXIS- StageY
INFO "Failed to remove FLUidics:ARM:Stage{X|Y} axes: [${error}] ${message}"
### Disable motion once front door is opened
STATE:NEW Fluidics:Disabled -requires=Fluidics:Robot -conflicts=FrontDoor:Locked
STATE:TRIGGer -states=Fluidics:Disabled -edge=Set Fluidics:Disable
FLUidics:ARM:DISABLE
STATE:TRIGGer -states=Fluidics:Disabled -edge=Clear Fluidics:Enable
IF $(STATE? Fluidics:Robot)
FLUidics:ARM:ENABLE
### Home Z axis once robot is available
STATe:DEPendency Motion:Allowed -requires=Fluidics:Robot -conflicts=Fluidics:Disabled,TankDrawer:Open
STATe:TRIGger -states=Motion:Allowed -edge=set -immediate HomeZ
FLUidics:ARM:HOME Z
### Home arm once motion is allowed
STATe:NEW Fluidics:ArmHomed -requires=Motion:Allowed
STATe:TRIGGer -states=Fluidics:ArmHomed -edge=Set HomeArm
UNLESS $(:FLUidics:ARM:HOMED?)
:FLUidics:ARM:HOME
UNLESS $(:FLUidics:ARM:PARKED?)
FLUidics:ARM:PARK
### Home syringe once liquid pump is on
STATe:NEW Fluidics:SyringeHomed -requires=Fluidics:ArmHomed,LiquidPump:On
STATe:TRIGGer -states=Fluidics:SyringeHomed -edge=Set -immediate HomeSyringe
FLUidics:ARM:HomeSyringe
FLUidics:ARM:PARK
### Require fluidics for initialization
STATe:DEPendency Fluidics:Ready -requires=Fluidics:SyringeHomed,Fluidics:InjectionPorts,Fluidics:Arm
### Aliases for backwards compatibility
FLUidics:ALIAS LiquidHeight~ LiquidLevel~
FLUidics:ALIAS LiquidHeight= LiquidLevel=
FLUidics:ALIAS LiquidHeight? LiquidLevel?
FLUidics:ALIAS VolumeByHeight? VolumeByLevel? -fromBottom
FLUidics:ALIAS HeightByVolume? LevelByVolume? -fromBottom
### Set up tasks to be performed periodically during idle times.
#IDLE:TASK+ TipCalibrationCheck -interval=3600 -duration=60 -ignoreErrors
# FLUidics:ARM:TipCalibrationCheck CALFrame
# FLUidics:ARM:TipCalibrationCheck CALStage
#
#
# IDLE:TASK+ HomeRobot -interval=900 -duration=15
# TRY
# ACQuisition+ -owner=IdleTask Robot
# FLUidics:ARM:HOME -prehome
# FLUidics:ARM:PARK
# ACQuisition- -owner=IdleTask Robot
#
# ACQuisition- -owner=IdleTask Robot
# ERRor
#
#