# IVSI with TCAS II v7.0

version 4.0.1
24 May 2004
Lee Hetherington <ilh@alum.mit.edu>

### Introduction

This gauge now contains a full-fledged implementation of TCAS II version 7.0 (aka change 7.0 aka MOPS 7.0) logic, as specified by RTCA document DO-185A plus its amendments approved by SC-147A. Literally all features of the logic are implemented with the exception of TCAS/TCAS resolution advisory (RA) negotiation and Mode S ground stations. In fact, I have gone to great lengths to verify the correctness of this logic by testing against 250 actual TCAS logic encounters and verifying correctness second by second and state by state versus MOD 2 TSIM. It is believed this is the most advanced TCAS II version 7.0 logic simulation in Flight Simulator. The logic is packaged into a DLL that can be used by other panel developers with written permission.
In FS2002, this gauge requires FSUIPC for traffic data. In FS2004, either FSUIPC or TrafficInfo.dll can be used. This package contains a freeware license for FSUIPC 3.x and should operate properly without you having to register FSUIPC.
Finally, the transponder has been integrated with Squawkbox 3 (alpha), enabling the control of squawk standby, squawk ident, squawn code, and indication of ATC radar by the flickering of the ident light.

### Installation in 767PIC in FS2002

1. Copy the file TCAS2v7.dll to the main FS folder. If you already have a TCAS2v7.dll in your main FS folder, it is recommended that you compare the versions and keep the newest. (You can do this with Windows Explorer, clicking right and choosing Properties. Then select the Version tab.) TCAS2v7.dll contains the TCAS II version 7 logic.
2. Copy the file TCAS2v7.ini to the main FS folder.
3. Copy the file ILH_TCAS.gau to the Gauges subfolder within the main FS folder. This GAU file contains the IVSI, transponder, and (hidden) logic gauges.
4. Go the the FS\Aircraft\767 PIC Wilco Publishing\Panel and make a backup copy of your current Panel.cfg file. This is important in case your editing goes poorly.
5. If you are still using an unchanged, original panel.cfg from 767PIC, you can copy the file ILH_TCAS_767PIC_Panel.cfg included in this package to Panel.cfg. However, if you have edited this file in any way, you can manually install the gauges as follows:

1. Open Panel.cfg in a text editor such as Notepad.
2. To install the IVSI gauge, under the Main Panel [Window 01] section, find and replace the line that reads

       gauge14=B767Wvsi, 556, 406, 136

   with

       //gauge14=B767Wvsi, 556, 406, 136
       gauge14=ILH_TCAS!IVSI, 545, 391, 158, 158,

   Please note the final comma. It is useful to add this here so that you can later add gauge parameters. Such parameters will be described below in the Gauge Options section.
3. To install the hidden logic gauge (required), under the Main Panel [Window 01] section, find the last gauge line and note its number (e.g., 29). Add the following line, setting the gauge number to one higher (e.g., 30):

       gauge30=ILH_TCAS!Logic, 0, 0, 1, 1,

4. To install the transponder gauge, under the pedestal [Window04] section, find and replace the line that reads

       gauge06=B767Wxpdr, 205, 586

   with

       //gauge06=B767Wxpdr, 205, 586
       gauge06=ILH_TCAS!Transponder, 204, 586, 228, 89,

### Installation in FS2004

Note that as of the time this document was written, 767PIC is not supported in FS2004. However, the IVSI and Transponder gauges can be used in other aircraft in FS2004. The general installation is similar to above. You need to have a hidden ILH_TCAS!Logic gauge installed on the main panel. With FS2004 comes the option to use Microsoft's TrafficInfo.dll for traffic gathering as opposed to FSUIPC. At this point, I am not sure what the relative advantages are, but the option is there. In order to use TrafficInfo, you must install TrafficInfo.dll into the Modules subfolder of FS2004. You also need to add trafficinfo:yes parameter to the ILH_TCAS!Logic gauge line. More on parameters below.
Note: installing TrafficInfo.dll into FS2002 will crash FS2002 upon startup.

### IVSI Usage

The IVSI has four hidden click spots that are sensitive to both left and right mouse clicks:

1. cycles the TCAS mode selector between the modes TEST, STBY (standby: not displayed), XPDR (transponder only: not displayed), TA, and RA;
2. cycles the TCAS forward range between 6, 12, 18, 24, and 40nm;
3. cycles the TCAS "other" vertical range control between BLW (below), N (normal: hidden), and ABV (above); and
4. toggles the TCAS altitude display between relative (blank, +/- two-digit altitudes) and absolute (own flight level, three digit flight levels).

