######################################################################## ### 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'