ATC-pie user guide
| The FlightGear forum has a
subforum related to: ATC-Pie support & development
This article is a guide to the air traffic control simulation program ATC-pie, describing some of its major features. A more exhaustive list can be found in the main article. For download and installation help, refer to the ATC-pie installation guide. For support and troubleshooting, the ATC-pie FAQ might get you an answer first. Otherwise kindly ask on the dedicated FlightGear sub-forum so that the discussion is public.
Other ways to learn the program are:
- to watch the online video tutorial;
- to read the in-app Quick reference available from the Help menu (summary of mouse/keyboard gestures, display conventions...);
- to connect with a skilled teacher as a student (personal training);
- to train solo!
Whether electronic (dematerialised) or on paper, printed automatically or filled by hand, the flight progress strip is the essential piece of air and ground traffic control. Every aircraft in contact is represented by a unique strip on the ATC workbench, and every strip represents a unique contact, present or expected. This ensures that no aircraft is ever forgotten about. Strip positioning and updating then enable to monitor the aircraft's status, sequence number, position, intentions, etc.
A click on the "new strip" tool bar button (shortcut F2) or double-click on an empty strip rack or bay space will open a dialog to fill flight details on a fresh blank strip, e.g. callsign, type of aircraft, destination, etc. Double-clicking on an existing strip allows to edit the filled details.
If providing radar service, strips should be linked to identified contacts to inform the radar display with the filled details, e.g. assigned altitude, and enable joint selection. To link a strip to a radar contact, select one and middle-click on the other. Conflicts between the strip details and the values squawked by the linked transponder contact are reported: the strip displays a "!!XPDR" warning and the strip dialog labels the conflicting details.
A strip can also be linked to a filed flight plan (FPL). This will make radar and strip display fall back on filed information for missing details. The strip dialog also shows the mismatching information between the two, though this is rather common because the strip typically gets updated as the flight progresses.
All together, a selection can involve up to three linked elements: strip, radar contact, flight plan. You can pull details from linked elements to strips (strip panel bottom menu), and push strip details to their linked flight plan if necessary (strip dialog bottom tick box). Unlinking is possible with ⇧ Shift+middle-click. If you use linking carefully, auto-fill options are available from the general settings, to fill blank strip details with newly-linked information.
For fast and efficient service, every initial contact by a pilot should basically make you hit F2 and type the spoken callsign. You should then soon figure out if:
- you already have a strip for that contact, e.g. it was automatically printed earlier, or handed over by a colleague: a "!!dup" warning appears next to the input field;
- a flight plan is filed whose details can be linked immediately: a number of candidate FPLs is displayed on a button in the bottom row, which you can click on to select the matching FPL;
- a FPL must be filed, e.g. IFR departure not filed by lazy pilot: click on the "new FPL" button in the bottom row to open a fresh FPL detail sheet on save (FPL will be created and linked if saved).
ATC-pie provides with three types of placeholders for flight strips: racks, loose strip bays and runway boxes. According to your ATC position and local facilities, you should choose and arrange your placeholders for optimal control. Strips can then be moved between them using mouse drag and drop.
A strip rack is the preferred way of keeping track of a sequence, e.g. a departure queue at a runway threshold. Rack panels can be created from the main window workspace, popped out as separate windows, and a persistent one can be found among the available docks. You can create as many racks as you wish in every panel. Double click on a rack's name to rename it or edit its properties. Use mouse drag to move strips up and down a rack sequence.
A loose strip bay allows free-hand positioning of strips in its reserved space. Such bays are useful for unsequenced traffic, or to map out relative positions when controlling without a radar. You may also import background images, e.g. a ground chart to keep visual track of taxiing aircraft and vehicles. See
CONFIG/bg/Notice to learn how.
A runway box is a placeholder for a single strip, named after a physical runway and denoting a clearence to use it (enter, cross, land...). Runway boxes are contained in their own dock, with one made visible for each runway marked as in use in either direction. Thorough use of runway boxes will help you avoid bad mistakes like clear an aircraft to land over lined up traffic. When freed, runway boxes start and display a timer together with the wake turbulance category of the last contained strip to help with TKOF/LDG separation. What is more, if you use radar, a filled runway box marks the runway as reserved on the scope.
Besides, there are two other places a strip can be dropped on, usually when releasing a contact:
- an ATC callsign in the ATC panel to initiate a handover;
- a strip shelf (flat button at the bottom of loose and racked strip panels), which clears the strip from your workbench and stores it as shelved.
Vectors, routes and separation
ATC-pie can register and analyse issued vectors and routes to:
- inform strip and radar display;
- help monitor traffic, checking tracked positions against route/vector assignments;
- help manage traffic, anticipating route and FL conflicts between controlled aircraft.
Registering vectors on strips enhances the drawing of linked radar contacts, enables easy monitoring of tracks and detection of aircraft flying off course. To register vectors automatically when a radar contact is linked to a strip, use the following mouse gestures:
- click and drag out of a radar contact to issue a heading vector;
- holding ⇧ Shift, click and drag vertically for altitude/FL vectors;
- holding ⇧ Shift, click and drag horizontally for speed instructions;
- holding ⇧ Shift, double-click on the radar target to clear registered vecors from the linked strip.
See video 5 of the tutorial for more on vectoring, and check the quick reference display conventions to interpret the lines and colours of the course and vector graphics around radar contacts.
NB: In network sessions, an appropriate text chat instruction is suggested for every mouse vectoring action. This allows you to send it easily, for example to pilots whose communications are limited to text chat.
A route is analysed for every strip with recognised departure and destination airports (entry fields both turned green), as follows:
- route tokens are whitespace-separated;
- each recognised navpoint token (radio navigation beacon, airfield, fix, RNAV point) creates a waypoint on the path to destination, and a route leg from the previous point (a final leg connects the last point to the destination airport);
- if ambiguous (navpoint names are not all unique around the world), a waypoint is the nearest homonym to the point beginning the leg;
- other tokens are kept as route leg specifications to the following waypoint, e.g. airways between fixes.
Routes on flight plans and strips are viewable in a route dialog, showing geodesic paths, headings and leg distances on a world map. When a specified route is linked to a radar contact, ATC-pie works out its current leg based on distance to destination, and:
- details of the current leg are displayed in the selection info pane, and the route viewing button enabled;
- the strip shows only the remainder of the route for this contact;
- the route to go is drawn as a dashed line on the radar (unless aircraft is inbound and near enough);
- the radar tag contains the next waypoint and the heading leading the aircraft to it on a great circle, unless:
- the current route leg is the first, and the keyword "SID" appears in its specification: "SID wp" is displayed, where wp is the first waypoint on the route;
- the current route leg is the last, and the keyword "STAR" appears in its specification: "STAR wp" is displayed, where wp is the last en-route waypoint.
NB: If DEP and ARR airports are not both recognised, radar tags show the strip destination detail if it is filled, possibly with a heading if it is recognised.
See tutorial video 7 for a demonstration of routes.
Conflicts and anticipation
ATC-pie features a conflict prediction system, which can be activated or turned off from the Options menu. It uses route and vector assignments to anticipate and alert you of path conflicts so you can take action and prevent separation losses.
When looking for conflicts, a horizontal (ground projection) path is considered for aircraft with a linked strip and an assigned route or heading. An aircraft is assumed to follow its route, unless a heading vector is given in which case it is assumed to be flying the assigned straight course. When the projections of two aircraft intersect, a conflict is anticipated if the respective intervals between the current and assigned altitudes overlap. When an aircraft's altitude is unknown, the assigned altitude will be assumed. If an altitude assignment is missing, a possible conflict is reported.
Another possible alarm is the separation incident, a serious ATC mistake which calls for immediate action. The table below summarises the different levels of conflicts, ranked in decreasing order of emergency.
|Alarm||Shown on scope (default colours)||Meaning|
|Separation incident||Thick bright red intersecting circles||Separation loss between aircraft|
|Path conflict||Red circles and paths||Anticipated paths and altitudes are intersecting|
|Possible path conflict||Yellow circles and paths||Paths intersecting but some altitudes unknown|
Communications with aircraft
In solo sessions, voice radio interaction is simulated through speech recognition of instructions and read-back synthesis. Use the Ctrl key to PTT.
In FlightGear network sessions, multiple radios can be opened and tuned in simultaneously. You can transmit on either one by holding down the PTT button of the chosen radio, or on a selected set (Kbd PTT boxes ticked) using the Ctrl key. This lets you PTT on multiple frequencies at once (merged frequencies), for example to service GND+TWR frequencies in view of splitting them seemlessly again later. Note that while you will be broadcasting on, and hearing incoming transmissions from, all frequencies, pilots will not be hearing each other across frequencies. To monitor frequencies without attending them, a trick is to set their volume to "soft" to tell them apart.
Note: Except for solo sessions, you may always use an external voice communication program like Mumble for radio. It is even necessary in FSD sessions, which do not integrate radio natively. In this case, try making the same Ctrl key the PTT to preserve other features such as RDF for receiving stations, or the PTT turns off notification sounds option recommended if not wearing a headset.
When CPDLC is serviced (location setting), aircraft can establish a data link from their cockpit for a direct text communication channel supplementing the radio frequency. You can monitor connections from the CPDLC dock and open a window for each active or terminated connection in the CPDLC history. Combining the Alt key with a double-click on a strip or radar contact opens the current or latest dialogue for the selected callsign.
Each active CPDLC dialogue window allows to manually compose preformatted or free text message elements. But the most frequent and convenient way of creating message elements is to combine the Alt key with a mouse gesture (also see Mouse gestures in the quick reference):
- click-and-drag vectoring gesture to send a heading, altitude/FL or speed instruction (see section on vectors);
- strip drop on an ATC to initiate a CPDLC authority transfer or to send the aircraft a "contact" instruction;
- "OK" button click in the instruction panel to send the corresponding formatted instruction.
Created message elements are appended to the message buffer in the connection dialogue window until you send the message manually. The other party must then acknowledge it before it times out.
Radio text chat
Although voice communications should be encouraged for realism whenever possible, ATC-pie has a powerful text chat system for keyboard interaction with pilots in network sessions. In FlightGear sessions, all messages from within at least 100 NM and up to the radar range are visible in the chat. In FSD sessions, whose protocol simulates text frequencies, ATC-pie tunes the chat to the "publicised frequency" in the radio panel.
Text aliases are dollar-prefixed words that ATC-pie tries to replace with context-dependant values when sent. For example,
$metar expands to the current primary station weather. This allows to send/save formatted messages like "Current weather is $metar" instead of copy-pasting a weather look-up for every such message.
Predefined aliases such as
$metar take values that are specified by the program and may depend on the local environment (weather, declination, airport elevation...), on your configuration (transition altitude, runways in use...) or on the current selection (QDM to airport, assigned route...). They are all listed with their meaning in the "quick reference", Text aliases section.
All other aliases will be considered custom, in other words expected to take a value specified by you, on either of the following levels:
- world (value saved for replacement anywhere that the program will be opened), in the general notes (notepad dock);
- location (saved for this airport or centre), in the local notes;
- single aircraft contact (by selected strip), in the strip comments.
Here is how ATC-pie decides what to do with a text alias of the form
$foo in a sent message:
- If it is one of the predefined list, the specified substitution is performed. If not, it is a custom alias and we carry on to the next step.
- Look for a line beginning with
foo=in the general notes. If one is found, the alias is replaced with what follows the '
- Look for a line beginning with
foo=in the local notes. If one is found, the alias is replaced with what follows the '
- If a strip is part of the current selection, search likewise in its comment field and substitute if the search succeeds.
- Substitution is unsuccessful. ATC-pie will open an edit box so that you can review your message before sending it.
Moreover, ATC-pie strips everything up to the first pipe character (
|) in the message if any, before it is processed and sent. You may test this by sending "stripped part|sent part" and observe that only the "sent part" makes it to the message contents. You can therefore make your life easier with piped shortcuts in your preset message list. They will pop up like any other message in the filtered menu as you type. For example, the following preset message enables something like a dot-command for sending a bearing to your base airport in a few key strokes:
.qdm|Heading to airport $qdm
Lastly, if a troll or angry user is polluting your session with undesired messages, add their callsign to the senders blacklist. All messages from the user will then be filtered out from the message pane. You can view and clear this list at any time.
"ATC coordination" refers to the following:
- strip exchange, i.e. sending and receiving strips (handovers);
- ATC phone lines, for private voice calls (except in solo sessions);
- CPDLC authority transfers (except in FSD sessions);
- who-has requests, to query ATCs about who is claiming control of callsigns;
- ATC text chat, to exchange text messages between ATCs (except in solo sessions).
To hand a strip over, drag it and drop it on the recipient in the list of controllers in the ATC coordination dock. A received strip appears with an identification of the sender which disappears as soon as the strip is clicked on.
A received strip lands on the collecting rack set for the sender if any (double-click on a rack name to add an ATC callsign from which to collect strips), or on the "Default" rack otherwise. It may link automatically to an identified radar contact according to the selected auto-link options (general settings).
See tutorial video 6 for a presentation of the feature.
ATC phone lines
Phone lines allow to call and talk to other ATCs directly from the ATC coordination dock. Each line has an outgoing state that you control, toggling between open and closed with a double-click on its phone icon. Opening a line places a call to the connected ATC, showing as "incoming" on their side. When two parties have their line open to one another, they are in direct communication (no push-to-talk). In other words, opening an incoming call puts you on the phone with the caller. Closing a call hangs up the active line, but you can pick it back up as long as the other party holds it open ("still incoming" for you).
You can only talk to one ATC at a time but may place multiple outgoing calls. If a call you placed is answered while you are in another call, the answered call switches to show as incoming without interrupting the one in progress. Conversely, opening (answering) an incoming call while already in another call drops the current line. An incoming call you answer which turns to "placed" (outgoing only) instead of "in progress" means that the other party is already on the phone and is now seeing an incoming call from you.
ATC text chat
The ATC text messaging system allows to chat with other ATCs in channels that are separate from the "radio text chat" read by pilots. It offers private channels for one-to-one conversations, and a general ATC chat room in network sessions, readable by all connected ATCs.
Note on interoperability in FG sessions: While only ATC-pie integrates ATC text chat in its interface, other users can join the same channel with a regular IRC client. They will be able to send and receive public and private messages and chat with everybody, at the only cost of ignoring the system messages that will sometimes appear on their side. For best results, they should use their FlightGear network callsign as their IRC nickname.
In solo sessions, you control virtual IFR planes, receiving and handing over strips to virtual ATCs depending on your position and the aircraft's intentions. You can train as an en-route controller in CTR mode, or as an airport controller in AD mode, where four combinable positions are available:
- ground (GND), to taxi aircraft between parking positions and runways;
- tower (TWR), to control runways and immediate surroundings;
- departure (DEP), to bring departing traffic to their exit point;
- approach (APP), to vector arrivals onto final.
In CTR mode, your task is to transit the aircraft across your airspace, always ensuring separation, and to hand each of them over to the most appropriate neighbouring centre North, South, East or West of your sector. You can specify local navpoints in the location settings so that the system includes them as turning points in the randomised aircraft routes.
In airport mode, traffic is either inbound or outbound. Assuming APP, inbound aircraft must be sequenced and vectored into tower range for handover, unless you are in the TWR position as well. Each inbound aircraft either requests ILS or visual. Assuming TWR, you must clear them to land when appropriate, i.e. cleared for ILS approach or expected runway reported in sight. If landing cannot take place (too high, not cleared...), aircraft will go around. Controlling GND, you must move inbound traffic near their parking position once they have vacated the runway, and hand them over to the ramp. Outbound traffic must be brought to hold short of a runway threshold and report ready for departure with TWR. If you assume DEP, you must hand outbound aircraft over to the en-route centre (CTR) once they are high enough and close to their exit point if specified in their route. Entry and exit points are configurable in
Notice in the directory).
|Departure strips||Arrival strips|
|Assuming positions||Receive from||Hand over to||Receive from||Hand over to|
Instructions are given through different means:
- provided the speech recognition modules are installed, you can turn on voice instructions from the solo simulation settings dialog and instruct aircraft through your microphone, using the Ctrl key as push-to-talk and standard phraseology (see the quick reference tab about it);
- if voice instructions are turned off:
- mouse vector assignments issue the corresponding instructions (see section on vectors above);
- handoffs are issued when dropping strips on an ATC receiver;
- instruct taxi routes by dragging out of radar contacts when they are considered on the ground (low enough or squawking GND);
- the dockable instruction panel works regardless of voice vs. mouse selection;
- alternatively, if the aircraft is connected to CPDLC, you can send instructions through the data link.
Instructions from the panel are always issued to the callsign entered in the top field, which should fill automatically on aircraft or strip selection when a callsign is known. Therefore, make sure you do not mess up your strip links or your instructions will realistically be acknowledged and followed by the wrong aircraft.
Need a scenario?
Things you can train for:
- towering a single runway with mixed traffic: select TWR position and an equal balance of departures and arrivals;
- optimising approach spacing in dense traffic: select APP position only, increase traffic density, turn on spacing hints and try to stabilise them all at "3:00" for example;
- change of runways (e.g. irl after wind direction change): start with APP+TWR and select a runway for arrivals at least, run the simulation for a while and change for opposite runway use;
- CTR mode with a low ceiling to increase the number of conflicts to resolve;
Teacher & student connections (ATC tutoring)
This session type is made to bring an ATC student and a teacher together for tutorial sessions. To set up a session, the student must connect to the teacher, so make sure the teacher's session is running first. Only one student can connect to a teacher at a time. The teacher creates and manipulates traffic for the student to work with, controls the weather and decides on the ATC neighbours. Strip exchange and ATC text chat is possible, either between both parties ("offline" exchanges) or between the student and the virtual ATCs (in-sim coordination). All exchanges are monitored by the teacher, and transparent to the student. The teacher can also snapshot traffic position situations to recall them later.
In teacher sessions:
- The teaching console is enabled, which allows you to control most aspects of the environment visible to the student.
- You create new traffic holding ⇧ Shift down with a right click-and-drag on the radar specifying the position and face heading. A dialog pops up and allows you to choose a callsign (one is initially generated), altitude and other details. If near a ground route node, a parking position or runway, you can create it on the ground, ready to taxi or for departure (NB: parking overrides position/heading input).
- Traffic is initially created in an "unspawned" state (radar contact marked "+"), in other words visible to you but not to the student. This allows you to set its transponder or get it into a certain state before spawning it into the student's world.
- Controlling the traffic is done in the same way as in solo sessions without voice, i.e. using the click&drag vector and taxi tools and the instruction dock. The only difference is that you control the selected aircraft directly, regardless of your strip links and details. You therefore do not need a strip and a correctly filled callsign to instruct a pilot, though it is a good idea to have one if you want your vectors registered and drawn on the radar. The traffic creation dialog offers to create a linked strip with every new aircraft.
- You may pause the whole simulation, or freeze each aircraft individually. Frozen aircraft will result in stationary flights on the student's radar.
- The ATC text chat system allows to chat to the student directly as the teacher, and to simulate private ATC conversations with the student (select callsign to interact as).
- To exchange strips, drop them on "Student" and select whom the strip should appear from on the student's side. Note that for your convenience in further control of the traffic, teacher strips do not disappear on handovers;
- CPDLC is supported, the dialogue windows reflecting the change of perspective (ACFT instead of ATC) and the Alt key combinations generating requests rather than instructions.