|
|
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.