В этом примере показано, как создать и задать пользовательское состояние для самолета с неподвижным крылом.
Этот пример описывает:
Определение пользовательских состояний и когда они могут использоваться.
Создание основного пользовательского состояния.
Создание усовершенствованного пользовательского состояния.
Используя пользовательское состояние в анализе самолета с неподвижным крылом.
По умолчанию объект состояния фиксированного крыла имеет фиксированный набор значений состояния. Они включают угол нападения, скорости полета, высоты и других.
Эти состояния используются в объекте фиксированного крыла определить размерность безразмерные коэффициенты или предоставить данные точкам останова интерполяционной таблицы.
Однако существуют случаи, где этот набор по умолчанию состояний не получает все требуемые состояния самолета. Это - когда пользовательские состояния используются.
Путем определения пользовательского состояния возможно создать новую стоимость состояния, которая может использоваться в любом компоненте самолета с неподвижным крылом.
Создать пользовательские состояния с 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.