В этом примере показано, как создать и задать пользовательское состояние для самолета с неподвижным крылом.
Этот пример описывает:
Определение пользовательских состояний и когда они могут использоваться.
Создание основного пользовательского состояния.
Создание усовершенствованного пользовательского состояния.
Используя пользовательское состояние в анализе самолета с неподвижным крылом.
По умолчанию объект состояния фиксированного крыла имеет фиксированный набор значений состояния. Они включают угол нападения, скорости полета, высоты и других.
Эти состояния используются в объекте фиксированного крыла определить размерность безразмерные коэффициенты или предоставить данные точкам останова интерполяционной таблицы.
Однако существуют случаи, где этот набор по умолчанию состояний не получает все требуемые состояния самолета. Это - когда пользовательские состояния используются.
Путем определения пользовательского состояния возможно создать новую стоимость состояния, которая может использоваться в любом компоненте самолета с неподвижным крылом.
Создать пользовательские состояния с Aero.FixedWing.State
класс:
Задайте новый класс. Этот класс должен наследоваться Aero.FixedWing.State
.
Задайте пользовательские состояния путем добавления новых зависимых свойств в класс.
Задайте get.State метод в пользовательском классе состояния.
Ниже простое состояние в качестве примера где пользовательский класс состояния, MyState
, задан с пользовательским значением состояния, MyValue
.
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
Более усовершенствованным примером пользовательского состояния является модель [1] самолета Бобра De Havilland, которая использует много пользовательских состояний, чтобы определить размерность ее коэффициенты. Это пользовательское состояние может рассматриваться как "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 метод, чтобы извлечь углы отклонения поверхности управления. Любая комбинация состояний или методов может использоваться в получить методах для пользовательских состояний.
С пользовательским заданным состоянием используйте пользовательское состояние в методах анализа.
[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.: "Окружение Simulink для анализа Динамики и Управления Рейсом - Приложение 'Бобру' DHC-2". Первая часть: "Реализация библиотеки модели в Simulink". Вторая часть: "Нелинейный анализ автопилота 'Бобра'". Тезис магистра наук, Делфтский технический университет, Факультет Космической Разработки. Делфт, Нидерланды, 1993.