Project

General

Profile

root / branches / compiler / cSharp / ooasCompiler / doc / examples / AlarmSystem_manual_timeasparam_flags.ooas @ 3

1
types
2
	TimeSteps = {Int0 = 0 , Int20 = 20, Int30 = 30, Int270 = 270} ;
3
	Int = int[0..270] ;
4
	SmallInt = int[0..3] ;
5
	AlarmSystem = autocons system
6
	|[
7
		var
8
			open : bool = true ;
9
			locked : bool = false ;
10
			armed : bool = false ;
11
			soundAlarm : bool = false ;
12
			flashAlarm : bool = false ;
13
			blockingLevel : SmallInt = 0 ;
14
			armedOnNow : bool = false ;
15
			armedOnLater : bool = false ;
16
			armedOff : bool = false ;
17
			soundOn : bool = false ;
18
			soundOffNow : bool = false ;
19
			soundOffLater : bool = false ;
20
			flashOn : bool = false ;
21
			flashOffNow : bool = false ;
22
			flashOffLater : bool = false  ;
23
			silent : bool = false # true after alarms turned off
24
		actions
25
			ctr Close ( waittime : Int) =
26
				requires not flashAlarm and not soundAlarm :
27
					requires open and waittime = 0 and blockingLevel = 0 and locked and silent:
28
						open := false ;
29
						blockingLevel := 1 ;
30
						armedOnNow := true ;
31
						silent := false			
32

    
33
					end []
34
					requires open and waittime = 0 and blockingLevel = 0 and not locked and silent:
35
						silent := false ;			
36
						open := false 
37
					end []
38
					requires open and waittime = 0 and blockingLevel = 0 and locked and not silent:
39
						open := false ;
40
						blockingLevel := 1 ;
41
						armedOnLater := true
42

    
43
					end []
44
					requires open and waittime = 0 and blockingLevel = 0 and not locked and not silent:
45
						open := false 
46
					end
47

    
48
				end ;
49

    
50
			ctr Open ( waittime : Int) =
51
				requires true :
52
					requires not open and waittime = 0 and blockingLevel = 0 and not armed :
53
						open := true
54
					end []
55
					requires not open and waittime = 0 and blockingLevel = 0 and armed :
56
						open := true ;
57
						armed := false ;
58
						blockingLevel := 3 ;
59
						armedOff := true ;
60
						soundOn := true ;
61
						flashOn := true
62
					end 
63
				end ;
64

    
65
#				requires not open and waittime = 0 and blockingLevel = 0 :
66
#					open := true ;
67
#					(requires not armed :
68
#						skip
69
#					end []
70
#					requires armed :
71
#						armed := false ;
72
#						blockingLevel := 3 ;
73
#						armedOff := true ;
74
#						soundOn := true ;
75
#						flashOn := true 
76
#					end)
77
#				end ;
78
			ctr Unlock ( waittime : Int) =
79
				requires true : 
80
					requires locked and waittime = 0 and blockingLevel = 0 and not flashAlarm and soundAlarm:
81
						locked := false ;
82
						silent := false ;
83
						soundOffLater := false ;
84
						soundOffNow := true ;
85
						blockingLevel := 1 
86
					end []
87
					requires locked and waittime = 0 and blockingLevel = 0 and flashAlarm and soundAlarm :
88
						locked := false ;
89
						flashOffNow := true ;
90
						blockingLevel := 2 ;
91
						silent := false ;
92
						soundOffLater := false ;
93
						soundOffNow := true
94

    
95
					end []
96
					requires locked and waittime = 0 and blockingLevel = 0 and not flashAlarm and not soundAlarm:
97
						locked := false ;
98
						silent := false ;
99
						armedOff := true ;
100
						blockingLevel := 1
101
					end []
102
					requires locked and waittime = 0 and blockingLevel = 0 and flashAlarm and not soundAlarm:
103
						locked := false ;
104
						flashOffNow := true ;
105
						flashOffLater := false ;
106
						blockingLevel := 1 ;
107
						silent := false
108
					end
109
				end;
110
				
111
			ctr Lock ( waittime : Int) =
112
				requires true :
113
					requires not locked and waittime = 0 and blockingLevel = 0 and open :
114
						locked := true
115
					end []
116
					requires not locked and waittime = 0 and blockingLevel = 0 and not open :
117
						locked := true ;
118
						blockingLevel := 1 ;
119
						armedOnLater := true
120
					end 
121
				end ;
122
			obs ArmedOn (waittime : Int) =
123
				requires (armedOnNow or armedOnLater):
124
					requires (waittime = 20 and armedOnLater) :
125
						armedOnLater := false ;
126
						blockingLevel := blockingLevel - 1 ;
127
						armed := true
128
					end
129
					[] requires (waittime = 0 and armedOnNow) :
130
						armedOnNow := false ;
131
						blockingLevel := blockingLevel - 1 ;
132
						armed := true
133
					end
134
				end ;
135
			obs ArmedOff (waittime : Int) =
136
				requires (waittime = 0 and armedOff) :
137
					armedOff := false ;
138
					blockingLevel := blockingLevel - 1 ;
139
					armed := false
140
				end ;
141
			obs SoundOn (waittime : Int) =
142
				requires true :
143
					requires (waittime = 0 and soundOn and blockingLevel = 1) :
144
						soundOn := false ;
145
						blockingLevel := blockingLevel - 1 ;
146
						soundAlarm := true ;
147
						soundOffLater := true 
148
					end []
149
					requires (waittime = 0 and soundOn and blockingLevel <> 1) :
150
						soundOn := false ;
151
						blockingLevel := blockingLevel - 1 ;
152
						soundAlarm := true
153
					end 
154
	
155
				end ;
156
			obs SoundOff (waittime : Int) =
157
				requires (soundOffNow or soundOffLater) :
158
					requires (waittime = 30 and soundOffLater) :
159
						soundOffLater := false ;
160
						flashOffLater := true ;
161
						soundAlarm := false
162
					end
163
					[] requires (waittime = 0 and soundOffNow) :
164
						soundOffNow := false ;
165
						blockingLevel := blockingLevel - 1 ;
166
						soundAlarm := false
167
					end
168
				end ;
169
			obs FlashOn (waittime : Int) =
170
				requires true :
171
					requires (waittime = 0 and flashOn and blockingLevel = 1) :
172
						flashOn := false ;
173
						blockingLevel := blockingLevel - 1 ;
174
						flashAlarm := true ;
175
						soundOffLater := true 
176
					end []
177
					requires (waittime = 0 and flashOn and blockingLevel <> 1) :
178
						flashOn := false ;
179
						blockingLevel := blockingLevel - 1 ;
180
						flashAlarm := true
181
				end 
182
				end ;
183
			obs FlashOff (waittime : Int) =
184
				requires (flashOffNow or flashOffLater) :
185
					requires (waittime = 270 and flashOffLater) :
186
						flashOffLater := false ;
187
#						blockingLevel := blockingLevel - 1 ;
188
						flashAlarm := false ;
189
						silent := true
190
					end
191
					[] requires (waittime = 0 and flashOffNow) :
192
						flashOffNow := false ;
193
						blockingLevel := blockingLevel - 1 ;
194
						flashAlarm := false
195
					end
196
				end
197
	do
198
		var A : TimeSteps : Close (A) [] 
199
		var B : TimeSteps : Open (B) []
200
		var C : TimeSteps : Lock (C) []
201
		var D : TimeSteps : Unlock (D) []
202
		var E : TimeSteps : ArmedOn (E) []        
203
		var F : TimeSteps : ArmedOff (F) []        
204
		var G : TimeSteps : SoundOn (G) []        
205
		var H : TimeSteps : SoundOff (H) []   
206
    		var I : TimeSteps : FlashOn (I) []        
207
		var J : TimeSteps : FlashOff (J)    
208
	od
209
	]|
210
system
211
	AlarmSystem