FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
PropulsorActuator.h
1#ifndef PropulsorActuator_h__
2#define PropulsorActuator_h__
3
70#include <string>
71
72#include "LocalConnection.h"
73namespace Ship
74{
76 public:
77 enum FailureModes{
78 failureModeRPMError = 0,
79 failureModeRPMLock,
80 failureModePitchLock,
81 failureModePitchMalfunction,
82 failureModeAzimuthLock,
83 failureModeAzimuthMalfunction,
84 failureModeFeedbackPitchFreeze,
85 failureModeFeedbackRPMFreeze,
86 failureModeFeedbackAzimuthFreeze,
87 failureModeFeedbackThrustFreeze,
88 failureModes
89 };
90
91 PropulsorActuator(const std::string& simObjectName,ISimObjectCreator* const creator);
92
93 virtual void OdeFcn(const double T, const double* const X, double* const XDot) const;
95 void AcceptedStep(double T, const double* X) override;
96 //void InitialConditionSetup( const double T, const double *const X, ISimObjectCreator* const creator );
97 void InitialConditionSetup(const double T, const double *const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
98 const double * RPM(const double T, const double * const X);
99 const double * RPMMotor(const double T, const double * const X);
100 const double * Pitch(const double T, const double * const X);
101 const double * PD(const double T, const double * const X);
102 const double * ConsumedPower(const double T, const double * const X);
103
104 const double * RPM_FB(const double T, const double * const X);
105 const double * Thrust_FB(const double T, const double * const X);
106 const double * Pitch_FB(const double T, const double * const X);
107
108 const double * ForceBody2(const double T, const double * const X);
109 const double * TorqueBody2(const double T, const double * const X);
110
111 // over ridable for cycloidal actuator
112 virtual const double * Angle_FB(const double T, const double * const X);
113 virtual const double * Angle(const double T, const double * const X);
114
115 protected:
116 double m_torqueLimit;
117
118 bool m_oscMode;
119 ISignalPort *m_inRPMLimits;
120 ISignalPort *m_inPitchLimits;
121 ISignalPort *m_inAngleLimits;
122 ISignalPort *m_inShaftTorque;
123 ISignalPort *m_inAvailablePower;
124
125 double m_pitchMaxChangeRate;
126 double m_RPMMaxChangeRate;
127 double m_aziMaxChangeRate;
128
129 int m_indexMotorPitch;
130 int m_indexPropulsorRPM;
131
132 ISignalPort *m_inFailureMode;
133 ISignalPort *m_inCommendedRPM;
134 ISignalPort *m_inCommandedPitch;
135
136 bool m_isAzimuth;
137 double m_azimuthLoss[2];
138
139 mutable bool m_failureModeRPMError = false;
140 mutable bool m_failureModeRPMLock = false;
141 mutable bool m_failureModePitchLock = false;
142 mutable bool m_failureModePitchMalfunction = false;
143 mutable bool m_failureModeAzimuthLock = false;
144 mutable bool m_failureModeAzimuthMalfunction = false;
145 mutable bool m_failureModeFeedbackPitchFreeze = false;
146 mutable bool m_failureModeFeedbackRPMFreeze = false;
147 mutable bool m_failureModeFeedbackAzimuthFreeze = false;
148 mutable bool m_failureModeFeedbackThrustFreeze = false;
149
150 mutable double m_maxAngle;
151 mutable double m_minAngle;
152 mutable double m_maxRPM;
153 mutable double m_minRPM;
154 mutable double m_maxPitch;
155 mutable double m_minPitch;
156
157 double m_gearRatio;
158
159 double m_angularMotorMalfunctionRate;
160
161 double m_actualRPM;
162 double m_actualMotorRPM;
163 double m_actualPitch;
164 double m_actualPD;
165 double m_actualAngle;
166 double m_consumedPower;
167 double m_timeConstantPitch;
168 double m_timeConstantRPM;
169
170 double m_actualRPMFeedback;
171 double m_actualThrustFeedback;
172 double m_actualPitchFeedback;
173 double m_actualAngleFeedback;
174
177 double m_heldPitchFeedback = 0;
178 double m_heldAngleFeedback = 0;
179 double m_heldThrustFeedback = 0;
180
182 virtual double AngleFeedbackValue(const double* X) const;
183
184 double m_forceParentBody[3];
185 double m_torqueParentBody[3];
186 };
187}
188
189#endif // PropulsorActuator_h__
Definition LocalConnection.h:98
Definition PropulsorActuator.h:75
void AcceptedStep(double T, const double *X) override
Reads the failure modes and holds the values of the feedbacks that freeze (MAR-0038)
double m_heldRPMFeedback
The feedback values held while a feedback freezes (set by AcceptedStep)
Definition PropulsorActuator.h:176
virtual double AngleFeedbackValue(const double *X) const
The angle that Angle_FB reports (the azimuth state; the cycloidal actuator has its own)
Simple waypoint object.
Definition CableAttach.h:58