
public class Autochanger extends Object implements FilterHolder, AlertRaiser, org.lsst.ccs.framework.HasLifecycle
| Modifier and Type | Field and Description |
|---|---|
protected org.lsst.ccs.services.DataProviderDictionaryService |
dataProviderDictionaryService |
protected FilterIdentificator |
filterIdentificator |
protected int |
filterOnTrucksID |
protected AutochangerTwoLatches |
latches |
protected String |
name |
long |
timeToUpdateProtectionSystem |
alertSeparator| Constructor and Description |
|---|
Autochanger(PlutoGatewayInterface plutoGateway) |
| Modifier and Type | Method and Description |
|---|---|
void |
alignFollower()
move follower truck to masterPosition.
|
void |
alignFollowerAndMoveEmptyFromApproachToHandoff() |
void |
build() |
void |
checkCarouselDeltaPosition()
Test in carousel position at STANDBY is correct to go and grab a filter
or store a filter on carousel.
|
void |
checkConditionsForActioningOnlineClamps()
log if actions on online clamps are allowed, throws an exception otherwise.
|
void |
checkConditionsForClosingLatches()
Check if Autochanger latches can be closed.
|
void |
checkConditionsForOpeningLatches()
Check if latches can be opened.
|
void |
checkFilterSafetyBeforeMotion()
This methods checks that filter can be moved by trucks.
|
void |
checkLatchMotionAllowed()
Check if Local Protection Module allows latches motion.
|
void |
checkLinearRailMotionAllowed()
Check if Local Protection Module allows linear rails motions.
|
void |
checkOnlineClampMotionAllowed()
Check if Local Protection Module allows online clamps motion.
|
void |
closeClamps()
close clamps in mode PROFILE_POSITION.
|
void |
closeLatches()
Close latches
|
StatusDataPublishedByAutoChanger |
createStatusDataPublishedByAutoChanger()
Creates an Object to be published on the STATUS bus.
|
void |
decreaseCurrentMonitoring()
slow down online clamps current monitoring for the 3 clamps
|
void |
decreaseLinearRailsCurrentMonitoring()
slow down online clamps current monitoring for the 3 clamps
|
void |
dockingAtStandbyPositionWithoutFilter() |
void |
fastTrucksProfile()
change speed and acceleration profile to fast
|
org.lsst.ccs.services.alert.AlertService |
getAlertService()
return alertService
|
AutochangerTwoTrucks |
getAutochangerTrucks()
returns trucks to be able to send commands to trucks in fcs subsystem.
|
int |
getFilterID()
If autochanger holds a filter, returns filterID, else returns 0.
|
String |
getFilterOnTrucksName()
If autochanger holds a filter, return filter name else return null.
|
AutochangerTwoLatches |
getLatches()
return latches
|
AutochangerThreeOnlineClamps |
getOnlineClamps()
returns onlineClamps to be able to send commands to onlineClamps in fcs
subsystem.
|
org.lsst.ccs.Subsystem |
getSubsystem() |
int |
getWaitTimeForBrakeLR() |
int |
getWaitTimeForBrakeOC() |
void |
goToHandOff()
Move Autochanger trucks to the Handoff position.
|
void |
goToOnline()
Move Autochanger trucks to the Online position.
|
void |
goToStandby()
Move Autochanger trucks to the Standby position.
|
void |
grabFilterAtStandby()
Moves empty to standby position and close latches on filter at standby on
carousel.
|
void |
homingClamps()
do homing of the 3 clamps
|
void |
homingTrucks()
Do homing of both trucks controllers.
|
void |
increaseCurrentMonitoring()
speed up online clamps current monitoring for the 3 clamps
|
void |
increaseLinearRailsCurrentMonitoring()
increase current monitoring for the 2 trucks
|
void |
init() |
void |
initializeHardware()
For end users, for tests and in engineering mode.
|
boolean |
isAtApproachStandbyPosition() |
boolean |
isAtHandoff()
Return true if autochanger trucks are at HANDOFF.
|
boolean |
isAtOnline()
return true if autochanger trucks are at ONLINE.
|
boolean |
isAtStandby()
Return true if autochanger trucks are at STANDBY.
|
boolean |
isCANDevicesReady() |
boolean |
isCarouselHoldingFilterAtStandby()
TODO when autochanger is in standalone mode this method has to answer the
value of the fake carousel sensor.
|
boolean |
isEmpty()
Return true if there is no filter in the autochanger.
|
boolean |
isFilterOnAC(int filterID) |
boolean |
isFilterONLINE(int filterID) |
boolean |
isHardwareReady() |
boolean |
isHoldingFilter()
Return true if a filter is in trucks and latches are LOCKED.
|
boolean |
isInitialized()
Return true if plutoGateway, trucks, latches and onlineClamps are
initialized.
|
boolean |
isLinearRailMotionAllowed() |
boolean |
isLoaderConnected()
Returns the boolean field loaderConnected.
|
boolean |
isLoaderHoldingFilterAtHandoff()
Return true if loader is connected and holding a filter.
|
boolean |
isNotHoldingFilter()
Return true if FilterHolder is NOT holding filter, false otherwise.
|
boolean |
isSensorsInError()
Return true if an error has been detected on sensors.
|
void |
lockClamps()
Locks clamps : closed with a strong pressure (high current).
|
void |
lockFilterAtOnline()
to be used in setFilter
|
void |
moveAndClampFilterOnline() |
void |
moveEmptyFromStandbyToHandoff() |
void |
moveFilterToStandby()
Move a filter to standby position step by step.
|
void |
moveToApproachOnlinePositionWithHighVelocity() |
void |
moveToApproachOnlinePositionWithLowVelocity() |
void |
moveToApproachStandbyPositionWithHighVelocity() |
void |
moveToApproachStandbyPositionWithLowVelocity() |
void |
moveToHandoffWithHighVelocity() |
void |
moveToStandbyWithLowVelocity() |
void |
openClamps()
Opens the 3 clamps.
|
void |
openLatches()
Open latches
|
void |
postStart() |
void |
publishData()
Publish Data on status bus for trending data base and GUIs.
|
void |
setFastAcqRateLinearRails(int rate)
set a new value for the acquisition frequency of linear rail controllers
current.
|
void |
setFastAcqRateOnlineClamps(int rate)
set a new value for the acquisition frequency of ONLINE clamps controllers
current.
|
void |
setFilterOnTrucksID(int filterOnTrucksID)
Used for simulator only.
|
void |
slowTrucksProfile()
change speed & acceleration profile to slow
|
void |
unlockClamps()
Unlocks clamps : slows down current sent to controller in order to decrease
pressure on the clamps.
|
void |
updateFCSStateToReady()
Update FCS state and FCS readyness state and publish on the status bus.
|
void |
updateFilterOnTrucksID()
update filterOnTrucksID
|
void |
updateStateWithSensors()
This method reads all the sensors and updates the trucks, latches and online
clamps state.
|
void |
waitForProtectionSystemUpdate() |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitclearAlarm, getAlertSeparator, raiseAlarm, raiseAlarm, raiseAlarm, raiseAlarm, raiseAlarmOnlyIfNew, raiseAlertOnlyEveryTenMinutes, raiseAlertOnlyEveryTenMinutes, raiseAlertOnlyIfNew, raiseWarning, raiseWarning, raiseWarning, raiseWarning, raiseWarningOnlyEveryTenMinutes, raiseWarningOnlyIfNew@LookupField(strategy=TREE) protected org.lsst.ccs.services.DataProviderDictionaryService dataProviderDictionaryService
@LookupName protected String name
@LookupField(strategy=SIBLINGS,
pathFilter="filterIdentificator")
protected FilterIdentificator filterIdentificator
@LookupField(strategy=CHILDREN,
pathFilter="latches")
protected AutochangerTwoLatches latches
@ConfigurationParameter(description="time to wait until protection system signals are updated",
units="millisecond",
category="autochanger")
public volatile long timeToUpdateProtectionSystem
@Persist protected volatile int filterOnTrucksID
public Autochanger(PlutoGatewayInterface plutoGateway)
public org.lsst.ccs.Subsystem getSubsystem()
getSubsystem in interface AlertRaiserpublic org.lsst.ccs.services.alert.AlertService getAlertService()
AlertRaisergetAlertService in interface AlertRaiserpublic int getWaitTimeForBrakeOC()
public int getWaitTimeForBrakeLR()
public void build()
build in interface org.lsst.ccs.framework.HasLifecyclepublic void init()
init in interface org.lsst.ccs.framework.HasLifecycle@Command(type=QUERY, level=1, description="Return true if an error has been detected on sensors.") public boolean isSensorsInError()
public AutochangerTwoTrucks getAutochangerTrucks()
public AutochangerThreeOnlineClamps getOnlineClamps()
public AutochangerTwoLatches getLatches()
@Command(type=QUERY, level=0, description="If autochanger holds a filter, return filterID, else return 0.") public int getFilterID()
getFilterID in interface FilterHolderpublic void setFilterOnTrucksID(int filterOnTrucksID)
filterOnTrucksID - @Command(type=QUERY, level=1, description="return true if filter with filterID is on AC") public boolean isFilterOnAC(int filterID)
filterID - public boolean isFilterONLINE(int filterID)
filterID - @Command(type=QUERY, level=0, description="If a filter is in autochanger, return filter name else return NO_FILTER.") public String getFilterOnTrucksName()
@Command(type=QUERY, level=0, description="Return true if the loader is connected to the camera. This command doesn\'t read again the sensors.") public boolean isLoaderConnected()
@Command(type=QUERY, level=0, description="Return true if the carousel is holding the filter at STANDBY position.") public boolean isCarouselHoldingFilterAtStandby()
FcsHardwareException@Command(type=QUERY, level=0, description="Return true if loader is connected and holding a filter. This command doesn\'t read again the sensors.") public boolean isLoaderHoldingFilterAtHandoff()
FcsHardwareException@Command(type=QUERY, level=0, description="Return true if all autochanger CANopen devices are booted, identified and initialized.") public boolean isCANDevicesReady()
@Command(type=QUERY, level=0, description="Return true if all autochanger CANopen devices are booted, identified and initialized and homing of the controllers is done.") public boolean isHardwareReady()
@Command(type=QUERY, level=0, description="Return true if all autochanger hardware is initialized.") public boolean isInitialized()
public boolean isLinearRailMotionAllowed()
public void waitForProtectionSystemUpdate()
public void postStart()
postStart in interface org.lsst.ccs.framework.HasLifecycle@Command(type=QUERY, level=1, description="For end users, for tests and in engineering mode. This command can be used to recover after a missing hardware during fcs startup. For example, when fcs was started before hardware power up. Check all hardware and publish data.", timeout=5000) public void initializeHardware()
@Command(type=QUERY, level=1, description="Check if Local Protection Module allows linear rails motion.") public void checkLinearRailMotionAllowed()
@Command(type=QUERY, level=1, description="Check if Local Protection Module allows latches motion.") public void checkLatchMotionAllowed()
@Command(type=QUERY, level=1, description="Check if Local Protection Module allows online clamps motion.") public void checkOnlineClampMotionAllowed()
@Command(type=QUERY, level=1, description="Check if the latches can be opened.") public void checkConditionsForOpeningLatches()
FcsHardwareException,RejectedCommandException@Command(type=QUERY, level=1, description="Check if Autochanger latches can be closed.") public void checkConditionsForClosingLatches()
RejectedCommandException@Command(type=QUERY, level=0, description="Check and log if actions on online clamps are allowed,throws an exception otherwise.") public void checkConditionsForActioningOnlineClamps()
@Command(type=QUERY, level=1, description="Check if its safe for filters to move autochanger trucks.") public void checkFilterSafetyBeforeMotion()
public void checkCarouselDeltaPosition()
@Command(type=QUERY, level=1, description="Update clamp state in reading sensors.") public void updateStateWithSensors()
updateStateWithSensors in interface FilterHolderFcsHardwareException@Command(type=QUERY, level=1, description="update filterOnTrucksID.") public void updateFilterOnTrucksID()
@Command(type=ACTION, level=1, description="Update FCS state and FCS readyness state and publishes on the status bus.") public void updateFCSStateToReady()
@Command(type=QUERY, level=1, description="Return true if a filter is in trucks and latches are CLOSED.") public boolean isHoldingFilter()
isHoldingFilter in interface FilterHolderpublic boolean isNotHoldingFilter()
FilterHolderisNotHoldingFilter in interface FilterHolder@Command(type=QUERY, level=0, description="Return true if autochanger trucks are at HANDOFF. This command doesn\'t read again the sensors.") public boolean isAtHandoff()
isAtHandoff in interface FilterHolder@Command(type=QUERY, level=0, description="Return true if autochanger trucks are at STANDBY. This command doesn\'t read again the sensors.") public boolean isAtStandby()
isAtStandby in interface FilterHolder@Command(type=QUERY, level=0, description="Return true if autochanger trucks are at ONLINE. This command doesn\'t read again the sensors.") public boolean isAtOnline()
isAtOnline in interface FilterHolder@Command(type=QUERY, level=0, description="Return true if autochanger trucks position is around approachStandbyPosition. This command doesn\'t read again the sensors.") public boolean isAtApproachStandbyPosition()
@Command(type=ACTION, level=1, description="Move Autochanger trucks to the Handoff position.") public void goToHandOff()
@Command(type=ACTION, level=1, description="Move Autochanger trucks to the Online position.") public void goToOnline()
FcsHardwareException@Command(type=ACTION, level=1, description="Move Autochanger trucks to the Standby position.") public void goToStandby()
@Command(type=ACTION, level=1, description="goToOnline with filter then adjust position then close and finally lock clamps", autoAck=false, timeout=20000) public void moveAndClampFilterOnline()
@Command(type=ACTION, level=1, description="go slowly to appproachStandbyPosition ") public void moveToApproachStandbyPositionWithLowVelocity()
@Command(type=ACTION, level=1, description="go fast to appproachStandbyPosition ") public void moveToApproachStandbyPositionWithHighVelocity()
@Command(type=ACTION, level=1, description="go fast to appproachOnlinePosition ") public void moveToApproachOnlinePositionWithHighVelocity()
@Command(type=ACTION, level=1, description="go slowly to appproachOnlinePosition ") public void moveToApproachOnlinePositionWithLowVelocity()
@Command(type=ACTION, level=1, description="align slave and move empty from approachStandby to Handoff") public void alignFollowerAndMoveEmptyFromApproachToHandoff()
@Command(type=ACTION, level=1, description="move slowly to standby position") public void moveToStandbyWithLowVelocity()
@Command(type=ACTION, level=1, description="move fast to handoff position") public void moveToHandoffWithHighVelocity()
@Command(type=ACTION, level=1, description="move filter to approachPosition with high speed and move to STANDBY with lowSpeed.", autoAck=false, timeout=30000) public void moveFilterToStandby()
@Command(type=ACTION, level=1, description="Align follower controller position to driver controller position.", timeout=20000) public void alignFollower()
@Command(type=ACTION, level=1, description="change ProfileVelocity parameter to lowSpeed and slowProfileAcceleration and slowProfileDeceleration") public void slowTrucksProfile()
@Command(type=ACTION, level=1, description="change ProfileVelocity and ProfileAcceleration and ProfileDeceleration parameters to highSpeed") public void fastTrucksProfile()
@Command(type=ACTION, level=1, description="Do homing for both controllers.") public void homingTrucks()
@Command(type=ACTION, level=1, description="move to approach position with high velocity then move to STANDBY with low velocity") public void dockingAtStandbyPositionWithoutFilter()
@Command(type=ACTION, level=1, description="Open latches.") public void openLatches()
FcsHardwareException@Command(type=ACTION, level=1, description="Close latches.") public void closeLatches()
FcsHardwareException@Command(type=ACTION, level=1, description="Opens the 3 online clamps in mode PROFILE_POSITION.", timeout=15000) public void openClamps()
@Command(type=ACTION, level=1, description=" close clamps in mode PROFILE_POSITION for AC1 and AC2", timeout=6000) public void closeClamps()
@Command(type=ACTION, level=1, description="Locks clamps : closed with a strong pressure (high current).", timeout=6000) public void lockClamps()
@Command(type=ACTION, level=1, description="unlocks clamps : decreases current in controller to decrease pressure.", timeout=15000) public void unlockClamps()
@Command(type=ACTION, level=1, description="do homing of the 3 ONLINE clamps : open in CURRENT mode and homing of controller", timeout=6000) public void homingClamps()
@Command(type=QUERY, level=0, description="Return true if there is no filter in the autochanger. This command doesn\'t read again the sensors.") public boolean isEmpty()
@Command(type=ACTION, level=1, alias="grabFilter", description="Move autochanger trucks to STANDBY position, close latches and stay at STANDBY") public void grabFilterAtStandby()
RejectedCommandException - if latches are not OPEN.@Command(type=ACTION, level=1, description="open latches then go to approachStandbyPosition with low speed and move to HANDOFF with highSpeed.", timeout=20000, autoAck=false) public void moveEmptyFromStandbyToHandoff()
@Command(type=QUERY, level=1, description="set a new value for the acquisition frequency of linear rail controllers current in milliseconds.") public void setFastAcqRateLinearRails(int rate)
rate - @Command(type=QUERY, level=1, description="set a new value for the acquisition frequency of ONLINE clamps controllers current, in milliseconds.") public void setFastAcqRateOnlineClamps(int rate)
rate - @Command(type=QUERY, level=1, description="speed up online clamps current monitoring for the 3 clamps") public void increaseCurrentMonitoring()
@Command(type=QUERY, level=1, description="slow down online clamps current monitoring for the 3 clamps") public void decreaseCurrentMonitoring()
public void increaseLinearRailsCurrentMonitoring()
public void decreaseLinearRailsCurrentMonitoring()
public StatusDataPublishedByAutoChanger createStatusDataPublishedByAutoChanger()
public void publishData()
public void lockFilterAtOnline()
Copyright © 2022 LSST. All rights reserved.