M1M3 Support System
Loading...
Searching...
No Matches
SSILCs.h
1/*
2 * This file is part of LSST M1M3 support system package.
3 *
4 * Developed for the Vera C. Rubin Telescope and Site System.
5 * This product includes software developed by the LSST Project
6 * (https://www.lsst.org).
7 * See the COPYRIGHT file at the top-level directory of this distribution
8 * for details of code ownership.
9 *
10 * This program is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22 */
23
24#ifndef SSILCS_H_
25#define SSILCS_H_
26
27#include <SAL_MTM1M3C.h>
28
29#include <ActiveBusList.h>
30#include <ChangeILCModeBusList.h>
31#include <ForceActuatorApplicationSettings.h>
32#include <ForceActuatorSettings.h>
33#include <FreezeSensorBusList.h>
34#include <HardpointActuatorApplicationSettings.h>
35#include <HardpointActuatorSettings.h>
36#include <HardpointMonitorApplicationSettings.h>
37#include <ILCDataTypes.h>
38#include <ILCMessageFactory.h>
39#include <ILCResponseParser.h>
40#include <ILCSubnetData.h>
41#include <ModbusBuffer.h>
42#include <PositionController.h>
43#include <RaisedBusList.h>
44#include <ReadBoostValveDCAGainBusList.h>
45#include <ReadCalibrationBusList.h>
46#include <ReportADCScanRateBusList.h>
47#include <ReportDCAIDBusList.h>
48#include <ReportDCAStatusBusList.h>
49#include <ReportServerIDBusList.h>
50#include <ReportServerStatusBusList.h>
51#include <ResetBustList.h>
52#include <SafetyController.h>
53#include <SetADCChanneOffsetAndSensitivityBusList.h>
54#include <SetADCScanRateBusList.h>
55#include <SetBoostValveDCAGainBusList.h>
56
57namespace LSST {
58namespace M1M3 {
59namespace SS {
60
67class SSILCs {
68public:
69 SSILCs(PositionController *positionController,
70 ForceActuatorApplicationSettings *forceActuatorApplicationSettings,
71 HardpointActuatorApplicationSettings *hardpointActuatorApplicationSettings,
72 HardpointMonitorApplicationSettings *hardpointMonitorApplicationSettings,
73 SafetyController *safetyController);
74 virtual ~SSILCs();
75
79 void buildBusLists();
80
81 void writeCalibrationDataBuffer();
82 void writeSetADCScanRateBuffer();
83 void writeSetBoostValveDCAGainBuffer();
84 void writeResetBuffer();
85 void writeReportServerIDBuffer();
86 void writeReportServerStatusBuffer();
87 void writeReportADCScanRateBuffer();
88 void writeReadCalibrationDataBuffer();
89 void writeReadBoostValveDCAGainBuffer();
90 void writeReportDCAIDBuffer();
91 void writeReportDCAStatusBuffer();
92 void writeSetModeDisableBuffer();
93 void writeSetModeEnableBuffer();
94 void writeSetModeStandbyBuffer();
95 void writeSetModeClearFaultsBuffer();
96 void writeFreezeSensorListBuffer();
97
102
107
113
114 void triggerModbus();
115
122 void waitForAllSubnets(bool realtime_loop);
123
124 void read(uint8_t subnet);
125 void readAll();
126 void flush(uint8_t subnet);
127 void flushAll();
128
129 void calculateHPPostion();
130 void calculateHPMirrorForces();
131 void calculateFAMirrorForces();
132 void clearResponses();
133 void verifyResponses();
134
135 void publishForceActuatorInfo();
136 void publishForceActuatorStatus();
137 void publishHardpointActuatorInfo();
138 void publishHardpointStatus();
139 void publishHardpointData();
140 void publishHardpointMonitorInfo();
141 void publishHardpointMonitorStatus();
142 void publishHardpointMonitorData();
143
149 void disableFA(uint32_t actuatorId);
150
156 void enableFA(uint32_t actuatorId);
157
161 void enableAllFA();
162
170 bool isDisabled(uint32_t actuatorId) { return _subnetData.getMap(actuatorId).Disabled; }
171
180 uint32_t hasDisabledFarNeighbor(uint32_t actuatorIndex);
181
182private:
183 SafetyController *_safetyController;
184 ILCSubnetData _subnetData;
185 ILCMessageFactory _ilcMessageFactory;
186 ILCResponseParser _responseParser;
187
188 SetADCChanneOffsetAndSensitivityBusList _busListSetADCChannelOffsetAndSensitivity;
189 SetADCScanRateBusList _busListSetADCScanRate;
190 SetBoostValveDCAGainBusList _busListSetBoostValveDCAGains;
191 ResetBustList _busListReset;
192 ReportServerIDBusList _busListReportServerID;
193 ReportServerStatusBusList _busListReportServerStatus;
194 ReportADCScanRateBusList _busListReportADCScanRate;
195 ReadCalibrationBusList _busListReadCalibration;
196 ReadBoostValveDCAGainBusList _busListReadBoostValveDCAGains;
197 ReportDCAIDBusList _busListReportDCAID;
198 ReportDCAStatusBusList _busListReportDCAStatus;
199 ChangeILCModeBusList _busListChangeILCModeDisabled;
200 ChangeILCModeBusList _busListChangeILCModeEnabled;
201 ChangeILCModeBusList _busListChangeILCModeStandby;
202 ChangeILCModeBusList _busListChangeILCModeClearFaults;
203 FreezeSensorBusList _busListFreezeSensor;
204 RaisedBusList _busListRaised;
205 ActiveBusList _busListActive;
206
207 HardpointActuatorSettings *_hardpointActuatorSettings;
208 MTM1M3_hardpointActuatorDataC *_hardpointActuatorData;
209 ForceActuatorApplicationSettings *_forceActuatorApplicationSettings;
210 MTM1M3_logevent_hardpointActuatorInfoC *_hardpointActuatorInfo;
211 PositionController *_positionController;
212
213 int8_t _hpStepCommand[6];
214 int32_t _hpSteps[6];
215
216 ModbusBuffer _rxBuffer;
217
218 int32_t _controlListToggle;
219
220 uint8_t _subnetToRxAddress(uint8_t subnet);
221 uint8_t _subnetToTxAddress(uint8_t subnet);
222
223 void _writeBusList(BusList *busList);
224
225 void _updateHPSteps();
226};
227
228} /* namespace SS */
229} /* namespace M1M3 */
230} /* namespace LSST */
231
232#endif /* SSILCS_H_ */
Definition ActiveBusList.h:35
Abstract class.
Definition BusList.h:57
Definition ChangeILCModeBusList.h:35
(Almost) constant force actuator values.
Definition ForceActuatorApplicationSettings.h:87
Definition FreezeSensorBusList.h:34
Loads Hardpoint Settings.
Definition HardpointActuatorApplicationSettings.h:51
Definition HardpointActuatorSettings.h:43
Definition HardpointMonitorApplicationSettings.h:40
Definition ILCMessageFactory.h:37
Definition ILCResponseParser.h:41
Definition ILCSubnetData.h:38
ILCMap getMap(int32_t actuatorId)
Returns ILCMap for actuator with given ID.
Definition ILCSubnetData.cpp:98
Utility class for Modbus buffer management.
Definition ModbusBuffer.h:42
Controls M1M3 position.
Definition PositionController.h:61
Definition RaisedBusList.h:34
Definition ReadBoostValveDCAGainBusList.h:33
Definition ReadCalibrationBusList.h:33
Definition ReportADCScanRateBusList.h:33
Definition ReportDCAIDBusList.h:33
Definition ReportDCAStatusBusList.h:33
Definition ReportServerIDBusList.h:33
Definition ReportServerStatusBusList.h:33
Definition ResetBustList.h:33
Definition SSILCs.h:67
uint32_t hasDisabledFarNeighbor(uint32_t actuatorIndex)
Check if any far neighbor of an actuator with given index is disabled.
Definition SSILCs.cpp:454
void enableAllFA()
Enables all force actuators.
Definition SSILCs.cpp:448
void waitForAllSubnets(bool realtime_loop)
Wait for Modbus IRQs.
Definition SSILCs.cpp:230
void buildBusLists()
(Re)-build all bus lists.
Definition SSILCs.cpp:100
void enableFA(uint32_t actuatorId)
Enables given FA.
Definition SSILCs.cpp:442
void disableFA(uint32_t actuatorId)
Disable given FA.
Definition SSILCs.cpp:432
void writeRaisedListBuffer()
Called in enabled state (parked, raised,..).
Definition SSILCs.cpp:202
bool isDisabled(uint32_t actuatorId)
Check if given actuator is disabled.
Definition SSILCs.h:170
void writeControlListBuffer()
Called in enabled state.
Definition SSILCs.cpp:215
void writeActiveListBuffer()
Called in enabled state (parked, raised,..).
Definition SSILCs.cpp:209
Controls mirror safety.
Definition SafetyController.h:50
Definition SetADCChanneOffsetAndSensitivityBusList.h:36
Definition SetADCScanRateBusList.h:34
Definition SetBoostValveDCAGainBusList.h:34
bool Disabled
secondary index, -1 for single axis, 0-111
Definition ILCDataTypes.h:56