All of these can also be controlled using the transponder.
Note that when below approximately 1000' AGL, even when the TCAS mode selector is positioned for RA, the IVSI will display TA. The reason is that below this altitude, RAs are suppressed, and TCAS operates in TA Only mode.

### Transponder Usage

The following displays the click spots for the transponder gauge:
Like the IVSI click spots, these are all sensitive to both left and right mouse clicks. Left cycles one direction, and right the other direction. The right ABOVE/N/BELOW, right ABS/REL, and ATC FAIL functions are not implemented.

#### Squawkbox 3

The transponder has been integrated with Squawkbox 3 (alpha). The MODE controls SB3's squawk vs. squawk standby. The IDENT button/light serves two purposes: squawk ident if you push it and periodic flashing to indicate the presence of ATC in range.

### Verifying Installation

To verify proper installation fire up Flight Simulator and choose aircraft whose panel.cfg you modified. If the installation succeeded, you should see
and if it failed you should see TCAS flagged
You can then enter TEST mode. For a successful self test, you should see
with the aural alert "TCAS System Test OK." If the test fails with
it means you have not properly installed the ILH_TCAS!Logic gauge within your panel.cfg, and in this case you will not get an aural alert of any kind (because that is contained within the ILH_TCAS!Logic gauge). If the test fails with
or
it means a connection to FSUIPC or TrafficInfo, respectively, could not be established and you should hear the aural alert "TCAS System Test Fail." This means that FSUIPC.dll or TrafficInfo.dll were not properly installed.

### IVSI TCAS Symbology

#### Altitudes

Traffic is displayed with one of four symbols, a two-digit relative altitude (e.g., +03 or -07) or a three-digit flight level (e.g., 250), and an arrow indicating a vertical rate of at least +/- 500fpm. The altitude is indicated in units of 100ft, with a + indicating above ourself and a - indicating below for relative altitudes. The altitude tag, relative or absolute, will be positioned above the symbol if the intruder is above own altitude or below the symbol if the intruder is below own altitude.
Relative Altitudes
Absolute Altitudes (Flight Levels)

#### Resolution Advisory (RA)

A red square indicates a Threat and is accompanied by an aural warning and red/green vertical speed constraints along the VSI scale for a Resolution Advisory (RA):
Resolution Advisory (RA): "Climb, Climb"
You must be in RA mode to get an RA. Any time an intruder is labelled a Threat, a vertical speed command will be present. All RAs include at least one red "don't fly" band. If an RA is corrective, meaning current vertical speed is in a red band at time of issuance, then there will also be a green "do fly" band. It is expected that within 5 seconds for an initial RA (or 2.5 seconds for a strength increase or reversal) that a 0.25g vertical speed change will be enacted to fly out of the red band. Note that strength of an RA can increase or decrease throughout an encounter. An RA concludes with a "Clear of Conflict" aural alert.

#### Traffic Advisory (TA)

A yellow circle indicates a Potential Threat and is accompanied by the aural warning "Traffic, Traffic" for a Traffic Advisory (TA):
Traffic Advisory (TA): "Traffic, Traffic"
A TA generally precedes an RA by 15-20 seconds. If an RA or TA is already active and a new TA appears, the aural warning will be a single "Traffic."

#### Proximate Traffic

A blue or white solid diamond indicates Proximate Traffic that is within 6nm and +/- 1200ft vertically and is not an RA or TA:
Proximate Traffic

#### Other Traffic

A blue or white hollow diamond indicates Other Traffic that is within a settable vertical range of own aircraft:
Other Traffic
See the option "other" below for this setting, and the setting of ABOVE/N/BELOW on the transponder gauge for exceptions to this range. Note that for the duration of an RA, all Other Traffic is removed from the screen so as to remove clutter during a potentially critical encounter.
The blue/white color for Proximate and Other Traffic vs. own airplane is settable via gauge options, as described below.

#### Off-screen RA and TA Traffic

Note that Potential Threat and Threat traffic that would otherwise be off-screen is drawn right at the edge so it can be seen. In this case, the range is incorrectly displayed, but the bearing is correct:
Also note that the traffic is displayed with heading and not track up.

#### Ground Traffic

