В этом примере показано, как создать и определить пользовательское состояние для самолета.
Этот пример описывает:
Определение пользовательских состояний и возможность их использования.
Создание базового пользовательского состояния.
Создание расширенного пользовательского состояния.
Использование пользовательского состояния в анализе самолета.
По умолчанию объект состояния фиксированного крыла имеет фиксированный набор значений состояния. Сюда входят угол атаки, воздушная скорость, высота и другие.
Эти состояния используются в объекте с фиксированным крылом, чтобы размерить немерные коэффициенты или предоставить данные для точек останова интерполяционной таблицы.
Однако существуют случаи, когда этот набор состояний по умолчанию не захватывает все желаемые состояния самолета. Это происходит при использовании пользовательских состояний.
Путем определения пользовательского состояния можно создать новые значения состояний, которые могут использоваться в любом компоненте самолета.
Создание пользовательских состояний с Aero.FixedWing.State
класс:
Определите новый класс. Этот класс должен унаследовать от Aero.FixedWing.State
.
Задайте пользовательские состояния путем добавления новых зависимых свойств к классу.
Определите get. Метод состояния в классе пользовательского состояния.
Ниже приведен простой пример состояния, в котором пользовательский класс состояния, MyState
, определяется пользовательским значением состояния, MyValue
.
The get
методы зависимых свойств могут получить доступ к любому другому свойству от состояния. В этом случае MyValue
использует наземную прямую скорость, U
.
classdef MyState < Aero.FixedWing.State properties (Dependent) MyValue end methods function value = get.MyValue(obj) value = obj.U * 10; end end end
Более продвинутым примером пользовательского состояния является модель самолета De Havilland Beaver [1], которая использует ряд пользовательских состояний для размеризации своих коэффициентов. Это пользовательское состояние можно рассматривать как «astDehavillandBeaverState» ниже.
classdef astDehavillandBeaverState < Aero.FixedWing.State properties (Dependent) Alpha2 Alpha3 Beta2 Beta3 b2V cV qcV pb2V rb2V betab2V AileronAlpha FlapAlpha ElevatorBeta2 RudderAlpha end methods function value = get.Alpha2(obj) value = obj.Alpha ^ 2; end function value = get.Alpha3(obj) value = obj.Alpha ^ 3; end function value = get.Beta2(obj) value = obj.Beta ^ 2; end function value = get.Beta3(obj) value = obj.Beta ^ 3; end function value = get.b2V(obj) value = 14.6300 / (2*obj.Airspeed); end function value = get.cV(obj) value = 1.5875 / (obj.Airspeed); end function value = get.qcV(obj) value = obj.Q * obj.cV; end function value = get.pb2V(obj) value = obj.P * obj.b2V; end function value = get.rb2V(obj) value = obj.R * obj.b2V; end function value = get.betab2V(obj) value = obj.Beta * obj.b2V; end function value = get.AileronAlpha(obj) value = obj.getState("Aileron") * obj.Alpha; end function value = get.FlapAlpha(obj) value = obj.getState("Flap") * obj.Alpha; end function value = get.ElevatorBeta2(obj) value = obj.getState("Elevator") * obj.Beta2; end function value = get.RudderAlpha(obj) value = obj.getState("Rudder") * obj.Alpha; end end end
Это пользовательское состояние не только непосредственно использует предопределенные свойства состояний из состояния фиксированного крыла, но и использует метод getState, чтобы извлечь углы отклонения поверхности управления. Любая комбинация состояний или методов может использоваться в методах get для пользовательских состояний.
С заданным пользовательским состоянием используйте пользовательское состояние в методах анализа.
[beaver, cruise] = astDehavillandBeaver()
beaver = FixedWing with properties: ReferenceArea: 23.2300 ReferenceSpan: 14.6300 ReferenceLength: 1.5875 Coefficients: [1x1 Aero.FixedWing.Coefficient] DegreesOfFreedom: "6DOF" Surfaces: [1x3 Aero.FixedWing.Surface] Thrusts: [1x1 Aero.FixedWing.Thrust] AspectRatio: 9.2138 UnitSystem: "Metric" AngleSystem: "Radians" TemperatureSystem: "Kelvin" Properties: [1x1 Aero.Aircraft.Properties]
cruise = astDehavillandBeaverState with properties: Alpha2: 0.0209 Alpha3: 0.0030 Beta2: 2.1609e-04 Beta3: -3.1765e-06 b2V: 0.1642 cV: 0.0356 qcV: 1.0159e-22 pb2V: -1.3994e-20 rb2V: 4.9110e-20 betab2V: -0.0024 AileronAlpha: 0.0013 FlapAlpha: 0 ElevatorBeta2: -9.1838e-06 RudderAlpha: -0.0066 Alpha: 0.1444 Beta: -0.0147 AlphaDot: 0 BetaDot: 0 Mass: 2.2882e+03 Inertia: [3x3 table] CenterOfGravity: [0 0 0] CenterOfPressure: [0 0 0] AltitudeMSL: 2202 GroundHeight: 0 XN: 0 XE: 0 XD: -2202 U: 45 V: 0 W: 0 Phi: 0 Theta: 0.1444 Psi: 0 P: -8.5200e-20 Q: 2.8500e-21 R: 2.9900e-19 Weight: 2.2448e+04 AltitudeAGL: 2202 Airspeed: 44.5365 GroundSpeed: 45 MachNumber: 0.1339 BodyVelocity: [44.0682 -0.6547 6.4080] GroundVelocity: [45 0 0] Ur: 44.0682 Vr: -0.6547 Wr: 6.4080 FlightPathAngle: 0 CourseAngle: 0 InertialToBodyMatrix: [3x3 double] BodyToInertialMatrix: [3x3 double] BodyToWindMatrix: [3x3 double] WindToBodyMatrix: [3x3 double] DynamicPressure: 998.1851 Environment: [1x1 Aero.Aircraft.Environment] UnitSystem: "Metric" AngleSystem: "Radians" TemperatureSystem: "Kelvin" ControlStates: [1x5 Aero.Aircraft.ControlState] OutOfRangeAction: "Limit" DiagnosticAction: "Warning" Properties: [1x1 Aero.Aircraft.Properties]
cruise.Alpha2
ans = 0.0209
[F, M] = forcesAndMoments(beaver, cruise)
F = 3×1
103 ×
0.7116
-0.2185
2.8976
M = 3×1
103 ×
0.0579
1.6427
0.1933
dydt = nonlinearDynamics(beaver, cruise)
dydt = 12×1
44.5317
0
-6.4754
0.3110
-0.0955
1.2663
0.0104
0.2371
0.0174
-0.0000
⋮
[stability, derivatives] = staticStability(beaver, cruise)
stability=6×8 table
U V W Alpha Beta P Q R
________ ________ ________ ________ ________ ________ ________ ________
FX "Stable" "" "" "" "" "" "" ""
FY "" "Stable" "" "" "" "" "" ""
FZ "" "" "Stable" "" "" "" "" ""
L "" "" "" "" "Stable" "Stable" "" ""
M "Stable" "" "" "Stable" "" "" "Stable" ""
N "" "" "" "" "Stable" "" "" "Stable"
derivatives=6×8 table
U V W Alpha Beta P Q R
_______ ________ _______ ___________ _______ _______ _______ _______
FX -30.646 -0.94341 656.72 29138 -42.007 0 -557.74 0
FY -9.8123 -65.493 -14.105 -558.71 -2917.1 -472.26 0 1396.2
FZ -456.65 2.3887 -2888.1 -1.2435e+05 106.36 0 -2469.7 0
L -3.4499 -470.72 -6.295 -255.3 -20967 -28110 0 9444.4
M 217.97 -17.9 -988.08 -44940 -797.04 0 -20417 -1885.2
N 9.3412 51.579 1.3583 0.002102 2297.4 -8831.5 1928.7 -6196
Rauw, M.O.: «A Simulink Environment for Flight Dynamics and Control analysis - Application to the DHC-2 'Beaver'». Часть I: «Реализация библиотеки моделей в Simulink». Часть II: «Нелинейный анализ автопилота 'Beaver'». Магистерская диссертация, Делфтский технологический университет, профессорско-преподавательский состав аэрокосмической техники. Делфт, Нидерланды, 1993.