M1M3 Support System
|
Coordinate force actuators force calculcation. More...
#include <ForceController.h>
Public Member Functions | |
ForceController (ForceActuatorApplicationSettings *forceActuatorApplicationSettings) | |
void | reset () |
void | updateTMAElevationData (MTMount_elevationC *tmaElevationData) |
Updates elevation data. | |
bool | faRaiseFollowingErrorInTolerance () |
Tests following error on all actuaturs. | |
void | updateAppliedForces () |
void | processAppliedForces () |
Sums components and run mirror safety checks. | |
bool | applyAccelerationForces () |
Apply acceleration forces. | |
void | zeroAccelerationForces () |
void | applyActiveOpticForces (float *z) |
void | zeroActiveOpticForces () |
void | applyAzimuthForces () |
void | updateTMAAzimuthForces (MTMount_azimuthC *tmaAzimuthData) |
void | zeroAzimuthForces () |
bool | applyBalanceForces () |
bool | zeroBalanceForces () |
void | updatePID (int id, PIDParameters parameters) |
void | resetPID (int id) |
Reset given PID settings to system default (tracking). | |
void | resetPIDs () |
Resets all PIDs to initial (tracking) settings. | |
void | freezePIDs () |
void | thawPIDs () |
void | applyElevationForces () |
void | zeroElevationForces () |
void | applyOffsetForces (float *x, float *y, float *z) |
void | applyOffsetForcesByMirrorForces (float xForce, float yForce, float zForce, float xMoment, float yMoment, float zMoment) |
void | zeroOffsetForces () |
void | applyActuatorOffset (char axis, int index, float offset) |
void | applyStaticForces () |
void | zeroStaticForces () |
void | applyThermalForces () |
void | updateThermalForces (float temperature) |
void | zeroThermalForces () |
bool | applyVelocityForces () |
Apply velocity forces. | |
void | zeroVelocityForces () |
void | enableDisableForceComponent (int forceComponentEnum, bool enabled) |
Coordinate force actuators force calculcation.
The mirror weight and external forces acting on the mirror shall be counteracted by the force actuators. ForceController coordinates this - calculates contribution of the mirror weight and external forces (acceleration,..), distributes this between the force actuators. It also check for the mirror safety - runs various checks on the computed forces to confirm mirror stress stays within the mirror stress limits.
Without any power and active corrections, M1M3 mirror is resting on the passive supports (coil springs). When the mirror shall be operated, it needs to be raised on active force controllers above the passive support. Rainsing of the mirror needs to be done in steps, progressing from passive support towards fully active support.
Mirror weight (gravitational force, which depends on elevation, so is calculated by ElevationForceComponent) can be supported (counteracted) from 0 to 100%. Mirror is active when its weight is fully supported by actuators. See RaisingLoweringInfo for methods to manipulate the support percentage. As the mirror is being raised, the support fraction is increased. When the mirror is being lowered, its support fraction is lowered.
The force actuator state and enabled ForceComponent subclass is reported in forceActuatorState event.
Various other corrections - manual offsets, dynamic force (acceleration when TMA is moving), bending mode corrections for active optics - are handled in dedicated ForceComponent subclass. Those are enabled only if mirror is active, fully supported against gravity (handled by ElevationForceComponent).
Calculated force demands are stored in preclipped* events (prelippedElevationForces,..). Those are clip into allowed range, and the resulting force is stored in applied* (appliedElevationForces,..) events.
The algorithm tries to prevent large changes in applied forces. If a large change is detected, the change is distributed to multiple steps. After their execution, mirror shall end in requested position and shape.
The algorithm tries to do its best to prevent mirror panic due to violation of stress limits. Stress limits are then checked, and if violation is detected, mirror is send to State::LoweringFaultState (panic mode).
Following checks are run:
Please see LBTO UA 95-02 document for description of those checks (Chapter 9 [Mirror Support Safety], Subchapter 9.2 [Methods of Protection]).
The checks are run from ForceController::processAppliedForces() method.
Check results are reported to SafetyController. Any violation of the M1M3 limits leads to SafetyController::checkSafety() returning States::LoweringFaultState as next M1M3. That forces M1M3 to panic and go to passive supports, as violations aren't allowed.
bool ForceController::applyAccelerationForces | ( | ) |
Apply acceleration forces.
bool ForceController::applyVelocityForces | ( | ) |
Apply velocity forces.
bool ForceController::faRaiseFollowingErrorInTolerance | ( | ) |
Tests following error on all actuaturs.
Reports any violation into spdlog.
void ForceController::processAppliedForces | ( | ) |
Sums components and run mirror safety checks.
Uses FinalForceComponent to sum mirror forces obtained from AccelerationForceComponent, ActiveOpticForceComponent, AzimuthForceComponent, BalanceForceComponent, ElevationForceComponent, OffsetForceComponent, StaticForceComponent, ThermalForceComponent and VelocityForceComponent. Run mirror safety checks on summed forces, and log warning if forces are clipped.
void ForceController::resetPID | ( | int | id | ) |
void LSST::M1M3::SS::ForceController::updateTMAElevationData | ( | MTMount_elevationC * | tmaElevationData | ) |
Updates elevation data.
tmaElevationData |