Based on the fact that most transponders are turned to standby while an aircraft is on the ground, I have tried to filter out ground traffic from the display. For AI traffic, I do not access the separate ground traffic table. For Multiplayer and Squawkbox traffic, I filter out traffic that is within a threshold (default 100ft, see ground: parameter below) of own aircraft's ground level and who's groundspeed is less than 30kts. This heuristic seems to work fairly well. Believe me, you don't want your display cluttered with ground traffic.

### TCAS II version 7.0 Advisory Thresholds

Please note that ranges for a TA or RA are not fixed. TCAS fundamentally operates on the concept of time to closest point of approach (TAU), which is estimated by range divided by rate of closure. There is a distance threshold (DMOD) factored in for low closure rate encounters (e.g., overtaking another aircraft). Both the TAU and DMOD thresholds are dependent on own altitude. TAU ranges from 20-45s for TAs and 15-35s for RAs. DMOD ranges from 0.3-1.3nm for TAs and 0.2-1.1nm for RAs. What this all means is that with low closure rates and low altitudes, you could be flying as close as 0.3nm from another aircraft and receive no TA or RA.
The following tables detail the various range and altitude thresholds for RAs and TAs. ZT is the altitude threshold at closest point of approach. TAU is the time threshold. DMOD is the distance threshold for low-closure-rate encounters. AL is the minimum goal separation altitude for an RA.

altitude | RA Thresholds
ZT | TAU | DMOD | AL
< 2200 radio | 600ft | 15sec | 0.20nm | 300ft
2200-5000 | 600ft | 15sec | 0.20nm | 300ft
5000-10000 | 600ft | 20sec | 0.35nm | 350ft
10000-20000 | 600ft | 25sec | 0.55nm | 400ft
20000-42000 | 700ft | 30sec | 0.85nm | 600ft
> 42000 | 800ft | 35sec | 1.10nm | 700ft

altitude | TA Thresholds
ZT | TAU | DMOD
< 2200 radio | 850ft | 20sec | 0.30nm
2200-5000 | 850ft | 25sec | 0.33nm
5000-10000 | 850ft | 30sec | 0.48nm
10000-20000 | 850ft | 40sec | 0.75nm
20000-42000 | 850ft | 45sec | 1.00nm
> 42000 | 1200ft | 48sec | 1.30nm

Note that the altitude thresholds above actually have hysteresis. This means that the precise value of a given threshold is different when climbing vs. descending in order to reduce sensitivity changes when flying right at a threshold (e.g., 10000) with small altitude fluctuations.
Note that RAs are suppressed below about 1000 feet radio altitude, and all aural alerts are suppressed below 500 feet. TAs will be visually displayed below this altitude and even on the ground. When RAs are suppressed due to ground proximity, the IVSI will display mode "TA" even if the selected mode is "TA/RA".

### 767PIC Specifics

These gauges provide proper integration with 767PIC's power busses and intertial reference units (IRUs). The IVSI gauge will get its power from the left main bus, as do the EADI, EHSI, and upper EICAS. If for any reason the left main bus does not have power, the IVSI gauge will be completely blank. The IVSI gauge will only be able to display the VSI needle if the IRU selected on the captain's instrument source selector is aligned. If it is not aligned, the VSI needle will not be displayed and an amber V/S "flag" will be displayed in the lower left of the IVSI/TCAS gauge. TCAS will continue to function, although if in RA mode, you will see an amber RA "flag" since RA vertical commands would not be possible without V/S data. Note that several folks have told me that V/S data continues to work if the selected IRU is in ATT mode, unlike the original PIC VSI gauge, and I have implemented this functionality.

### Online Traffic (Multiplayer and Squawkbox)

In order to see Multiplayer (MP) and Squawkbox (SB) traffic in FS2002, you will have to use AIBridge from Jóse Oliveira. Some have had luck with AIBridge 2.x, but some have had to go back to 1.0. AIBridge reads MP aircraft positions and relays them to FSUIPC, allowing my TCAS to retrieve them.
In FS2004, with SB you will need to use SBRelay to link SB's MP with FS2004's MP session. You can then use the TrafficInfo interface of ILH_TCAS!Logic to access the MP traffic. Alternatively, you can run AIBridge 3.x to relay this traffic to FSUIPC.
I caution you that SB2 traffic seems to be rather jumpy due to low update rate and incorrect velocities. For this reason, the ILH_TCAS!Logic gauge performs alpha-beta-gamma smoothing of intruder altitudes, latitudes, and longitudes in an attempt to smooth out the jumpiness. It isn't perfect, but it helps. The jumpiness is visible on the IVSI display, and it does effect the reliability of TAs and RAs. I wish there was more I could do, but the old saying "garbage in, garbage out" springs to mind. "Garbage" is too harsh, as TCAS generally works OK.
The upcoming SB3 should improve this situation appreciably. I keep hearing that its traffic is much smoother. SB3 injects traffic directly into FSUIPC separately from the MP session. This should work around any MP maximum player limits as well. I have no personal experience with SB3 as of the time of this writing.

