1
|
node integrator_reset ( Fx : real ; ResetLevel : bool ; x0 : real )
|
2
|
returns ( ir_out : real ) ;
|
3
|
let
|
4
|
ir_out = x0 -> if ( ResetLevel ) then x0 else ( Fx * 1.0) + pre ( ir_out );
|
5
|
tel
|
6
|
|
7
|
|
8
|
|
9
|
node VariableLimitSaturation ( up_lim : real ; Signal : real ; lo_lim : real )
|
10
|
returns ( out : real ) ;
|
11
|
var enforce_lo_lim : real ;
|
12
|
let
|
13
|
enforce_lo_lim = if Signal >= lo_lim then Signal else lo_lim;
|
14
|
out = if enforce_lo_lim <= up_lim then enforce_lo_lim else up_lim;
|
15
|
tel
|
16
|
|
17
|
|
18
|
node Saturation ( Signal : real )
|
19
|
returns ( s_out : real ) ;
|
20
|
var enforce_lo_lim : real ;
|
21
|
let
|
22
|
enforce_lo_lim = if 0.0001 >= Signal then 0.0001 else Signal;
|
23
|
s_out = if 1000.0 <= enforce_lo_lim then 1000.0 else enforce_lo_lim;
|
24
|
tel
|
25
|
|
26
|
|
27
|
node VariableRateLimit ( ratelim_Out1_334 : real ; input_Out1_344 : real ; ICtrig_Out1_354 : bool ; IC_Out1_364 : real )
|
28
|
returns ( output_In1_489 : real ) ;
|
29
|
var Gain_Out1_373 : real ;
|
30
|
Gain1_Out1_382 : real ;
|
31
|
Integrator1_Out1_391 : real ;
|
32
|
Sum2_Out1_401 : real ;
|
33
|
Variable_Limit_Saturation_Out1_410 : real ;
|
34
|
Gain_In1_372 : real ;
|
35
|
Gain1_In1_381 : real ;
|
36
|
Integrator1_In1_388 : real ;
|
37
|
Integrator1_In2_389 : bool ;
|
38
|
Integrator1_In3_390 : real ;
|
39
|
Sum2_In1_399 : real ;
|
40
|
Sum2_In2_400 : real ;
|
41
|
Variable_Limit_Saturation_In1_407 : real ;
|
42
|
Variable_Limit_Saturation_In2_408 : real ;
|
43
|
Variable_Limit_Saturation_In3_409 : real ;
|
44
|
|
45
|
let
|
46
|
Gain_Out1_373 = 20.0 * Gain_In1_372;
|
47
|
Gain1_Out1_382 = -(Gain1_In1_381);
|
48
|
Integrator1_Out1_391 = Integrator1_In3_390 -> pre integrator_reset ( Integrator1_In1_388 , Integrator1_In2_389 , Integrator1_In3_390 );
|
49
|
Sum2_Out1_401 = Sum2_In1_399 + - Sum2_In2_400;
|
50
|
Variable_Limit_Saturation_Out1_410 = VariableLimitSaturation ( Variable_Limit_Saturation_In1_407 , Variable_Limit_Saturation_In2_408 , Variable_Limit_Saturation_In3_409 );
|
51
|
Gain_In1_372 = Sum2_Out1_401;
|
52
|
Variable_Limit_Saturation_In2_408 = Gain_Out1_373;
|
53
|
Gain1_In1_381 = ratelim_Out1_334;
|
54
|
Variable_Limit_Saturation_In1_407 = ratelim_Out1_334;
|
55
|
Variable_Limit_Saturation_In3_409 = Gain1_Out1_382;
|
56
|
Sum2_In2_400 = Integrator1_Out1_391;
|
57
|
output_In1_489 = Integrator1_Out1_391;
|
58
|
Sum2_In1_399 = input_Out1_344;
|
59
|
Integrator1_In2_389 = ICtrig_Out1_354;
|
60
|
Integrator1_In3_390 = IC_Out1_364;
|
61
|
Integrator1_In1_388 = Variable_Limit_Saturation_Out1_410;
|
62
|
tel
|
63
|
|
64
|
|
65
|
node AltitudeControl ( AntEng_Out1_19 : real ; AltCmd_Out1_29 : real ; Alt_Out1_39 : real ; GsKts_Out1_49 : real ; hdot_Out1_59 : real ; hdotChgRate_Out1_69 : real )
|
66
|
returns ( altgammacmd_In1_661 : real ) ;
|
67
|
var Abs_Out1_144 : real ;
|
68
|
Divide_Out1_184 : real ;
|
69
|
Kh_Out1_193 : real ;
|
70
|
Logical_Operator_Out1_198 : bool ;
|
71
|
Mux_Out1_202_0 : real ;
|
72
|
Mux_Out1_202_1 : real ;
|
73
|
Mux1_Out1_206_0 : real ;
|
74
|
Mux1_Out1_206_1 : real ;
|
75
|
Saturation1_Out1_213 : real ;
|
76
|
Sum_Out1_286 : real ;
|
77
|
Sum3_Out1_296 : real ;
|
78
|
Switch_Out1_305 : real ;
|
79
|
Switch1_Out1_314 : real ;
|
80
|
Variable__Rate_Limit_Out1_324 : real ;
|
81
|
Variable_Limit_Saturation_0_Out1_509 : real ;
|
82
|
k_Out1_585 : real ;
|
83
|
kts2fps_Out1_594 : real ;
|
84
|
r2d_Out1_603 : real ;
|
85
|
Abs_In1_143 : real ;
|
86
|
Divide_In1_182 : real ;
|
87
|
Divide_In2_183 : real ;
|
88
|
Kh_In1_192 : real ;
|
89
|
Logical_Operator_In1_197 : bool ;
|
90
|
Mux_In1_200 : real ;
|
91
|
Mux_In2_201 : real ;
|
92
|
Mux1_In1_204 : real ;
|
93
|
Mux1_In2_205 : real ;
|
94
|
Saturation1_In1_212 : real ;
|
95
|
Sum_In1_284 : real ;
|
96
|
Sum_In2_285 : real ;
|
97
|
Sum3_In1_294 : real ;
|
98
|
Sum3_In2_295 : real ;
|
99
|
Switch_In1_302 : real ;
|
100
|
Switch_In2_303 : bool ;
|
101
|
Switch_In3_304 : real ;
|
102
|
Switch1_In1_311 : real ;
|
103
|
Switch1_In2_312 : bool ;
|
104
|
Switch1_In3_313 : real ;
|
105
|
Variable__Rate_Limit_In1_320 : real ;
|
106
|
Variable__Rate_Limit_In2_321 : real ;
|
107
|
Variable__Rate_Limit_In3_322 : bool ;
|
108
|
Variable__Rate_Limit_In4_323 : real ;
|
109
|
Variable_Limit_Saturation_0_In1_506 : real ;
|
110
|
Variable_Limit_Saturation_0_In2_507 : real ;
|
111
|
Variable_Limit_Saturation_0_In3_508 : real ;
|
112
|
k_In1_584 : real ;
|
113
|
kts2fps_In1_593 : real ;
|
114
|
r2d_In1_602 : real ;
|
115
|
|
116
|
let
|
117
|
Abs_Out1_144 = if Abs_In1_143 < 0.000000 then - Abs_In1_143 else Abs_In1_143;
|
118
|
--Divide_Out1_184 = Divide_In1_182 / Divide_In2_183;
|
119
|
Divide_Out1_184 = Divide_In1_182;
|
120
|
Kh_Out1_193 = 0.080000 * Kh_In1_192;
|
121
|
Logical_Operator_Out1_198 = not Logical_Operator_In1_197;
|
122
|
Mux_Out1_202_0 = Mux_In1_200;
|
123
|
Mux_Out1_202_1 = Mux_In2_201;
|
124
|
Mux1_Out1_206_0 = Mux1_In1_204;
|
125
|
Mux1_Out1_206_1 = Mux1_In2_205;
|
126
|
Saturation1_Out1_213 = Saturation( Saturation1_In1_212 );
|
127
|
Sum_Out1_286 = Sum_In1_284 + - Sum_In2_285;
|
128
|
Sum3_Out1_296 = Sum3_In1_294 + Sum3_In2_295;
|
129
|
Switch_Out1_305 = if Switch_In2_303 then Switch_In1_302 else Switch_In3_304;
|
130
|
Switch1_Out1_314 = if Switch1_In2_312 then Switch1_In1_311 else Switch1_In3_313;
|
131
|
Variable__Rate_Limit_Out1_324 = VariableRateLimit ( Variable__Rate_Limit_In1_320 , Variable__Rate_Limit_In2_321 , Variable__Rate_Limit_In3_322 , Variable__Rate_Limit_In4_323 );
|
132
|
Variable_Limit_Saturation_0_Out1_509 = VariableLimitSaturation( Variable_Limit_Saturation_0_In1_506 , Variable_Limit_Saturation_0_In2_507 , Variable_Limit_Saturation_0_In3_508 );
|
133
|
k_Out1_585 = - (k_In1_584);
|
134
|
kts2fps_Out1_594 = 1.687800 * kts2fps_In1_593;
|
135
|
r2d_Out1_603 = 57.295800 * r2d_In1_602;
|
136
|
altgammacmd_In1_661 = Switch1_Out1_314;
|
137
|
Sum_In1_284 = AltCmd_Out1_29;
|
138
|
Mux_In1_200 = AltCmd_Out1_29;
|
139
|
Sum_In2_285 = Alt_Out1_39;
|
140
|
Mux_In2_201 = Alt_Out1_39;
|
141
|
Variable__Rate_Limit_In4_323 = hdot_Out1_59;
|
142
|
Abs_In1_143 = hdot_Out1_59;
|
143
|
Switch1_In2_312 = if AntEng_Out1_19 = 0.000000 then false else true;
|
144
|
Switch_In2_303 = if AntEng_Out1_19 = 0.000000 then false else true;
|
145
|
Logical_Operator_In1_197 = if AntEng_Out1_19 = 0.000000 then false else true;
|
146
|
kts2fps_In1_593 = GsKts_Out1_49;
|
147
|
Variable__Rate_Limit_In1_320 = hdotChgRate_Out1_69;
|
148
|
Kh_In1_192 = Sum_Out1_286;
|
149
|
Sum3_In1_294 = Abs_Out1_144;
|
150
|
Sum3_In2_295 = 10.0;
|
151
|
Variable_Limit_Saturation_0_In3_508 = k_Out1_585;
|
152
|
k_In1_584 = Sum3_Out1_296;
|
153
|
Variable_Limit_Saturation_0_In1_506 = Sum3_Out1_296;
|
154
|
r2d_In1_602 = Divide_Out1_184;
|
155
|
Switch1_In1_311 = r2d_Out1_603;
|
156
|
Variable__Rate_Limit_In3_322 = Logical_Operator_Out1_198;
|
157
|
Variable__Rate_Limit_In2_321 = Variable_Limit_Saturation_0_Out1_509;
|
158
|
Mux1_In1_204 = Variable_Limit_Saturation_0_Out1_509;
|
159
|
Divide_In1_182 = Variable__Rate_Limit_Out1_324;
|
160
|
Mux1_In2_205 = Variable__Rate_Limit_Out1_324;
|
161
|
Saturation1_In1_212 = kts2fps_Out1_594;
|
162
|
Divide_In2_183 = Saturation1_Out1_213;
|
163
|
Variable_Limit_Saturation_0_In2_507 = Switch_Out1_305;
|
164
|
Switch_In1_302 = Kh_Out1_193;
|
165
|
Switch_In3_304 = 0.0 ;
|
166
|
Switch1_In3_313 = 0.0;
|
167
|
tel
|
168
|
|
169
|
|
170
|
node top (AltEng : bool; AltCmd : real ; Altitude : real ; gskts : real ; hdot : real ; hdotChgRate : real )
|
171
|
returns ( obs: bool) ;
|
172
|
var altgammaCmd : real;
|
173
|
tempAlt : real;
|
174
|
let
|
175
|
|
176
|
tempAlt = if AltEng then 1.0 else 0.0;
|
177
|
altgammaCmd = AltitudeControl (tempAlt, AltCmd, Altitude, gskts, hdot, hdotChgRate);
|
178
|
|
179
|
assert (not AltEng);
|
180
|
|
181
|
obs = (altgammaCmd = 0.0);
|
182
|
|
183
|
--!MAIN : true;
|
184
|
--!PROPERTY: obs = true;
|
185
|
|
186
|
tel
|
187
|
|