Project

General

Profile

Download (7.66 KB) Statistics
| Branch: | Tag: | Revision:
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 / 1.0;
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
Saturation1_Out1_213  = 1.0;
128
Sum_Out1_286  = Sum_In1_284 + - Sum_In2_285;
129
Sum3_Out1_296  = Sum3_In1_294 + Sum3_In2_295;
130
Switch_Out1_305  = if Switch_In2_303 then Switch_In1_302 else Switch_In3_304;
131
Switch1_Out1_314  = if Switch1_In2_312 then Switch1_In1_311 else Switch1_In3_313;
132
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  );
133
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  );
134
k_Out1_585  = - (k_In1_584);
135
kts2fps_Out1_594  = 1.687800 * kts2fps_In1_593;
136
-- r2d_Out1_603  = 57.295800 * r2d_In1_602;
137
r2d_Out1_603  = r2d_In1_602;
138
altgammacmd_In1_661  = Switch1_Out1_314;
139
Sum_In1_284  = AltCmd_Out1_29;
140
Mux_In1_200  = AltCmd_Out1_29;
141
Sum_In2_285  = Alt_Out1_39;
142
Mux_In2_201  = Alt_Out1_39;
143
Variable__Rate_Limit_In4_323  = hdot_Out1_59;
144
Abs_In1_143  = hdot_Out1_59;
145
Switch1_In2_312  = if AntEng_Out1_19 = 0.000000 then false else true;
146
Switch_In2_303  = if AntEng_Out1_19 = 0.000000 then false else true;
147
Logical_Operator_In1_197  = if AntEng_Out1_19 = 0.000000 then false else true;
148
kts2fps_In1_593  = GsKts_Out1_49;
149
Variable__Rate_Limit_In1_320  = hdotChgRate_Out1_69;
150
Kh_In1_192  = Sum_Out1_286;
151
Sum3_In1_294  = Abs_Out1_144;
152
Sum3_In2_295  = 10.0;
153
Variable_Limit_Saturation_0_In3_508  = k_Out1_585;
154
k_In1_584  = Sum3_Out1_296;
155
Variable_Limit_Saturation_0_In1_506  = Sum3_Out1_296;
156
r2d_In1_602  = Divide_Out1_184;
157
Switch1_In1_311  = r2d_Out1_603;
158
Variable__Rate_Limit_In3_322  = Logical_Operator_Out1_198;
159
Variable__Rate_Limit_In2_321  = Variable_Limit_Saturation_0_Out1_509;
160
Mux1_In1_204  = Variable_Limit_Saturation_0_Out1_509;
161
Divide_In1_182  = Variable__Rate_Limit_Out1_324;
162
Mux1_In2_205  = Variable__Rate_Limit_Out1_324;
163
Saturation1_In1_212  = kts2fps_Out1_594;
164
Divide_In2_183  = Saturation1_Out1_213;
165
Variable_Limit_Saturation_0_In2_507  = Switch_Out1_305;
166
Switch_In1_302  = Kh_Out1_193;
167
Switch_In3_304  = 0.0 ;
168
Switch1_In3_313  = 0.0;
169
 tel 
170

    
171

    
172

    
173

    
174
node top (AltEng : bool; AltCmd : real ; Altitude : real ; gskts  : real ; hdot  : real ; hdotChgRate : real ) 
175
   returns ( obs: bool) ;
176
  var altgammaCmd  : real;
177
    tempAlt : real;
178
    preAltGammaCmd : real;
179
    count : int;
180
let
181

    
182
  tempAlt = if AltEng then 1.0 else 0.0;
183
  altgammaCmd =  AltitudeControl (tempAlt, AltCmd,  Altitude, gskts, hdot, hdotChgRate);
184
  
185
  assert (AltEng = true);
186
  assert true -> AltCmd = pre (AltCmd);
187
  assert AltCmd > 3000 ;
188
  assert ((AltCmd - Altitude < 250) and (AltCmd - Altitude > -250)) -> true;
189

    
190
  assert true -> (Altitude = pre(Altitude) + pre (hdot));
191
  
192
  -- assert true -> (hdot = pre (hdot));
193
  
194
  assert (-40 < hdot) and (hdot < 40);  
195

    
196
  -- assert hdot = 0.0;
197

    
198
  assert (-100.0 > Altitude - AltCmd) or (100.0 < Altitude - AltCmd);
199

    
200
  -- assert true -> (((pre(altgammaCmd) > 0) and (hdot > 0)) or ((pre(altgammaCmd) < 0) and (hdot < 0)) or ((pre(altgammaCmd) = 0) and (hdot = 0)));
201
  
202
  assert (hdotChgRate = 3.2);
203

    
204
  preAltGammaCmd = 0.0 -> pre(altgammaCmd);
205

    
206
  count = 0 -> pre(count) + 1;
207

    
208
  obs = true -> (count < 2) or ((AltCmd = Altitude) or 
209
    ((AltCmd > Altitude) and ( (altgammaCmd > pre(preAltGammaCmd)) or (altgammaCmd > 0) )) or 
210
    ((AltCmd < Altitude) and ( (altgammaCmd < pre(preAltGammaCmd)) or (altgammaCmd < 0) )) );
211
 
212
 --!MAIN : true;
213
--!PROPERTY: obs = true;
214

    
215
tel
216

    
(17-17/28)