### Gauge Parameters

The following gauge parameters are available and are specified in the Panel.cfg file. Note that parameters are separated from eachother by one or more spaces. Do not use commas as they confuse the FS parser. Do not insert spaces around the colons.

parameter | default | description
trafficinfo:yes|no | no | Whether to use TrafficInfo for traffic. Otherwise, traffic is obtained from FSUIPC.
volume:N | -300 | Set the volume of TCAS alerts. 0 and -100 are louder, and -500 is softer.

ILH_TCAS!Logic gauge parameters

parameter | default | description
blueplane:yes|no | yes | Whether own aircraft should be blue. If it is blue, then other and proximate traffic will be white.
other:N | 999 | Vertical range in hundreds of feet for displaying other traffic. With the default value, all other traffic will be displayed, although if using a relative altitude display the values will be clipped at +/- 99. A more realistic value is 45 or 27.
fontscale:N | 1.0 | Scale factor for TCAS altitude font. Depending on your display and eyesight, you can adjust this (e.g., 0.9 or 1.1).
pic:yes|no | yes | Whether to try and access 767PIC internal values for panel lighting state, IRU state, and power state. Leaving this on outside of 767PIC is probably not a problem.

ILH_TCAS!IVSI gauge parameters

parameter | default | description
pic:yes|no | yes | Whether to try and access 767PIC internal values for panel lighting state, IRU state, and power state. Leaving this on outside of 767PIC is probably not a problem.

ILH_TCAS!Transponder gauge parameters
The following are sample Panel.cfg lines with some parameters, showing how they must be formatted:

    gaugeXX=ILH_TCAS!Logic, 0, 0, 1, 1, trafficinfo:yes volume:-200
    gaugeYY=ILH_TCAS!IVSI, 545, 391, 158, 158, fontscale:1.1 other:45

### Logic Parameters

