Comtrade Viewer Help
Read relay event records. Inspect waveforms. Measure timing. Compute power quantities.
Records never leave your device — everything runs locally.
File Formats
Comtrade Viewer reads nine record formats, and can also open a plain .zip containing any mix of them. All are loaded the same way — tap Open Record and select the file(s).
- COMTRADE (IEEE C37.111) — either a .cfg + .dat pair (select both together) or a single .cff file.
- Beckwith OSC — single binary
.oscfile. Auto-detects the relay variant (M-3311A, M-3430, M-3425A, and older legacy formats). - ATP/EMTP PL4 — single
.pl4file from ATP/EMTP simulations. - S&C IntelliRupter WFC — single binary
.wfcfile from S&C IntelliRupter pole-/pad-mount fault interrupters. Auto-Guess pairs the X-side voltages with the phase currents to match the device's factory-default XY configuration (X = source, Y = load); switch to VY1, VY2, VY3 manually in the terminal pulldowns if your record was captured with the reverse Y/X convention. - SEL CEV — single ASCII
.cevfile ("Compressed Event"). When the record contains the relay's settings dump (most do), a View Settings › button appears in Record Details. - SEL EVE — single ASCII
.evefile ("Event Report") — the human-readable fault report written by SEL distance and protection relays. - SEL EVZIP — multi-event archive (
.evzip), a standard ZIP file containing one or more.cevor.eveevents. When an EVZIP has more than one event inside, a picker appears so you can choose which event to load. - SEL MSR — single ASCII
.msrfile (Motor Start Report). Carries one RMS value per cycle for phase currents, line voltages, and thermal capacity used — an envelope, not a sampled waveform. Analog plot only: the phasor diagram, RX diagram, and terminal calculations are not available for MSR records. A View Report › button in Record Details shows the full report text. - SEL CMSR — compressed variant of the MSR (
.cmsr), encoding the same motor-start data in SEL's CSV-with-checksums wire format. Behaves identically to.msr(analog plot only). Record Details shows a checksum tally confirming file integrity. - ZIP archive — a plain
.zipcontaining any mix of the formats above (for example several.oscplus a.cev, a.wfc, and a COMTRADE.cfg/.datpair). Each record inside is detected automatically: COMTRADE.cfg/.datfiles are paired by name, records stored in subfolders or in nested.zips are found too, and unrelated files are skipped. As with EVZIP, when the archive holds more than one record a picker appears so you can choose which to load (one record at a time) — so a.zipof SEL events works exactly like an.evzip.
Quick Start
Tap Open Record and pick a file (or pair of files) from the Files app.
The channel list appears. Tap any analog or digital channel to select it.
Tap the blue Plot › button at the top right to view the waveforms.
On the plot screen: pinch to zoom, drag to pan, double-tap to fit the full record. Drag the A and B cursor handles to measure timing and amplitude — press a handle for half a second to grab it.
Swipe from the left edge of the screen (or use the Android back gesture) to return to the channel list.
Reading the Plot
Each selected analog channel gets its own lane with the channel name on the left, a colored trace, and a horizontal axis at the bottom showing time in seconds or milliseconds.
Digital channels get shorter lanes with a dashed gray baseline. Colored dots appear at samples where the digital is asserted (=1).
The A (red) and B (green) cursors mark two points in time. The left margin of each lane shows the trace value at A and B — by default the instantaneous sample, or a calculated value such as RMS or a phasor (see Cursor Readout Modes). The bottom strip shows the absolute times and the difference (Δ) between the two cursors, including the count of fundamental cycles between them.
Tap the file-info row at the top of the channel list to see record details — station, device, samples, sample rate, timestamps, and format.
Plot Screen Gestures
Pinch
Zoom in/out on the time axis.
Drag (one finger)
Pan left/right along the time axis.
Double-tap
Auto-scale to fit the entire record.
Swipe from left edge
Return to the channel list.
Press and hold A or B handle
Hold for half a second to grab the cursor, then drag to move it.
Tap P
Toggle the phasor diagram (left of A/B handles).
Tap the readout chip
INST ▾, in the bottom-left corner of the plot, opens Readouts & scale: the cursor readout mode, and under Vertical scale the amplitude range and whether lanes share one scale per unit. Tapping any A/B readout or the mode header does the same. RMS records, which have no readout modes, show a Y ▾ chip for the vertical scale instead.
Tap Fault
Fault direction and the relay's own report, with Full fault analysis › for type and location. Visible only when a terminal is defined. See Fault Analysis.
Tap RX
Toggle the impedance (R-X) diagram. Visible only when a terminal is defined. P and RX are mutually exclusive; tapping the active one closes the panel.
Press and hold (phasor/RX)
Show magnitude, angle, R/X readout. Release to dismiss.
Channel Customization
- Tap the pencil icon to the right of a channel name to rename it. The new name persists for the session and is used in plots, cursor readouts, and exports.
- Tap a color stripe (next to the channel name, only visible when selected) to change that channel's trace color. 16 colors are available.
- The Filter input at the top of the channel list narrows the visible channels by name match (case-insensitive substring).
Terminal Calculations
A terminal is a 3-phase point in the system, defined by 6 channels: three voltages and three currents. Once defined, Comtrade Viewer can plot derived power and zero-sequence quantities alongside the raw waveforms. It also calculates apparent impedances, viewable on the R-X diagram, and symmetrical-component voltage and current phasors, viewable on the phasor diagram.
Defining a Terminal
When a record contains at least 3 voltage and 3 current channels, a Define Terminal banner appears above the channel list. Tap it to open the terminal-define modal:
- VT Wiring — choose Wye if your voltage channels are phase-to-earth (VA, VB, VC), or Delta if they are phase-to-phase (VAB, VBC, VCA).
- Method — applies only to the calculated P / Q (power) channels. The phasor diagram and every impedance calculation (Z1, Z2, Z0, and the loop impedances) always use their own 1-cycle DFT and are not affected by this setting. Choose DFT for 1-cycle sliding-window power (smooth, recommended for steady-state and post-fault analysis), or Instantaneous for point-by-point power (shows the 2× line-frequency ripple in single-phase P and Q).
- Auto-guess from channel names — fills in the channel pulldowns by matching channel names. Recognises the A/B/C convention (VA, VB, IA, etc.), the IEC numeric convention (U1, U2, I1, etc.), and the S&C IntelliRupter XY convention (VX1, VX2, VX3 + I1, I2, I3 — picks the X-side voltages by default, per the device's factory configuration). It goes by the names you see in the app, so channels you've renamed (the pencil in the channel list) are matched under their new names — a quick way to get a poorly-named record recognised.
Tap Save. The banner summarizes your terminal, and a Calculated section appears in the channel list between Analog and Digital. Select any calculated channel to plot it.
Calculated Channels
In Wye mode, these quantities are available:
- PA, PB, PC — active power per phase (W).
- 3P — total 3-phase active power.
- QA, QB, QC — reactive power per phase (var). Positive Q means inductive vars flowing out of the bus.
- 3Q — total 3-phase reactive power.
- V0 — zero-sequence voltage = (VA + VB + VC) / 3.
- I0 — zero-sequence current = (IA + IB + IC) / 3.
- ΔVA, ΔVB, ΔVC, ΔIA, ΔIB, ΔIC — incremental waveforms: each sample minus its value one cycle earlier. Load cancels, leaving the change a fault made (valid for one cycle after the change).
In Delta voltage mode, only system-level quantities are available:
- 3P, 3Q — total active and reactive power, computed via the 2-wattmeter (Aron) form.
- I0 — zero-sequence current, same as wye.
- ΔVAB, ΔVBC, ΔVCA, ΔIA, ΔIB, ΔIC — incremental waveforms, as in wye.
Per-phase P/Q and V0 are not physically defined when only line-to-line voltages are recorded, so they are not offered.
Sign Conventions and Units
Active and reactive power use the inductive-positive convention. Power units are derived automatically from the source channel units (V × A → W; kV × A → kW; kV × kA → MW). The display formatter chooses an SI prefix that keeps the value in a readable range (1.299 MW, 750.0 kvar, etc.).
Impedances: primary or secondary ohms. Impedances are in the same ohms as the record — primary or secondary. The R-X diagram labels them Ω pri, Ω sec, or plain Ω when the record doesn't say; in that case set Recorded values in Define Terminal. Relay settings (Z1MAG and the like) are secondary ohms: Zsec = Zpri × CTR / PTR. With both ratios set in Define Terminal, the R-X diagram's Select sheet can show either.
Cursor Readout Modes
The A/B values in the left margin can show more than the instantaneous sample. Tap the readout chip (INST ▾, bottom-left corner of the plot), any A/B readout, or the mode header to open Readouts & scale and pick a mode. The same sheet holds the Vertical scale controls (amplitude range and lane scales, also in Settings). Changes apply immediately, so you can watch the values update above the sheet.
- Instantaneous (default) — the sample value at each cursor.
- RMS — true RMS over one cycle, including harmonics and DC. Shown with an
rmssuffix, e.g.108.1 V rms. - Fundamental phasor — RMS magnitude and angle of the fundamental, e.g.
108.1 V ∠-120.0°. Matches the phasor diagram's value at the same cursor. - Harmonic — one harmonic as a % of the fundamental, e.g.
H3 5.00 %. Pick the harmonic (H2 upward) in the sheet; the list stops at the highest harmonic the record's sample rate can resolve. - THD — total harmonic distortion (H2–H50, or fewer if the sample rate limits it) as a % of the fundamental.
How the values are calculated
Every calculated mode uses a window of one cycle that ends at each cursor, the way a relay sees the signal. After a sudden change such as fault inception, the reading takes one cycle to settle — that is expected, not an error. The window is shown behind each cursor as a shaded band (see Settings → Cursors & readouts → Show calculation window), so you can see exactly which samples were used.
Header and chip
In a calculated mode the chip turns blue and shows the mode (RMS ▾, FUND ▾, H3 ▾, THD ▾). A small header pinned to the top-left of the plot shows the mode and angle reference on its first line (FUND · ∠ VA) and the frequency in use on its second (60 Hz · line).
Frequency
The window length follows the source chosen under Frequency in the sheet — line frequency, a Hz channel, or a frequency measured from the waveform. It is shared with the phasor diagram. See Frequency Tracking; it matters a great deal when the system was far from nominal.
Angles
Fund angles are measured from the phasor diagram's 0° reference channel. If none is set, the first selected voltage channel is used. The header shows which channel, e.g. ∠ VA.
When a value can't be calculated
The readout shows — within the first cycle of the record, when the sample rate is too low, or when the window would span a change in sample rate. RMS, phasor, harmonic and THD calculations don't apply to some channels — Hz channels, DC channels such as the station battery, no signal inputs, calculated (terminal) channels and channels with non-AC units. Those keep showing their actual value in every mode. On RMS-envelope records (SEL MSR/CMSR) the values are already RMS, so the readout modes are not offered.
Frequency Tracking
Every phasor, Fund, Harmonic and THD value comes from a one-cycle DFT, and "one cycle" is only right if the frequency is right. Near nominal the difference is negligible. Far from nominal it is not: a 60 Hz window on a 45 Hz signal reads magnitudes up to 25% low and the angles between phases up to 15° off. The usual cause is a generator that has tripped and is coasting down while its field, not yet decayed, keeps feeding the fault.
The measured frequency is an estimate. The app works it out from the recorded voltage waveform. It is not the relay's own frequency measurement, and like every method — the relay's included — it is least reliable during a fault, when the voltage is disturbed.
Choose the source under Frequency in the cursor readout sheet, or Frequency reference in the phasor / RX Select sheet — they are the same setting:
- Line frequency (default) — the nominal value: the record's stated frequency, your default line frequency, or what you've entered under This record's line frequency in Settings. Right only if the system was at nominal.
- Hz channel — a recorded channel whose unit is
Hz, usually the relay's own frequency measurement, read at each cursor. Where it has no valid value, the last valid value before the cursor is used, marked (held). - Measure: terminal voltages — offered when a terminal is defined. The three voltages are measured together, so one phase collapsing simply carries less weight.
- Measure: voltage channel — the frequency of one voltage. Only voltages are offered: during a fault a current is the disturbance itself, and it disappears when the breaker opens. On a current-only record, use line frequency or a Hz channel. Channels that aren't AC waveforms — station battery (
VDC), unconnected inputs, relay-internal memory voltages (V1MEM) — are left out.
You choose the channel; the app never picks or switches one for you. It can't tell what is wired to the relay. A VS input may be a VT on the other side of the breaker, and a line VT may still be fed from the remote end after the local breaker opens. Measure on a VT you know sees the machine or system you are analysing.
How the estimate works
Finding the period. The app compares the voltage waveform with a copy of itself shifted by a trial delay. The delay at which the two line up best is one period, and the frequency follows from it. Because the comparison uses every sample over two cycles, harmonics and noise have little effect. This is the method published by Bogdan Kasztenny of Schweitzer Engineering Laboratories — A New Method for Fast Frequency Measurement for Protection Applications, 13th IET DPSP, 2016: https://selinc.com/api/download/113977/?lang=en
Smoothing. The raw estimate is then smoothed. Choose how under Smoothing in the cursor readout sheet (shown when a Measure source is selected):
- Metering (default) — steady, and follows real frequency changes such as a coastdown closely. At fault inception and clearing it shows a small bump, around 0.1 Hz (see below).
- Tracking — follows fast changes most closely, but the bumps at fault inception and clearing are larger, up to about 0.4 Hz.
- Relay-like (hold through faults) — behaves the way a relay does. The app watches the voltages for signs of a fault: the phases becoming unbalanced, the voltage suddenly changing size, a sudden jump in its phase, or the voltage collapsing. While any of these is present the frequency is held at its last good value, and it is released once the voltage has been steady for two cycles. A steady fade doesn't count: a generator's voltage decaying as it coasts down is measured, not held. On a record where the system stayed at nominal, this matches a relay's own frequency channel closely.
The cost of holding. A held value doesn't change, so if the frequency really is changing during the fault — a coasting machine slowing down — the held value falls behind. To limit this the hold never lasts longer than 0.2 s; after that the app measures again. At an 18 Hz/s run-down, the held value can be about 3.6 Hz out by the time it releases. For a machine coasting down through a fault, Metering is usually the better choice.
The derived frequency lane. While a Measure source is chosen, the plot gains a lane labelled f ← VB (or whichever source you picked). It is the app's own estimate, not a recorded channel, so it is drawn dashed with an italic label. It sits just below the channel it is measured on, and is listed in the channel list under Derived — untick it there to hide the lane while still measuring with it. Under its label is the rate of change between the cursors, e.g. −16.6 Hz/s: the straight-line rate between the two points, so put both cursors on the part of the decline you care about. Gaps are stretches where nothing could be measured. Tap its label to change its colour.
Bumps at fault inception and clearing. These events shift the voltage's phase by a few degrees. While the phase moves, the waveform's apparent frequency moves with it, so with Metering or Tracking the lane shows a brief bump even though the system stayed at nominal. That is what the waveform did, and every frequency method sees it. Relay-like smoothing holds through it instead.
The second line of the readout header, and a caption in a bottom corner of the phasor / RX diagram, show what is in use — e.g. 45.60 Hz · meas VB. (held) means the value is being held — through a fault in Relay-like mode, or because nothing was measurable at the cursor; (nominal) means the cursor is before the first measurement, so the record's stated frequency is assumed; (fallback) means nothing could be measured at all and line frequency is in use.
The ⚠ warning. With line frequency or a Hz channel selected, the app still estimates the frequency in the background — on the terminal voltages if a terminal is defined, otherwise on the channel named as the A-phase (or AB) voltage. If the two disagree by more than 1%, the header and the diagram show ⚠ with the estimate, and the readout sheet names the channel. The background check is slow and steady, so a fault on its own doesn't set it off — only a frequency that stays off nominal.
What the estimate can't fix:
- Two sources at two frequencies. If the fault is fed by both a coasting machine and the system, the voltage holds two frequencies at once and no single frequency describes it. The app detects this and won't measure there — expect (held) or (fallback), and treat every phasor in that stretch as meaningless.
- Calculated P and Q channels are computed at line frequency, and the Δ cycle count in the bottom strip always uses line frequency.
- Low sample rates leave an error of a percent or two in calculated values even with the right frequency.
- Very fast declines with a collapsing voltage — motor load spinning down through a fault, say — can't be measured; the lane shows a gap there.
- Very small voltages. A voltage is followed down to about a tenth of its largest value in the record — a generator's decaying voltage, for instance — and not below; under that, noise makes the estimate unreliable, so the lane stops.
None of this replaces judgment. Look at the waveforms, check that the frequency in the header is plausible, and check that balanced quantities look balanced. The tool gives you the numbers; whether they mean anything is your call.
Phasor (P) and Impedance (R-X) Diagrams
Tap P in the strip with the A/B handles to open the phasor diagram. It opens beside the waveforms — below them in portrait, to the right in landscape — and computes a one-cycle DFT phasor for each selected channel at cursor A. Move cursor A and the phasors update live.
- Select — choose which analog channels appear, the 0° reference channel (all phasors rotate so that channel sits on the positive real axis; pick none to use the raw +real axis), the frequency reference (line frequency, a
Hzchannel, or measured from the waveform — see Frequency Tracking), and RMS vs Peak magnitude. The frequency reference is shared with the cursor readouts, and the 0° reference also sets the angle reference for Fund readouts. The frequency in use at cursor A is shown in a bottom corner of the diagram. - Per-quantity scaling — by default, voltages and currents each independently fill the outer ring, so both groups are always visible at full scale. Tap ½ Curr to compress currents to the half-ring instead, which visually separates them from voltages. Tap Norm to draw all phasors at equal length (angles only). The dashed rings are labelled with the real-unit value each represents.
- Press and hold anywhere on the diagram for a readout of every phasor's magnitude and angle (relative to the reference); release to dismiss.
Tap RX (only shown when a terminal is defined) for the impedance plane. It plots the positive-sequence impedance Z1 = V1 / I1 as a point with a line from the origin, on R (horizontal) / X (vertical) axes, also tied to cursor A. Z1 is shown at its absolute angle — no reference rotation. The ohms domain follows the recorded channels as-is (no CT/PT ratio applied, so secondary inputs give secondary ohms). Press and hold for R, X, |Z1| and the impedance angle.
The diagram is only as good as the frequency it is computed at. Near nominal the error is small. Far from nominal — a coasting generator, an island — magnitudes and the angles between phases can be badly wrong. Watch for ⚠ in the diagram's bottom corner, and see Frequency Tracking.
Fault Analysis (single-ended) EXPERIMENTAL
Fault Analysis works on the record open in the viewer: which direction the fault was, what type it was, and — with line data — how far along the line. It needs a terminal (three voltages and three currents of one line), so the Fault chip appears once one is defined. One tap runs everything automatically.
The summary
Tapping Fault first shows the basics:
- Direction — Forward (into the line) or Reverse (behind the relay), from the incremental directional element, with the loop that decided it and how many milliseconds after inception. If it can't decide, it says Not determined and why.
- Reported by the relay — the fault type, location and per-unit location the relay recorded in its event summary. Only SEL CEV records carry this; COMTRADE exports don't.
Full fault analysis › opens the full result; ‹ Summary returns. Close keeps the result; Clear removes it and its plot markings. On the plot, a dotted line marks fault inception and, in the full view, the analyzed window is shaded. The Fault chip is blue while a result exists.
The full result
- Headline — fault type and confidence, direction and its source, and the distance from the headline method (★).
- Fault type used — override the detected type; the location is recalculated for that loop.
- Method table — per-unit distance from each method, and distance when the line length is known.
- Apparent impedance of the faulted loop, and apparent fault resistance (seen from this end, so inflated by remote infeed).
- The relay's own answer, Fault duration (and how the end was found), and the window analyzed.
- Details — the sequence angles behind the type, the fault-type timeline, each directional loop with its incremental impedance, and the line data used.
- Line data — edit the line impedance and length for this record.
Warnings appear above the numbers for: a reverse fault, a weak fault signal, noisy pre-fault currents, methods disagreeing by more than 10 % of the line, a location outside the line, a very short fault, or ohms that can't be put on the record's side.
How it works
1. Finding the fault. Inception is the first sample where the one-cycle change in current (or voltage) rises clearly above the record's background, with currents rising or voltages sagging — so a breaker opening is not mistaken for a fault. The fault ends at the first of: a faulted phase's current collapsing (pole open), voltages and currents back to pre-fault for a cycle (cleared elsewhere), or 60 cycles.
2. Fault type. From the angles between sequence currents, with Δ meaning fault minus pre-fault (shifted a whole number of cycles):
- Ground involved if |ΔI0| > 0.1 of the largest sequence change; unbalanced if |ΔI2| is too; neither but |ΔI1| present → ABC (and not a load change: some voltage sag or a large current change).
- ∠(ΔI2 / ΔI0) picks a pair: 0° → AG or BCG, −120° → BG or CAG, +120° → CG or ABG (±50°).
- ∠(ΔI2 / ΔI1) picks within the pair — the two are 180° apart: AG 0°, AB/ABG +60°, BG +120°, BC/BCG 180°, CG −120°, CA/CAG −60°. Without I0 only the phase-to-phase sectors count (±40°).
- With phase voltages the primary path uses S2 = 3ΔI2·1∠θ − H·3ΔV2 and S0 = 3ΔI0·1∠θ − H·3ΔV0 (θ = line angle, H = 3·Inom / Vnom), compared with V1 the same way; the voltage terms keep it working with a weak source. The current-only path runs alongside as a cross-check.
- The type is tracked through the fault; the last stable type is used and an evolving fault is reported (e.g. AG → ABG).
3. Direction. The incremental directional element is based on the TD32 element developed by Bogdan Kasztenny at Schweitzer Engineering Laboratories and described in the SEL-T401L Instruction Manual. It is this app's own implementation of that principle, not a reproduction of the relay's logic, and its results may differ from the relay's. For each faulted loop, using the first cycle after inception: Δv is the loop voltage minus its value one cycle earlier, and ΔiZ the same for the replica current (loop current through a 1 Ω model at the line angle; ground loops include Z0/Z1). Both are low-pass filtered.
Torque = ∫ −Δv · ΔiZ dt. Forward when it exceeds |ZF| · ∫ ΔiZ² dt, reverse when below −ZR · ∫ ΔiZ² dt, held for ⅛ cycle.
Forward faults see Δv = −Zsource · ΔiZ, reverse faults the opposite sign, so fault resistance and load don't matter. The element needs the line energized and steady for the cycle before the fault and enough Δv and Δi; otherwise the full result falls back to negative-sequence direction, z2 = Re[V2 · conj(I2 · 1∠θ)] / |I2|² (forward if negative).
4. Location. For the faulted loop (two-phase-to-ground faults use the phase-to-phase loop):
- Ground loop, e.g. AG: V = VA, I = IA + k0 · IR, with IR = IA + IB + IC and k0 = (Z0 − Z1) / (3 · Z1).
- Phase loop, e.g. BC: V = VB − VC, I = IB − IC.
- Three-phase: V = V1, I = I1.
Z1 is the whole-line positive-sequence impedance. Four methods share one equation and differ only in the polarizing current IP, assumed in phase with the current in the fault resistance:
m = Im[ V · conj(IP) ] / Im[ Z1 · I · conj(IP) ] (per unit; distance = m × line length)
- Negative-sequence polarized ★ (unbalanced faults) — IP = ΔI2 rotated to the loop: AG ΔI2, BG a·ΔI2, CG a²·ΔI2, AB (1 − a)·ΔI2, BC (a − a²)·ΔI2, CA (a² − 1)·ΔI2, with a = 1∠120°.
- Takagi (incremental) ★ (three-phase) — IP = ΔI, the change in the faulted phase (or loop, or I1) current from pre-fault.
- Zero-sequence polarized (ground faults) — IP = IR.
- Simple reactance — IP = I, which reduces to m = Im(V / I) / Im(Z1).
Two more for comparison:
- Mho, memory-polarized — m = Re[ V · conj(Vpol) ] / Re[ I · 1∠θ · conj(Vpol) ] / |Z1|, with Vpol the pre-fault V1 rotated to the loop. Reads long on resistive faults.
- Projected on the line angle — m = Re[ Z · conj(Z1) ] / |Z1|², with Z = V / I.
Each method is evaluated every 1/16 cycle across the window (from 1¼ cycles after inception to the end of the last stable fault type) and the median is reported. Apparent fault resistance (negative-sequence method): RF = Re[ (V − m · Z1 · I) / IF ], with IF = 3 · IP for ground faults and IP for phase faults.
Line data
For SEL records, Z1MAG, Z1ANG, Z0MAG, Z0ANG and LL come from the settings in the record (secondary ohms). Line data enters or overrides them for this record, as primary or secondary ohms; the app converts with the CT and VT ratios (from the record or Define Terminal) when the record is on the other side. Z0 is needed only for ground faults — without it, the k0 from Define Terminal is used if set. Without Z1 you still get type, direction and the loop impedance in ohms.
Limits
Single-ended location can't see the remote end's current, so fault resistance with infeed, a nonhomogeneous system, mutual coupling with a parallel line, untransposed lines, series capacitors and tapped load all bias it. Expect a few percent of line length at best, more for resistive ground faults. Faults shorter than about 1¼ cycles read long. A weak fault signal (voltage sag under 5 % and current change under half the load) or currents already carrying over 20 % harmonics or noise are flagged and lower the confidence; the numbers are still shown. A cross-country fault can look like a two-phase-to-ground fault from one end. The double-ended Incremental Fault Locator avoids most of these.
References
- IEEE Std C37.114-2004, IEEE Guide for Determining Fault Location on AC Transmission and Distribution Lines. IEEE, 2005. The single-ended impedance methods (simple reactance, Takagi, zero- and negative-sequence polarized), their error sources and limits.
- T. Takagi et al., “Development of a new fault locator using the one-terminal voltage and current data,” IEEE Trans. PAS, vol. PAS-101, no. 8, pp. 2892–2898, Aug. 1982. The Takagi method.
- SEL-T401L Ultra-High-Speed Line Relay Instruction Manual, Schweitzer Engineering Laboratories, date code 20251120 — Section 2 (TD32, fault-type identification) and Appendix G (incremental quantities, TD32 principle, distance and fault-locating calculations). The incremental directional element, the voltage-blended fault-type signals, and the negative-sequence polarized locator.
- B. Kasztenny, B. Campbell, J. Mazereeuw, “Phase Selection for Single-Pole Tripping — Weak Infeed Conditions and Cross-Country Faults,” 27th Annual Western Protective Relay Conference, Spokane, Oct. 2000. Fault-type identification from sequence-current angles.
Fault Locate (double-ended) EXPERIMENTAL
Open it from the Incremental Fault Locator button on the start screen, before any record is loaded. It works on its own pair of records and shares nothing with the viewer.
The method is the incremental-quantity, time-domain, double-ended locator of Kasztenny & Smelich (SEL, TP7224-01, 2025). The change in voltage at an assumed fault location can be computed from either end of the line, and at the true location the two estimates agree sample for sample, transients included. A least-errors-squared fit over the A–B window solves for the location in closed form.
Two consequences follow, and they are the reason to prefer this over a conventional impedance calculation. All three phase-to-phase loops are solved together, so there is no faulted-loop selection and evolving faults cause no trouble. And the zero-sequence line impedance is never used, so soil resistivity, mutual coupling with parallel circuits and Z0 setting error drop out of the answer entirely. Ground faults are located from phase-to-phase quantities alone.
The four steps
Load a record from each end. You can select both at once in the file picker. Which record goes to which end does not matter — the fit is symmetric, and the result names the terminal it is measured from.
Define the terminal at each end — three voltages and three currents. Current must be measured into the line at both ends; tick Invert current polarity if a relay's CTs look into the bus instead. Getting this wrong reports the fault near the wrong terminal rather than failing.
Align the two records. Bring one record's fault inception onto the white centre line by dragging the top lane, then drag the bottom lane until the other record's inception sits on the same line. Only a few milliseconds of accuracy is needed — the calculation polishes the rest itself. Use the nudge buttons or type a value for fine adjustment.
Bracket the fault with A and B, enter the line impedance, and tap Locate Fault.
Where to put cursors A and B
- A — 3 to 5 ms after fault inception, not at it. The first millisecond or two carries the CCVT transient and the acquisition filters' step response, neither of which depends on where the fault is. Starting late costs almost nothing; starting early drags those artifacts into the fit.
- B — about one cycle after A, and before the first breaker pole opens at either end. This is the one that bites: once a breaker interrupts, the waveform stops being a fault and the method fits the interruption transient instead. Watch the current traces for the open pole rather than trusting the trip output — the breaker lags it.
Useful window lengths: one cycle with transient-based relays, two with phasor relays, half a cycle for incipient cable faults. Longer is not better.
Line impedance
The whole-line positive-sequence impedance, entered either as a magnitude and angle or as R1 + jX1 — the toggle above the fields switches between them and converts what is already there. Both halves are required either way: the replica current uses the angle, not just the magnitude. An angle of 0 is a real entry, not a blank. Z0 is deliberately not requested.
When a record carries a settings block with Z1MAG and Z1ANG, these fields fill in automatically, along with the CT and VT ratios and the line length. The values stay editable. The panel above them shows what was found in each record, and says so plainly when a record has no settings block.
The ohms must be on the same side as the samples. This is the setting most likely to be wrong, and it is wrong by a factor of VTR/CTR — which shows up as a wildly out-of-range answer rather than a subtle one.
Reading the result
- Goodness of fit ε — how well the two ends' estimates agree at the solved location. Small is good, but see the sensitivity chart before trusting it.
- Fit — the change in voltage at the solved fault point, computed from each end independently. These two traces lying on top of each other is the real evidence the location is right, more so than any single number.
- Sensitivity — fit residual against assumed location. One sharp valley means a well-determined answer. A shallow or double-bottomed curve means the fit is not pinning anything down, whatever ε says.
- Alignment — fit residual against time shift. Its minimum is the alignment the data itself prefers, which tells you after the fact how close your manual alignment was. A minimum hard against either edge means the records are still misaligned and the location is not trustworthy.
- The relays' own answers are shown for context, restated per unit from the local end so all three numbers are comparable. A single-ended locator sees no remote current, so infeed and fault resistance push it around in ways this method is not subject to. When the two relays contradict each other — their per-unit values should sum to one — at least one is wrong and neither settles anything.
Two additions of this viewer, not part of the published method
An integral formulation is solved alongside the published instantaneous one. Integrating the voltage-drop equation turns the L·d(Δi)/dt term into L·Δi, so no numerical derivative is taken at all. Both estimates come from the same window and the same signals, and their agreement is a per-record measure of whether the numerics survived the sample rate — a central-difference derivative loses sin(θ)/θ of its gain, 2.5 percent at 32 samples per cycle, 6.9 percent at 12, and the integral form does not. The two estimates agreeing is the normal case and is not reported; a warning appears on the result only when they diverge. This is why no minimum sample rate is enforced: a low-rate record is not refused, it is cross-checked.
Both records are also resampled onto a common grid with band-limited (Lanczos-4) interpolation before the alignment polish. Its purpose is alignment resolution, not accuracy: two unsynchronised recorders at 16 samples per cycle have sampling instants up to half a sample apart, 0.52 ms or 11 electrical degrees, and a polish quantised to whole samples cannot correct any of it. No amount of interpolation recovers spectral content the recorder never captured.
Reference and status
B. Kasztenny and G. Smelich, "Locating Faults by Using Incremental Quantities: Introduction, Application Considerations, and Performance," Schweitzer Engineering Laboratories, SEL document TP7224-01, 52nd Annual Western Protective Relay Conference, October 2025. An earlier version appeared in Proc. 19th IET Conference on Developments in Power System Protection, Bilbao, 2025, pp. 6–13, doi:10.1049/icp.2025.1039. The authors report an average error of 1.1 percent of line length over 118 field records.
This feature is experimental. Results must be independently verified before any operational use.
Settings Reference
Open Settings via the gear icon next to the title in the top-left of the channel list. Settings persist across app restarts; Reset at the bottom of the screen returns them all to the defaults listed here.
Appearance
| Setting | Default | Notes |
|---|---|---|
| Theme | Auto | Auto follows the device's dark/light mode. Or choose Light or Dark. |
| Text size | Normal | Small, Normal, Medium, Large or Extra large. Scales all text, including the labels and readouts drawn on the plot and diagrams; bottom sheets stay at normal size. Bigger text widens the label and readout columns and narrows the waveform area — at Large and Extra large on a small phone, landscape, the Inst readout mode or Lane labels → Off give the waveforms more room. |
Waveform Plot
| Setting | Default | Notes |
|---|---|---|
| Analog lane height (px) | 60 | Vertical space for each analog channel. With Auto-fit lanes off this is the exact lane height; with it on it acts as a minimum. |
| Digital row height (px) | 22 | Vertical space for each digital channel. |
| Space between lanes (px) | 5 | Gap between adjacent lanes. |
| Amplitude range | Whole record | What each lane's vertical scale is fitted to; independent of lane height and Auto-fit. Whole record — fitted once to the entire record, and never changes as you pan or zoom, so heights stay comparable. Best for comparing fault transients to pre-fault steady state. Visible window — re-fits to the data on screen as you zoom. Best for inspecting fine detail, but a lane holding only noise is stretched to fill its height (its axis limits show how small it really is). Also on the plot's Y chip, whose sheet is titled Vertical scale. |
| Lane scales | Own | Own scale per lane — each lane fits its own signal. Shared by unit — every lane with the same unit shares one scale: all voltages together, all currents together, all Hz together (kV and V lanes are matched by converting units). A collapsed phase or a high fault current stands out at a glance. Only AC voltages and currents share: a DC or noise-only channel (station battery VDC, an unused input) keeps its own scale, as does a lane alone in its unit. A voltage far smaller than the others — under 1/20 of the largest, such as a secondary-volt channel beside primary kV — forms its own group rather than being squashed flat. Currents aren't split by size: fault current is often many times load, and that contrast is the point. Also on the plot's Y chip.Every analog lane shows its y-axis limits just left of the axis line — the maximum at the top of the lane, the minimum at the bottom (e.g. 146 kV / −146 kV) — whatever the scaling mode. With Visible window a lane holding only noise is zoomed to fill its height; the limits show how small it really is. Where they appear follows Lane labels; a lane too short to fit both limits beside its name shows the range as a small tag inside the plot instead. |
| No-signal & DC handling | On | A recorded channel that only ever takes a handful of A/D steps is handled specially. No signal (spans ≤ 10 steps near zero — an unused IN or VS input): drawn as a dimmed flat line on the scale of the real signals in its unit, tagged no signal; the channel list marks it too. DC (not AC, and its level dwarfs its spread — e.g. the station battery VDC): its axis runs from zero to just past its level, so it shows as a steady line at its true value and a real sag still shows, but one-step flicker doesn't.Turn this off to see every channel auto-scaled to its own raw range — for example to study a battery's ripple. |
| Auto-fit lanes to screen | On | When the lanes together are shorter than the screen, they grow proportionally to fill it (the analog/digital height ratio is preserved, and Analog lane height becomes a floor). When off, each lane is exactly Analog lane height px tall and the rest of the screen stays blank. If the lanes are taller than the screen, the plot scrolls and this setting has no effect. |
| Show digitals | All | All — every digital channel is selectable. Active only — only digitals that change state somewhere in the record. Active or asserted — digitals that change state OR stay asserted (=1) for the whole record. |
| Trace line width (px) | 1.5 | Thickness of plotted lines. |
| Monochrome traces | Off | Draws all waveform traces and phasors in a single color (white on dark, black on light). Cursor lines and the A/B readouts keep their own colors. Turn on Show phasor labels in the phasor diagram's Select sheet to tell the phasors apart. |
| Pinch zoom sensitivity | 1.5× | 1×, 1.5×, 2×, or 3×. Multiplies the zoom factor of pinch gestures; 1× is a physical 1:1 pinch. Higher values zoom further for the same finger travel. |
| Show gridlines | On | Horizontal axes within each lane. |
| Lane labels | Names + axis limits | What the plot shows beside each lane. Names + axis limits — the channel name in the left margin, with the y-axis maximum at the top of the lane and minimum at the bottom, beside the axis. Names + range in plot — the name in the margin, and the range as a small tag inside the lane's top-left corner (e.g. ±146 kV).Off — traces only: no names, limits or df/dt, and the plot widens into the freed margin. The A/B readouts still give exact values. The channel name appears without its unit — the readouts beside it already show it — except in Harmonic and THD modes, where the readouts are in %, and when neither readout has a value. |
"Why is there empty space below my waveforms?" Auto-fit lanes is off, so each lane uses exactly Analog lane height px and the remaining screen is intentionally blank. Turn Auto-fit lanes to screen back on to expand the lanes to fill the screen. Leave it off when you want a fixed lane height regardless of channel count (e.g. a consistent zoom for comparing records). Lane height and Auto-fit control vertical space; Amplitude range controls how the signal fills whatever space a lane has. Changing one never changes the other.
Phasor / RX Diagram
| Setting | Default | Notes |
|---|---|---|
| Phasor thickness | Medium | Line weight of the arrows in the phasor and R-X diagrams: Small, Medium, or Large. |
| V1MEM compensation | On | In raw SEL event reports the relay's memory voltage V1MEM is updated only once per processing interval, so it is recorded as a staircase whose values belong at the end of each step — as recorded, its phasor appears to lead V1 by about 45°. With this on, the app measures that offset from the record's own pre-fault cycles (where V1MEM equals V1) and corrects V1MEM's phasor in the phasor diagram and Fund readouts; the trace is never changed. A compensated V1MEM is drawn dashed, with V1MEM compensated in the diagram's corner; the offset goes to the Log. It is a fixed time shift, so a memory that genuinely drifts from V1 during an event still shows. Off matches SEL's SynchroWAVe. |
Cursors & readouts
| Setting | Default | Notes |
|---|---|---|
| A/B handle position | Bottom | Place cursor handles at the bottom or top of the plot screen. Time labels always stay at the bottom. |
| Cursor A color | Theme default | Pick from 16 swatches or tap Reset to return to the theme default. |
| Cursor B color | Theme default | Pick from 16 swatches or tap Reset to return to the theme default. |
| Show calculation window | Shaded | How the one-cycle window behind each cursor is shown when the readouts are in a calculated mode (RMS, Fund, Harmonic, THD). Shaded — a translucent band in the cursor's color behind the traces. Outline — dashed edges with a bracket along the top, no fill. Off — hidden. Nothing is drawn in Inst mode. |
| Window shading | Normal | Subtle, Normal, or Strong. Shown only when the window is Shaded. Each step is tuned separately for light and dark themes, so it looks similar in both. |
| Magnitude precision | 3 | Magnitudes in the A/B readouts to 3 significant digits (e.g. 402 A, 1.80 kA) or 4 (401.8 A).This is display rounding, not a claim of accuracy: the whole chain — instrument transformers, relay inputs, the calculation — is typically good to around 1%, so three digits roughly matches what a reading is worth in absolute terms. A fourth digit is real resolution and useful for relative comparisons in one record (A vs B, phase vs phase), not as an absolute value. Readouts never show more decimals than the channel itself can resolve — its A/D step, measured from the data — so a channel recording in 1 mA steps reads −3 mA, not −3.00 mA (calculated RMS and phasor values average a cycle, so they may keep one decimal more). Frequencies always show 0.01 Hz (59.99 Hz). |
| Angle precision | 0.1° | 0.1° or 1°. Whole degrees save more room; 0.1° helps when comparing nearly equal angles. Both settings are also on the cursor readout sheet, as Precision. |
Other
| Setting | Default | Notes |
|---|---|---|
| Show ε for values below | 0.0001 | Values smaller than this display as ε instead of a tiny number. Reduces noise in cursor readouts. |
| Default line frequency (Hz) | 60 Hz | Fallback line frequency used only when a record contains no embedded frequency value. Set to 50 once if you mostly work on 50 Hz systems. |
| This record's line frequency (Hz) | From record | The frequency actually used by the DFT calculations and cursor cycle counts for the current record. Defaults to: the record's embedded value → your default line frequency → 60 Hz. Edit to override for the current record only (e.g., when a record's stated 60 Hz is actually drifting at 59.7). If a Hz channel or a Measure source is chosen as the frequency reference (in the phasor picker or the cursor readout sheet), it takes priority for phasor calculations and calculated cursor readouts. See Frequency Tracking. |
| Help | — | View Help › opens the help in the app. |
| Hide samples on start screen | Off | Turn on to remove the Or try a sample record list and the Sample fault location link from the start screen. |
| Diagnostic log | — | View Log › shows app messages and any errors encountered. Useful for reporting bugs (see Troubleshooting). |
To email a record to support, tap the record information row (just beneath the top button) to open Record Details, then tap Email to Support to open a pre-addressed email you can edit and send.
Troubleshooting
If a record fails to load or computed channels look wrong:
- Open Settings → tap View Log.
- Look for entries tagged
[load](file loading),[calc](terminal calculations), or[dft](DFT engine). - Tap Copy to put the log on the clipboard, then email it to feedback@comtradeviewer.org along with the record file (if non-confidential).
Common Messages
- "no line frequency in record; using user default …" — your record didn't specify a line frequency. The app fell back to your default line frequency setting. Set this once in Settings if you mostly work at a non-60 Hz frequency.
- "sample rate X Hz too low for f1=60 Hz" — DFT needs at least 4 samples per cycle. Increase the relay's sample rate or use the Instantaneous method.
About
- Privacy — collects nothing. Records never leave the device.
- Offline — fully functional with no network connection.
- Support — feedback@comtradeviewer.org
- Website — comtradeviewer.org
- Disclaimer — Provided as-is for quick viewing and analysis of waveform records. Results must be independently verified before use in any operational decision.