########################################################################
### FILE: toggles.mod
### PURPOSE: Control various toggles (door, lamp, led, etc)
### AUTHORS: Tor Slettnes
### SCOPE: Top Level
###
### Copyrights (C) 2010 Life Technologies. All rights reserved.
########################################################################
### Motion
STATE:NEW Motion:Allowed -requires=Instrument:Safe
### Front Door, Tank Drawer
STATe:NEW Interlock:Defeated
STATe:NEW FrontDoor:Locked
STATe:NEW FrontDoor:Open
STATe:NEW TankDrawer:Open
STATe:NEW TankDrawer:Locked
STATe:NEW ReagentDrawer:Open
STATe:NEW SyringeCover:Open
STATe:DEPendency+ Instrument:Safe -requires=FrontDoor:Locked -conflicts=FrontDoor:Open
# STATe:DEPendency+ Instrument:Safe -conflicts=ReagentDrawer:Open
# STATe:DEPendency+ Instrument:Safe -conflicts=SyringeCover:Open
STATe:DEPendency+ Instrument:Initialized -conflicts=ReagentDrawer:Open
STATE:TRIGGer+ -states=FrontDoor:Locked -edge=Clear Home
IF $(STATE? -errorState=True Instrument:Online)
INFO "Parking objective, arm"
STAGE:RESUME
TRY 'FLAG -asynchronous Objective "STAGE:PARK"' PASS
TRY 'FLAG -asynchronous Robot "FLU:ARM:PARK"' PASS
TRY 'SYNC Objective' PASS
INFO "Bringing out stage"
TRY 'FLAG -asynchronous Stage "STAGE:PARK"' PASS
TRY 'SYNC Robot' PASS
TRY 'SYNC Stage' PASS
STATe:TRIGger+ -states=FrontDoor:Open -edge=Set ImplicitUnlock
STATe= FrontDoor:Locked False
STATe:TRIGger+ -states=FrontDoor:Open -edge=Error ImplicitError
STATe= FrontDoor:Locked False -skipTriggers
### Door Control
DEFine DOOR $action$
UNLess $(STATe? -errorState=False Instrument:Online)
ERRor -id=Offline "Instrument is not online, unable to control door"
TRY
SET lock $[ ["unlock", "lock"].index("$action$".lower()) ]
ERRor -id=InvalidAction "'action' must be one of 'lock' or 'unlock'"
IF $[ ${lock} and $(STATe:SETTing? -errorState=False FrontDoor:Open) ]
ERRor -id=DoorOpen "Close the front door prior to locking it"
:STATe:SETTing FrontDoor:Locked ${lock}
DESCribe DOOR
Lock or unlock the instrument front door.
DEFine DOOR?
SET open $(STATe:SETTing? FrontDoor:Open)
SET locked $(STATe:SETTing? FrontDoor:Locked)
IF $[ "/error/" in "/${open}/${locked}/".lower() ] \
RETurn Error
ELIF ${open} \
RETurn Open
ELIF ${locked} \
RETurn Locked
ELSE \
RETurn Closed
DESCribe DOOR?
Return the current state of the front door: Open, Closed, or Locked.
### Tank Drawer control
STATe:TRIGger+ -states=TankDrawer:Open -edge=Set ImplicitUnlock
STATe= TankDrawer:Locked False
# STATe:TRIGger+ -states=TankDrawer:Open -edge=Clear ImplicitLock
# IF $[ ("$previousValue$" == "Error") and $(STATE? -errorState=False SystemLiquid:Installed) ]
# INFO "Tank Drawer Open state changed from $previousValue$ to $value$ -- locking"
# STATE= TankDrawer:Locked True -skipTriggers
#
#
STATe:TRIGger+ -states=TankDrawer:Open -edge=Error ImplicitError
STATe= TankDrawer:Locked False -skipTriggers
DEFine TankDRAWer $action$
UNLess $(STATe? -errorState=True Instrument:Online)
ERRor -id=Offline "Instrument is not online, unable to control tank drawer"
TRY
SET lock $[ ["unlock", "lock"].index("$action$".lower()) ]
ERRor -id=InvalidAction "'action' must be one of 'lock' or 'unlock'"
IF $[ ${lock} and $(STATe:SETTing? -errorState=False TankDrawer:Open) ]
ERRor -id=DrawerOpen "Close the tank drawer prior to locking it"
:STATe:SETTing TankDrawer:Locked ${lock}
DESCribe TankDRAWer
Lock or unlock the instrument tank drawer.
DEFine TankDRAWer?
SET open $(STATe:SETTing? TankDrawer:Open)
SET locked $(STATe:SETTing? TankDrawer:Locked)
IF $[ "/error/" in "/${open}/${locked}/".lower() ] \
RETurn Error
ELIF ${open} \
RETurn Open
ELIF ${locked} \
RETurn Locked
ELSE \
RETurn Closed
DESCribe TankDRAWer?
Return the current state of the tank drawer: Open, Closed, or Locked.
### Reset survey data
STATE:TRIGGER+ -immediate -states=ReagentDrawer:Open -edge=Clear ClearSurvey
INFO "Clearing survey data..."
SURVey~ *
STATE:TRIGGER+ -immediate -states=FrontDoor:Open -edge=Clear ClearSurvey
INFO "Clearing survey data in TMAX/TFE..."
SURVey~ TMAX TFE
### Xenon Lamp
STATE:NEW Lamp:On
STATE:DEPendency+ Imaging:Ready -requires=Lamp:On
DEFINE LAMP $state$
UNLess $(STATe? -errorState=False Instrument:Online)
ERRor -id=Offline "Instrument is offline, unable to control lamp"
TRY
STATe= Lamp:On $state$
ERRor -id=$error$ $arguments$ "$message$"
DEScribe LAMP
Turn lamp on or off
DEFine LAMP?
RETurn $(FILTER? -mask=$(STATE? Lamp:On) -inputs=False,True,Error -outputs=Off,On,Error)
DEScribe LAMP?
Return the state of the lamp: 'On' or 'Off'