The file FS\TCAS2v7.ini contains parameters for the TCAS logic (where FS is Flight Simulator's main folder). You likely don't need to edit anything in this file.

[Filtering] |
Range=100 | Range [feet] below which intruders are filtered. Default 100.
Altitude=100 | Altitude [feet] relative to ground altitude below own aircraft below which intruders are considered on the ground. Default 100.
Speed=30 | Groundspeed [kts] below which intruders are considered on the ground. Default 30.
[Smoothing] |
Enabled=1 | Enabled (=1) or disabled (=0). Default 1. This must be enabled for groundspeed-based filtering above to be in effect.
MaxCoast=20 | Maximum seconds of no position update before an intruder's track is discarded. The default of 20 seems to work OK with the sometimes infrequent position updates seen with Squawkbox 2 plus SBRelay and/or AIBridge.
Alpha=0.4 | Smoothing parameter. Useful values are between 0.4 and 1.0, with 1.0 meaning no smoothing.

An intruder is filtered out if it is below the altitude threshold and its groundspeed is below the speed threshold. To eliminate ground-based filtering, you could use Altitude=-100000 and Speed=-1 (no intruder could satisfy either of those thresholds).
If you remove this TCAS2v7.ini file, it will be recreated with default values the next time the TCAS logic is utilized.
The smoothing can be particularly useful with online traffic (e.g., Squawkbox or Multiplayer, utilizing AIBridge and/or SBRelay).
Note that as of the time of this writing, PMDG's 737-800/900 upgrade package is not capable of utlizing the smoothing, because it is using a different internal logic interface.

### Advanced (for Panel Designers)

Support is available for multiple IVSI displays sharing a single logic gauge. The gauges

- ILH_TCAS!IVSI,
- ILH_TCAS!IVSI2, and
- ILH_TCAS!IVSI3

are available and all share the same frame bitmap. Their mode and range settings will remain in sync at all times.
The following gauges are similar, except there is no frame:

- ILH_TCAS!IVSIb,
- ILH_TCAS!IVSI2b, and
- ILH_TCAS!IVSI3b.

The IVSI modes and range are controllable via Flight Simulator named variables in case you want to write your own control gauge. The followind named variables are supported:

- ILH_TCAS!IVSI.power, BOOL32, whether power is on.
- ILH_TCAS!IVSI.lit, BOOL32, whether to display the lit frame bitmap.
- ILH_TCAS!IVSI.vsi_flag, BOOL32, whether to flag the V/S indicator.
- ILH_TCAS!IVSI.range_index, UINT32 (0..4), TCAS range (6,12,18,24,40nm).
- ILH_TCAS!IVSI.mode_index, UINT32 (0..4), mode (TEST, STBY, XPDR, TA, TA/RA).
- ILH_TCAS!IVSI.above_below, UINT32 (0..2), ABV/N/BLW.
- ILH_TCAS!IVSI.absolute_relative, UINT32 (0..1), ABS/REL.
- ILH_TCAS!IVSI.redraw, BOOL32, whether to redraw immediately. Set this whenever you change anything above.
- ILH_TCAS!Transponder.power, BOOL32, whether power is on.
- ILH_TCAS!Transponder.lit, BOOL32, whether to display the lit bitmap.

Important: You must specify the option pic:no in the Panel.cfg gauge options for these named variables to work properly.
The TCAS II version 7.0 logic, as implemented in TCAS2v7.dll, is available for use within custom TCAS displays. Email me for more details. It's first use outside of my own gauges is in PMDG's 737-800/900 panel upgrade.

### TCAS II Version 7.0 Logic Validation

During development, at all times I strove to pass real-world TCAS logic validation tests. The tests are publically available as part of MOD 2 TSIM. The logic contained within TCAS2v7.dll was able to pass all 250 test encounters that do not involve TCAS/TCAS negotiation or Mode S Ground Station communications, neither of which are appropriate within Flight Simulator (at this point). Care was taken to ensure that all of the internal logic states are matched against TSIM state by state and second by second. The logic can produce all types of RAs including corrective, preventive, crossing, reversal, multi-aircraft composite, etc. It is capable of producing all of the aural alerts as well:

- Climb, Climb
- Descend, Descend
- Climb, Crossing Climb -- Climb, Crossing Climb
- Descend, Crossing Descend -- Descend, Crossing Descend
- Adjust Vertical Speed, Adjust
- Climb, Climb NOW -- Climb, Climb NOW
- Descend, Descend NOW -- Descend, Descend NOW
- Increase Climb, Increase Climb
- Increase Descent, Increase Descent
- Maintain Vertical Speed, Maintain
- Maintain Vertical Speed, Crossing, Maintain
- Monitor Vertical Speed
- Clear of Conflict
- Traffic, Traffic
- Traffic
- TCAS System Test OK
- TCAS System Test Fail

### Legal

This package is a freeware product and a labor of love and may not be included in any commercial package or website without written permission. These gauges are an add-on to Wilco Publishing's 767PIC and is not endorsed, part of, or related to Wilco Publishing in any way.
If you decide to use any part of this package, whether it is for freeware use or commercial, you must obtain prior written permission from me, the author. This includes altering the bitmaps for use with other panels.
Should there be any damage done to your system after using this package, I and all parties involved will not be held responsible.

### Acknowledgements

For the first version of this gauge, I received help from many sources. Nick Jacobs of Dreamfleet gave me several pointers on general gauge programming that proved invaluable. Mark McGrath, Ryan O'Malley, and John Selph provided me with TCAS documentation that was very helpful in developing my threat classification and display code. Claude Troncy provided guidance on a technique to read the main panel lighting status through an offset into 767PIC's APS.dll for the 1.2 patch. I have since figured out many other offsets for the 1.2 and 1.3 patches. Ian Riddell provided much technical help and even provided a photograph that was the basis for the transponder bitmaps.
For this version of the gauge, Lefteris Kalamaras of PMDG provided the motivation to finish up my full-fledged TCAS II version 7.0 logic so they could make use of it within their 737-800/900 panel. Without the motivation, I doubt it would be finished at this point. Lefteris and PMDG also provided me with the real-world TCAS aural alerts. Thanks!

Copyright © 2004 I. Lee Hetherington, All Rights Reserved.