1
|
|
2
|
|
3
|
|
4
|
node AutoPilot ( HeadMode : real ; ailStick : real ; elevStick : real ; AltMode_Out1_41 : real ; FPAMode_Out1_51 : real ; ATMode_Out1_61 : real ; AltCmd_Out1_71 : real ; Altitude_Out1_81 : real ; CAS_Out1_91 : real ; CASCmdMCP_Out1_101 : real ; adiff : bool )
|
5
|
returns ( HeadEng : bool ; AltEng : bool ; FPAEng_In1_1051 : bool ; ATEng_In1_1063 : bool ; CASCmd_In1_1075 : real ) ;
|
6
|
let
|
7
|
|
8
|
-- GUIDE-180
|
9
|
assert (adiff = true) or (FPAMode_Out1_51 = 0.0) or (not (ailStick = 0.0)) or (not (elevStick = 0.0)) or (FPAEng_In1_1051 = true);
|
10
|
|
11
|
-- ALT-1
|
12
|
-- assert (not (AltMode_Out1_41 = 0.0)) or (AltEng = false);
|
13
|
|
14
|
-- GUIDE-120
|
15
|
assert ( ((adiff = true) or (FPAMode_Out1_51 = 0.0)) and (ailStick = 0.0) and (elevStick = 0.0)) or (AltEng = false);
|
16
|
|
17
|
assert (adiff = false) or (AltMode_Out1_41 = 0.0) or (not (ailStick = 0.0)) or (not (elevStick = 0.0)) or ((FPAEng_In1_1051 = false) and (AltEng = true));
|
18
|
|
19
|
tel
|
20
|
|
21
|
|
22
|
|
23
|
node AltitudeControl ( AltEng : bool ; AltCmd_Out1_29 : real ; Alt_Out1_39 : real ; GsKts_Out1_49 : real ; hdot_Out1_59 : real ; hdotChgRate_Out1_69 : real ; preAltGammaCmd : real; count : int )
|
24
|
returns ( altgammacmd_In1_661 : real ) ;
|
25
|
let
|
26
|
|
27
|
-- ALT-2
|
28
|
assert (AltEng = true) or (altgammacmd_In1_661 = 0.0);
|
29
|
|
30
|
-- GUIDE-200
|
31
|
assert true -> (count < 2) or (AltEng = false) or ((AltCmd_Out1_29 = Alt_Out1_39) or
|
32
|
((AltCmd_Out1_29 > Alt_Out1_39) and ( (altgammacmd_In1_661 > pre(preAltGammaCmd)) or (altgammacmd_In1_661 > 0) )) or
|
33
|
((AltCmd_Out1_29 < Alt_Out1_39) and ( (altgammacmd_In1_661 < pre(preAltGammaCmd)) or (altgammacmd_In1_661 < 0) )) );
|
34
|
|
35
|
tel
|
36
|
|
37
|
node FPAControl ( engage : bool ; gamcmd_Out1_25 : real ; gamma_Out1_35 : real ; thetadeg_Out1_45 : real ; VT_Out1_55 : real ; prePitch : real; count : int )
|
38
|
returns ( PitchCmd_In1_487 : real) ;
|
39
|
let
|
40
|
|
41
|
-- GUIDE-120
|
42
|
assert true -> (engage = false) or (count < 2) or (gamcmd_Out1_25 = gamma_Out1_35)
|
43
|
or ((gamcmd_Out1_25 > gamma_Out1_35) and (PitchCmd_In1_487 > pre(prePitch)))
|
44
|
or ((gamcmd_Out1_25 < gamma_Out1_35) and (PitchCmd_In1_487 < pre(prePitch)));
|
45
|
|
46
|
tel
|
47
|
|
48
|
|
49
|
|
50
|
node top (HeadMode : real ; ailStick : real ; elevStick : real ; AltMode : real ; FPAMode : real ; ATMode_Out1_61 : real ; CAS_Out1_91 : real ; CASCmdMCP_Out1_101 : real ; AltCmd : real ; Altitude : real ; gskts : real ; hdot : real; hdot_change_rate : real ; gamcmd_Out1_25 : real ; gamma_Out1_35 : real ; thetadeg_Out1_45 : real ; VT_Out1_55 : real )
|
51
|
returns ( obs: bool) ;
|
52
|
var
|
53
|
altgammaCmd : real;
|
54
|
fpain : real;
|
55
|
tempAlt : real;
|
56
|
tempFPA : real;
|
57
|
HeadEng : bool;
|
58
|
AltEng : bool;
|
59
|
FPAEng : bool;
|
60
|
ATEng : bool;
|
61
|
CasCmd : real;
|
62
|
PitchCmd : real;
|
63
|
prePitch : real;
|
64
|
preAltGammaCmd : real;
|
65
|
count : int;
|
66
|
guide200 : bool;
|
67
|
guide120 : bool;
|
68
|
adiff : bool;
|
69
|
let
|
70
|
|
71
|
HeadEng, AltEng, FPAEng, ATEng, CasCmd = AutoPilot(HeadMode, ailStick, elevStick, AltMode, FPAMode, ATMode_Out1_61, AltCmd, Altitude, CAS_Out1_91, CASCmdMCP_Out1_101, adiff);
|
72
|
|
73
|
altgammaCmd = AltitudeControl (AltEng, AltCmd, Altitude, gskts, hdot, hdot_change_rate, preAltGammaCmd, count);
|
74
|
|
75
|
-- FIXME: if we write this as code and not as assertion, the property cannot be proven, why??
|
76
|
assert fpain = (altgammaCmd + gamcmd_Out1_25);
|
77
|
prePitch = 3.0 -> pre(PitchCmd);
|
78
|
count = 0 -> pre(count) + 1;
|
79
|
preAltGammaCmd = 0.0 -> pre(altgammaCmd);
|
80
|
adiff = (Altitude - AltCmd <= 200) and (Altitude - AltCmd >= -200);
|
81
|
|
82
|
PitchCmd = FPAControl(FPAEng ,fpain ,gamma_Out1_35 , thetadeg_Out1_45, VT_Out1_55, prePitch, count);
|
83
|
|
84
|
assert (not (AltMode = 0.0));
|
85
|
assert (not (FPAMode = 0.0));
|
86
|
assert (elevStick = 0.0);
|
87
|
assert (ailStick = 0.0);
|
88
|
|
89
|
assert true -> AltCmd = pre (AltCmd);
|
90
|
assert AltCmd > 3000 ;
|
91
|
assert true -> (Altitude = pre(Altitude) + pre (hdot));
|
92
|
assert (-40.0 < hdot) and (hdot < 40.0);
|
93
|
assert (-100.0 > Altitude - AltCmd) or (100.0 < Altitude - AltCmd);
|
94
|
assert (hdot_change_rate = 3.2);
|
95
|
|
96
|
assert (AltCmd > Altitude + 300) -> true;
|
97
|
assert (gamcmd_Out1_25 > 1.0) and (gamcmd_Out1_25 < 10.0);
|
98
|
|
99
|
guide120 = true -> (count < 2) or (gamcmd_Out1_25 = gamma_Out1_35)
|
100
|
or ((gamcmd_Out1_25 > gamma_Out1_35) and (PitchCmd > pre(prePitch)))
|
101
|
or ((gamcmd_Out1_25 < gamma_Out1_35) and (PitchCmd < pre(prePitch)));
|
102
|
|
103
|
guide200 = true -> (count < 2) or ((AltCmd = Altitude) or
|
104
|
((AltCmd > Altitude) and ( (altgammaCmd > pre(preAltGammaCmd)) or (altgammaCmd > 0) )) or
|
105
|
((AltCmd < Altitude) and ( (altgammaCmd < pre(preAltGammaCmd)) or (altgammaCmd < 0) )) );
|
106
|
|
107
|
|
108
|
obs = ((adiff = true) and (guide200 = true)) or ((adiff = false) and (guide120 = true));
|
109
|
|
110
|
|
111
|
--!MAIN : true;
|
112
|
--!PROPERTY: obs = true;
|
113
|
|
114
|
tel
|