В этом примере показано, как создать и задать пользовательское состояние для самолета с неподвижным крылом.
Этот пример описывает:
Определение пользовательских состояний и когда они могут использоваться.
Создание основного пользовательского состояния.
Создание усовершенствованного пользовательского состояния.
Используя пользовательское состояние в анализе самолета с неподвижным крылом.
По умолчанию объект состояния фиксированного крыла имеет фиксированный набор значений состояния. Они включают угол нападения, скорости полета, высоты и других.
Эти состояния используются в объекте фиксированного крыла определить размерность безразмерные коэффициенты или предоставить данные точкам останова интерполяционной таблицы.
Однако существуют случаи, где этот набор по умолчанию состояний не получает все требуемые состояния самолета. Это - когда пользовательские состояния используются.
Путем определения пользовательского состояния возможно создать новую стоимость состояния, которая может использоваться в любом компоненте самолета с неподвижным крылом.
Создать пользовательские состояния с 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 Properties: [1x1 Aero.Aircraft.Properties] UnitSystem: "Metric" AngleSystem: "Radians" TemperatureSystem: "Kelvin"
cruise = astDehavillandBeaverState with properties: Alpha2: 0.0170 Alpha3: 0.0022 Beta2: 0.0036 Beta3: 2.1974e-04 b2V: 0.1625 cV: 0.0353 qcV: 0 pb2V: 0 rb2V: 0 AileronAlpha: 0.0012 FlapAlpha: 0 ElevatorBeta2: -1.5476e-04 RudderAlpha: -0.0060 Alpha: 0.1303 Beta: 0.0603 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: 44.5400 V: 2.7140 W: 5.8360 Phi: 0 Theta: 0.1309 Psi: 0 P: 0 Q: 0 R: 0 Weight: 2.2448e+04 AltitudeAGL: 2202 Airspeed: 45.0026 GroundSpeed: 45.0026 MachNumber: 0.1357 BodyVelocity: [44.5400 2.7140 5.8360] GroundVelocity: [44.5400 2.7140 5.8360] Ur: 44.5400 Vr: 2.7140 Wr: 5.8360 FlightPathAngle: 0.1303 CourseAngle: 0.0609 InertialToBodyMatrix: [3x3 double] BodyToInertialMatrix: [3x3 double] BodyToWindMatrix: [3x3 double] WindToBodyMatrix: [3x3 double] DynamicPressure: 998.6513 Environment: [1x1 Aero.Aircraft.Environment] ControlStates: [1x5 Aero.Aircraft.ControlState] OutOfRangeAction: "Limit" DiagnosticAction: "Warning" Properties: [1x1 Aero.Aircraft.Properties] UnitSystem: "Metric" AngleSystem: "Radians" TemperatureSystem: "Kelvin"
cruise.Alpha2
ans = 0.0170
[F, M] = forcesAndMoments(beaver, cruise)
F = 3×1
103 ×
0.4037
-1.3285
4.7465
M = 3×1
103 ×
-1.5125
2.3497
0.3744
dydt = nonlinearDynamics(beaver, cruise)
dydt = 12×1
44.9207
2.7140
-0.0276
0.1764
-0.5806
2.0743
-0.2619
0.3391
0.0297
0
⋮
[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 -32.531 2.7704 601.22 26968 124.91 0 -552.22 0
FY -33.152 -398.64 -16.894 -558.01 -17973 -467.59 0 1382.4
FZ -410.16 -4.8834 -2867.8 -1.2531e+05 -220.18 0 -2445.2 0
L -37.919 -469.28 -10.703 -254.35 -21158 -27832 0 9350.9
M 222.86 74.529 -930.3 -42740 3360.4 0 -20214 -1866.5
N 12.771 62.732 1.6733 -0.35231 2828.4 -8744.1 1909.6 -6134.6
Состояния могут также быть созданы с помощью функции fixedWingStateCustom.
Эта функция идентична функции fixedWingState за исключением сложения входа строки, который задал объект состояния создать.
state = fixedWingStateCustom("astDehavillandBeaverState",beaver)
state = astDehavillandBeaverState with properties: Alpha2: 0 Alpha3: 0 Beta2: 0 Beta3: 0 b2V: 0.1463 cV: 0.0318 qcV: 0 pb2V: 0 rb2V: 0 AileronAlpha: 0 FlapAlpha: 0 ElevatorBeta2: 0 RudderAlpha: 0 Alpha: 0 Beta: 0 AlphaDot: 0 BetaDot: 0 Mass: 0 Inertia: [3x3 table] CenterOfGravity: [0 0 0] CenterOfPressure: [0 0 0] AltitudeMSL: 0 GroundHeight: 0 XN: 0 XE: 0 XD: 0 U: 50 V: 0 W: 0 Phi: 0 Theta: 0 Psi: 0 P: 0 Q: 0 R: 0 Weight: 0 AltitudeAGL: 0 Airspeed: 50 GroundSpeed: 50 MachNumber: 0.1469 BodyVelocity: [50 0 0] GroundVelocity: [50 0 0] Ur: 50 Vr: 0 Wr: 0 FlightPathAngle: 0 CourseAngle: 0 InertialToBodyMatrix: [3x3 double] BodyToInertialMatrix: [3x3 double] BodyToWindMatrix: [3x3 double] WindToBodyMatrix: [3x3 double] DynamicPressure: 1.5312e+03 Environment: [1x1 Aero.Aircraft.Environment] ControlStates: [1x5 Aero.Aircraft.ControlState] OutOfRangeAction: "Limit" DiagnosticAction: "Warning" Properties: [1x1 Aero.Aircraft.Properties] UnitSystem: "Metric" AngleSystem: "Radians" TemperatureSystem: "Kelvin"
state2 = fixedWingStateCustom("astDehavillandBeaverState",beaver,aircraftEnvironment(beaver,"COESA",1000))
state2 = astDehavillandBeaverState with properties: Alpha2: 0 Alpha3: 0 Beta2: 0 Beta3: 0 b2V: 0.1463 cV: 0.0318 qcV: 0 pb2V: 0 rb2V: 0 AileronAlpha: 0 FlapAlpha: 0 ElevatorBeta2: 0 RudderAlpha: 0 Alpha: 0 Beta: 0 AlphaDot: 0 BetaDot: 0 Mass: 0 Inertia: [3x3 table] CenterOfGravity: [0 0 0] CenterOfPressure: [0 0 0] AltitudeMSL: 0 GroundHeight: 0 XN: 0 XE: 0 XD: 0 U: 50 V: 0 W: 0 Phi: 0 Theta: 0 Psi: 0 P: 0 Q: 0 R: 0 Weight: 0 AltitudeAGL: 0 Airspeed: 50 GroundSpeed: 50 MachNumber: 0.1486 BodyVelocity: [50 0 0] GroundVelocity: [50 0 0] Ur: 50 Vr: 0 Wr: 0 FlightPathAngle: 0 CourseAngle: 0 InertialToBodyMatrix: [3x3 double] BodyToInertialMatrix: [3x3 double] BodyToWindMatrix: [3x3 double] WindToBodyMatrix: [3x3 double] DynamicPressure: 1.3896e+03 Environment: [1x1 Aero.Aircraft.Environment] ControlStates: [1x5 Aero.Aircraft.ControlState] OutOfRangeAction: "Limit" DiagnosticAction: "Warning" Properties: [1x1 Aero.Aircraft.Properties] UnitSystem: "Metric" AngleSystem: "Radians" TemperatureSystem: "Kelvin"
Rauw, M.O.: "Окружение Simulink для анализа Динамики и Управления Рейсом - Приложение 'Бобру' DHC-2". Первая часть: "Реализация библиотеки модели в Simulink". Вторая часть: "Нелинейный анализ автопилота 'Бобра'". Тезис магистра наук, Делфтский технический университет, Факультет Космической Разработки. Делфт, Нидерланды, 1993.