Python Commandable SAL Component (CSC) for the LSST main telescope rotator. This code is a front end for a low level controller written by Moog.
How to start the system:
- Turn on the rotator PXI if it is not already running.
- Start the rotator CSC.
- Wait for the
connected
event to reportcommand=True
andtelemetry=True
. This should happen quickly; if it does not then check that the PXI is fully booted up and configured to use the correct IP address for the CSC. - Check the
controllerState
event. If it isstate=Offline, offline_substate=PublishOnly
, which is the state the PXI wakes up in, you must use the vendor's engineering user interface (EUI) to change the state tostate=Offline, offline_substate=Available
(or any more enabled mode). You can set the state on the main panel. - Check the
commandableByDDS
event. Ifstate=False
then you must use the EUI to change the control mode fromGUI
toDDS
. Use theParameters
panel to change the control mode (though the EUI _shows the control mode on the main panel).
Other notes:
- Recovery from the
FAULT
state is not standard: to leave the FAULT state send you may send theclearError
command to transitionstate=Offline, offline_substate=PublishOnly
, or use the EUI to recover. Either way you will have to use the EUI to transition tostate=Offline, offline_substate=Available
to enable CSC has control. - The low level controller maintains the CSC summary state. The CSC reports a summary state of OFFLINE until it receives telemetry from the low level controller. Thus the CSC may unexpectedly transition from OFFLINE to a different state as it starts up.
- Communication between the low level controller and CSC is quite unusual:
- The low level controller connects to a TCP/IP _server in the CSC.
- The connection uses two separate sockets, one for commands and the other for telemetry and configuration.
- The low level controller does not acknowledge commands in any way (it only reads from the command socket, it does not write anything to it). If the CSC predicts that the low level controller will reject (ignore) a command, it will fail the command (instead of sending it to the controller). But this prediction cannot be completely accurate.
lsst.ts.rotator
is developed at https://github.com/lsst-ts/ts_rotator. You can find Jira issues for this module at labels=ts_rotator.
lsst.ts.rotator