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