В этом примере показано, как создать и определить пользовательское состояние для самолета.
В этом примере описывается следующее:
Определение пользовательских состояний и времени их использования.
Создание базового пользовательского состояния.
Создание расширенного пользовательского состояния.
Использование заказного состояния при анализе самолета.
По умолчанию объект фиксированного состояния имеет фиксированный набор значений состояния. К ним относятся угол атаки, воздушная скорость, высота и другие.
Эти состояния используются в фиксированном объекте для определения размеров неразмерных коэффициентов или предоставления данных в точки останова таблицы поиска.
Однако есть случаи, когда этот набор состояний по умолчанию не захватывает все желаемые состояния самолета. Это происходит, когда используются пользовательские состояния.
Путем определения пользовательского состояния можно создавать новые значения состояния, которые могут использоваться в любом компоненте самолета.
Создание пользовательских состояний с помощью Aero.FixedWing.State класс:
Определите новый класс. Этот класс должен наследовать от Aero.FixedWing.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
Более продвинутым примером пользовательского состояния является модель самолета 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 для извлечения углов отклонения управляющей поверхности. В методах получения пользовательских состояний может использоваться любая комбинация состояний или методов.
При определенном пользовательском состоянии используйте пользовательское состояние в методах анализа.
[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
Раув, М.О.: «Simulink Environment for Flight Dynamics and Control analysis - Применение к DHC-2» Бобр «». Часть I: «Реализация библиотеки моделей в Simulink». Часть II: «Нелинейный анализ автопилота 'Бобра'». Дипломная работа, Делфтский технологический университет, факультет аэрокосмической техники. Делфт, Нидерланды, 1993 год.