|
|
1.1 root 1: -1-
2:
3:
4: AIR TRAFFIC CONTROL SIMULATION
5:
6: James J. Gillogly
7:
8:
9: 1_. Introduction____________
10:
11: ATC is a real-time simulation game running under UNIX on the VAX and
12:
13: PDP-11/45 at Rand. The user, as an air traffic controller, manages the
14:
15: area around one or more airports. He must issue commands to the twenty-six
16:
17: airplanes that appear during the course of the game, guiding each to the
18:
19: destination listed on its flight plan, while maintaining a high level of
20:
21: safety (i.e., observing all the relevant FAA regulations). The airspace
22:
23: includes airways linking entry/exit fixes at the edges of the screen,
24:
25: airports, and navaids (navigational aids, radio beacons). ATC simulates
26:
27: the controller's radar terminal on the Ann Arbor screen, using cursor
28:
29: positioning to move the planes. ATC is based on a game by David Mannering,
30:
31: a former air traffic controller. This version benefitted from design
32:
33: decisions and helpful suggestions by Bob Wesson (project leader), Keith
34:
35: Wescourt, Stockton Gaines, and others in the Air Traffic Control project.
36:
37:
38: 2_. Usage_____
39:
40: To start ATC from the UNIX command level, give the command
41:
42: % atc
43:
44: This will bring the simulated radar display to the screen. ATC prompts for
45:
46: the game time with:
47:
48: < >
49:
50: Enter the time in minutes -- the value must be between 16 and 99. In
51:
52: a 99-minute game the planes will be spaced out rather well; a 30-minute
53:
54: game is difficult, even for an experienced player. ATC continually
55:
56: displays the amount of time remaining.
57:
58:
59:
60:
61: -2-
62:
63:
64: Several options are available as flags on the "atc" command.
65:
66:
67: -u=<string> : Use the file specified by the string to find
68: the airspace, which is either specified with
69: -a (below) or defaulted. The default file is
70: ~jim/atc/airspaces on the VAX, and
71: /mnt/jim/atc/airspaces on the PDP-11/45.
72:
73: -a=<string> : Use the airspace identified by the string.
74: (The default airspace is called "Apple1"
75: and corresponds to the first airspace in
76: Mannering's version of ATC.)
77:
78: -s=<seed> : The seed is a string of digits (32 bits worth)
79: to start the random number generator. If it isn't
80: supplied the program uses the number of seconds
81: since 1970.
82:
83: -t=<time> : Mainly useful for program control - sets the
84: game time to the specified number of minutes.
85: If it isn't provided the program will prompt in
86: the usual way for the time.
87:
88:
89: 3_. Reading_______ the___ radar_____
90:
91: The initial display of a typical airspace looks like this:
92:
93:
94: . 0 . . . . . . 1 . . . . . . . . . . . . . .
95: . . , . . . . . , . . . . . . . . . . . . . .
96: . . . , . . . . , . . . . . . . . . . . . . 2
97: . . . . , . . . , . . . . . . . . . . . . , .
98: . . . . . , . . , . . . . . . . . . . . , . .
99: . . . . . . , . , . . . . . . . . . . , . . .
100: . . . . . . . , , . . . . . . . . . , . . . .
101: 6 , , , , , , , * , , , , , , , , , , , , , 3
102: . . . . . . . . , , . . . . . . , . . . . . .
103: . . . . . . . . , . , . . . . , . . . . . . .
104: . . . . . . . . , . . , . . % . . . . . . . .
105: . . . . . . . . , . . . , , . . . . . . . . .
106: . . . . . . . . , . . . , , . . . . . . . . .
107: . . . . . . . . , . . , . . , . . . . . . . .
108: . . . . . . . . , . , . . . . , . . . . . . .
109: . . . . . . . . , , . . . . . . , . . . . . .
110: 4 , , , , , , , * , , , , , # , , , , , , , 5
111: . . . . . . . , , . . . . . . . . . , . . . .
112: . . . . . . , . , . . . . . . . . . . , . . .
113: . . . . . , . . , . . . . . . . . . . . , . .
114: . . . . , . . . , . . . . . . . . . . . . , .
115: . . . , . . . . , . . . . . . . . . . . . . 9
116: . . 7 . . . . . 8 . . . . . . . . . . . . . .
117:
118:
119:
120:
121: -3-
122:
123:
124: % and # indicate the airports. Navaids are indicated with an "*", and
125:
126: airways show up as lines of commas with entry/exit fixes on each end
127:
128: indicated by the digits 0-9. In this example the numbers on the ends of
129:
130: each airway are 9's complements, to make them easier to locate, but the
131:
132: airspace designer need not observe this convention. The distance between
133:
134: adjacent dots is one mile -- horizontally, vertically, or diagonally.
135:
136: Airplanes are indicated by the call letter of the plane (A through Z)
137:
138: followed by its altitude in thousands of feet. For example, the symbol
139:
140: "X3" on the screen means that airplane X is in the location shown, and is
141:
142: flying at 3000 feet. Two airplanes in the same horizontal location obscure
143:
144: each other, so that only one appears on the radar screen - be careful!
145:
146:
147: 4_. Airplane________ Types_____
148:
149: There are two kinds of planes: jets and props (light propeller
150:
151: planes). Jets travel at 240 knots (i.e., one mile every 15 real seconds)
152:
153: and props travel at 120 knots. A jet turns at the rate of three degrees
154:
155: per second. Since the screen updates every 15 seconds, it will turn 45
156:
157: degrees each tick. Props turn half as fast, so that they also turn 45
158:
159: degrees each time they are updated (a prop takes 30 seconds to move one
160:
161: mile). Each has sufficient fuel to get to any destination: jets have fuel
162:
163: for 15 minutes of real time, and props have 21 minutes of fuel. Note,
164:
165: however, that a plane sitting on the runway burns fuel at the same rate as
166:
167: a plane in the air.
168:
169:
170: 5_. Object______ of__ the___ Game____
171:
172: To complete his shift successfully, the controller must handle all 26
173:
174: airplanes without running out of time, violating FAA regulations, letting
175:
176: any plane run out of fuel, or sending any plane out the wrong destination
177:
178:
179:
180:
181: -4-
182:
183:
184: or at the wrong altitude. This means either landing each plane at its
185:
186: desired airport, or sending it out the desired fix in the right direction
187:
188: (i.e., along the airway) at 5000 feet.
189:
190: The FAA requires planes to be separated either by three miles
191:
192: horizontal distance or 1000 feet of altitude. If they come closer it is
193:
194: logged as a "system error", which is serious trouble. NOTE that a plane
195:
196: changing altitude is considered (by FAA regs) to be at both its old and new
197:
198: altitudes; thus two planes may be 2000 feet apart, but still cause a system
199:
200: error because they were at the same altitude on the previous tick, where
201:
202: one was climbing and the other descending.
203:
204: Allowing a plane to run out of fuel, either on the runway or in the
205:
206: air, is a serious error. Planes on the runway burn fuel at the same rate
207:
208: as when they are airborne.
209:
210: A "boundary error" is serious, but not as likely to be fatal. It
211:
212: occurs when a plane is sent out at the wrong fix, the wrong altitude, or in
213:
214: the wrong direction. A plane must be headed out the correct exit fix in
215:
216: the direction opposite to that fix's entry direction. This will be along
217:
218: the airway to that exit fix. All planes must leave the airspace at 5000
219:
220: feet, so controllers of neighboring airspaces will know what to expect.
221:
222:
223: 6_. Basic_____ Flight______ Plans_____
224:
225: The right side of the screen is reserved for flight plans. A typical
226:
227: flight plan looks like:
228:
229: Fj 7->3 4 NE +
230:
231: The first letter is the aircraft ID, which can be any letter from A through
232:
233: Z. The next letter is the airplane type: either "j" for jet or "p" for
234:
235: propeller.
236:
237: The next field (e.g. 7->3) gives the plane's intentions: this one is
238:
239:
240:
241: -5-
242:
243:
244: entering at (or is now at) fix 7 and leaving at fix 3. A plane enters the
245:
246: airspace at any fix and continues along the airway until given other
247:
248: instructions. The controller may need to give course corrections (below)
249:
250: to enable the plane to leave at the desired fix. Either the origin or
251:
252: destination (or both) can be the symbol for an airport, indicating that
253:
254: this plane will be taking off or landing. The "origin" character is the
255:
256: entry fix if the plane has not yet entered the airspace; otherwise it is a
257:
258: symbol for the plane's location on the screen: "*" if it is over a beacon,
259:
260: "." if it is in some random location, "," if it is on an airway, or the
261:
262: appropriate airport symbol if it is flying over an airport.
263:
264: Next is the altitude in thousands of feet. Plane F in this example is
265:
266: at 4000 feet.
267:
268: The bearing is given as a compass direction: N, S, E, W, NE, NW, SE,
269:
270: or SW, with north at the top of the radar screen. The plane in the example
271:
272: above is headed northeast.
273:
274: The final character is the amount of fuel left. If it is a "+", as
275:
276: here, the plane has more than 10 minutes of fuel left; otherwise it shows
277:
278: the number of minutes of fuel remaining.
279:
280: The flight plans are separated into two groups: the top group previews
281:
282: the planes that will become active within the next minute, and the bottom
283:
284: group is for planes that are already active. Flight strips in the preview
285:
286: area are preceded by a digit from 0 to 4, indicating how many "ticks"
287:
288: (15-second intervals) before the plane enters the airspace. Planes may be
289:
290: cleared for takeoff as soon as they appear in the preview area.
291:
292:
293: 7_. Airplane________ Commands________
294:
295: In order to maintain safety and route the planes to their designated
296:
297: goals, the controller issues commands telling the pilots to turn, change
298:
299:
300:
301: -6-
302:
303:
304: altitude, take off, and land. Each command is terminated by a <RETURN>.
305:
306: <BACK SPACE> may be used to correct errors on the command line. Either
307:
308: upper or lower case is allowed. The radar screen is updated every 15
309:
310: seconds; if the update occurs while a command is being typed, a beep will
311:
312: indicate that the command may no longer be timely.
313:
314:
315: 7_.1_ Command_______ Summary_______
316:
317: The following kinds of commands can be issued. Each is described in
318:
319: more detail below.
320:
321:
322: $ End the game and exit to UNIX
323: W Print flight strip for airplane W
324: XA3 X will change altitude to 3000 feet
325: QA0 Q will land (go to 0 feet altitude)
326: HRE H will turn right until it is heading east
327: ALNW A will turn left until it is heading northwest
328: CTS C will turn south through the smallest angle
329: T*7 T will take exit bearing for fix 7 at next navaid
330: P*W P will take landing bearing for White at next navaid
331: DH D will circle (hold) at next navaid
332: MR0 Aborts pending hold, clearance, or turn for plane M
333: <SPACE> Speed up the game by advancing 15 seconds
334:
335: 7_.2_ Terminating___________ the___ Game____
336:
337: The command "$" terminates the game and restores the terminal to its
338:
339: normal state (mainly leaving raw mode). The game will also terminate when
340:
341: the shift is over (i.e., time runs out or all traffic has been handled).
342:
343:
344: 7_.3_ Information___________
345:
346: Individual planes may be selected from the flight strips by typing the
347:
348: ID of the plane followed by a <RETURN>. The command "g<RETURN>" will print
349:
350: the flight strip for plane G under the command line.
351:
352:
353: 7_.4_ Changing________ Altitude________
354:
355: Airplanes normally enter the airspace at 6000 feet. If two or more
356:
357: planes are entering from a fix in a short period, they will be separated by
358:
359:
360:
361: -7-
362:
363:
364: 1000 feet, and all will be at 6000 feet or above. Airplanes taking off
365:
366: from an airport are at 0 feet. Planes will stay in level flight unless
367:
368: told to change altitude. They climb or descend at the rate of 1000 feet
369:
370: per mile.
371:
372: To change altitude, give the plane's ID followed by the letter "a"
373:
374: followed by the desired new altitude. For example,
375:
376: <18> Command: XA5
377:
378: tells plane X to go to 5000 feet.
379:
380: Taking off and landing are special cases of the altitude command. If
381:
382: the plane is waiting to take off, its altitude is 0. Giving it any change
383:
384: of altitude will cause it to take off in the normal direction for that
385:
386: airport. The takeoff/landing direction is shown for each airport in the
387:
388: bottom right section of the screen at the beginning of the game; it is also
389:
390: shown in the flight strip for planes taking off.
391:
392: To land a plane, make sure it is (or will be) heading toward the
393:
394: correct airport in the correct direction, then send it to altitude 0. This
395:
396: is the last command that can be given to the airplane, since it passes
397:
398: control to the airport tower. To land, the plane must be at 0 altitude one
399:
400: mile before the airport. If the plane flies over the airport at altitude 0
401:
402: from the wrong direction, it will go back up to 1000 feet and give the
403:
404: controller another chance to land it. This is logged as a "go-around"
405:
406: error.
407:
408: The flight strip reflects changing altitude. For example,
409:
410: Dp :->2 7v3 S 9
411:
412: indicates that plane D is now at altitude 7000 feet and is descending to
413:
414: 3000.
415:
416:
417:
418:
419:
420:
421: -8-
422:
423:
424: 7_.5_ Turning_______
425:
426: Turning planes will turn at the rate of 45 degrees per mile. To turn
427:
428: a plane, give the plane's ID, the direction of turn, and the new bearing.
429:
430: The direction of turn is one of the letters "l", "r", or "t". "l" and "r"
431:
432: specify a turn to the pilot's left or right, and "t" means to turn through
433:
434: the minimum angle to reach the specified bearing. ("t" is useful for
435:
436: people who have trouble with left and right.) For example,
437:
438: <47> Command: ULNE
439:
440: tells the pilot of plane U to turn to his left until he is heading
441:
442: northeast. If plane Y is heading north, the command
443:
444: <47> Command: YTE
445:
446: will cause the plane to turn right 90 degrees; if it is heading south the
447:
448: same command will cause it to turn left 90 degrees.
449:
450: Changes of direction are indicated in the flight strip. For example,
451:
452: Nj :->5 5 S r W +
453:
454: indicates that jet N is heading south, and will turn 90 degrees to the
455:
456: right.
457:
458: To cancel the remaining part of a turn, give the command (for plane
459:
460: N):
461:
462: <23> Command: NR0
463:
464: The Ann Arbor keypad used for +/- PAGE, cursor motion, etc., may be used to
465:
466: supply the new bearing. The usual N/S/E/W correspondence is used:
467:
468:
469: ----------------
470: |-PAG|HOME|+PAG|
471: | NW | N | NE |
472: |----+----+----|
473: |-SCH| UP |+SCH|
474: | W |STRT| E |
475: |----+----+----|
476: |LEFT|DOWN|RGHT|
477: | SW | S | SE |
478:
479:
480:
481: -9-
482:
483:
484: ----------------
485:
486: 7_.6_ Using_____ Navaids_______
487:
488: Navaids (navigational aids, VORs, or radio beacons) are very useful
489:
490: for giving longer-range plans to the pilot. All incoming planes are on
491:
492: airways that will intersect one or more navaids. The navaids may be used
493:
494: to tell the plane where to "hold", or to vector it toward an airport or an
495:
496: exit fix. "Holding" means continuously making left turns, which will cause
497:
498: the plane to pass over the navaid every eight updates until it is given a
499:
500: direction or runs out of fuel.
501:
502: Any plane can be told to hold at the next navaid it encounters by
503:
504: giving it the command (for airplane A):
505:
506: <18> Command: AH
507:
508: This will show up on the flight strip as
509:
510: Ap :->2 5 S * 7
511:
512: After beginning to hold, the "*" will change to an "h" and the
513:
514: direction of turn will be indicated. To override the automatic hold give
515:
516: the command (for plane N)
517:
518: <23> Command: NR0
519:
520: This is the same command used to cancel a turn.
521:
522: Every incoming plane that will be landing automatically holds at a
523:
524: navaid unless the controller gives it other instructions.
525:
526: An airplane can be told to proceed toward any known fix when it
527:
528: reaches the next navaid. This is called "clearing" the plane. To clear
529:
530: plane X for the approach to # Airport, give the command
531:
532: <18> Command: X*#
533:
534: Use % for % Airport, or the symbol of an exit fix to vector the plane in
535:
536: that direction. A plane cleared to turn at a navaid will turn sharply.
537:
538:
539:
540:
541: -10-
542:
543:
544: If a plane is cleared through a navaid, it will show up with an
545:
546: asterisk on the flight strip. For example,
547:
548: Hj .->2 5 S *5 +
549:
550: indicates that plane H will head in the exit direction for fix 5 when it
551:
552: encounters a navaid. Note that H must encounter a navaid for the command
553:
554: to take effect.
555:
556: A holding aircraft given a clearance will continue around to the
557:
558: navaid, then immediately assume the specified bearing. If a cleared
559:
560: aircraft is given a turn, any clearance or hold is immediately cancelled.
561:
562:
563: 7_.7_ Speeding________ up__ the___ clock_____
564:
565: During quiet spells when everything is under control, typing a space
566:
567: followed by return advances the clock to the next 15-second tick.
568:
569:
570: 8_. Designing_________ new___ airspaces_________
571:
572: The system airspaces are stored in /usr/rand/jim/atc/airspaces on the
573:
574: VAX, and /mnt/jim/atc/airspaces on the PDP-11/45. Users may define their
575:
576: own airspaces and use them (Section 2), or have them included at the end of
577:
578: the system airspace file.
579:
580:
581:
582:
583:
584:
585:
586:
587:
588:
589:
590:
591:
592:
593:
594:
595:
596:
597:
598:
599:
600:
601: -11-
602:
603:
604: The coordinate system for an MxN screen is:
605:
606:
607: ---------------------
608: |0,0 M,0|
609: | |
610: | |
611: | |
612: | |
613: | |
614: | |
615: | |
616: | |
617: | |
618: | |
619: |0,N M,N|
620: ---------------------
621:
622:
623:
624: The different objects on the screen are defined as follows:
625:
626: Apple1
627: size: 15x24
628: airway: 1=(0,13) SE 8=(10,23)
629: airway: 0=(4,0) S 9=(4,23)
630: airway: 2=(14,15) NW 7=(0,1)
631: airway: 3=(0,9) NE 6=(9,0)
632: airway: 4=(14,7) SW 5=(0,21)
633: airport: %=(4,11) S
634: airport: #=(10,11) NE
635: navaid: *=(4,5)
636: navaid: *=(4,17)
637:
638: The size field is restricted only by the size of the Ann Arbor screen. The
639:
640: direction on an airway is the entry direction from the first fix; the
641:
642: designer must ensure that each airway connects two entry/exit fixes, and
643:
644: that each entry/exit fix is on an airway. If more than 20 entry/exit
645:
646: fixes, 5 airports, or 5 navaids are desired, the program must be recompiled
647:
648: after the change to EMAX, AMAX, or NMAX respectively in the source file
649:
650: "ahdr.h".
651:
652:
653: 9_. Things______ to__ come____
654:
655: Several additions are planned to the ATC simulation in the near
656:
657: future. The most important is definition of the "Clearance Directive
658:
659:
660:
661: -12-
662:
663:
664: List," a list of absolute locations on the screen and actions to take at
665:
666: the location. The user will use this feature to establish plans for
667:
668: airplanes without having to monitor for completion of each part.
669:
670: Another major modification will enable ATC to be run by another
671:
672: program, using a data transfer protocol designed to minimize the
673:
674: communication requirements.
675:
676: These features will be documented as they are implemented.
677:
678:
679:
680:
681:
682:
683:
684:
685:
686:
687:
688:
689:
690:
691:
692:
693:
694:
695:
696:
697:
698:
699:
700:
701:
702:
703:
704:
705:
706:
707:
708:
709:
710:
711:
712:
713:
714:
715:
716:
717:
718:
719:
720:
721:
722:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.