Electric Power Distribution Handbook, T. A. Short

IEEE 1584-2002 arc flash calculator

         #:  script=scriptloader
- lib/numeric-1.2.6.min.js
.row
  .col-md-3
    br
    br
    #inputform
  .col-md-1
  .col-md-8
    h3 Results
    #results
    #plot
         #: jquery=dform outputid=inputform
html:
  - name: equip
    type: select
    bs3caption: Equipment
    choices:
      - Switchgear
      - MCCs and Panels
      - Open Air
      - Cable
  - name: V
    type: number
    bs3caption: "Voltage, line to line, kV"
    value: 12.5
  - name: grounded
    type: checkbox
    bs3caption: Grounded
    checked: checked
  - name: Din
    type: number
    step: 5
    bs3caption: "Working distance, in"
    value: 36
  - name: clothing
    type: number
    bs3caption:
      html:
        - html: Clothing rating, cal/cm
          type: span
        - type: sup
          html: 2
    value: 8.0
  - name: Ib
    type: number
    bs3caption: "Bolted current, kA"
    value: 6.0
  - name: t
    type: number
    bs3caption: "Duration, sec"
    step: 0.1
    value: 1.0
  - name: graphextras
    type: select
    bs3caption: Plotting extras
    choices:
      - Vary working distance
      - Vary clothing
      - None
         #:  name=tbl
key: ["LVe1","LVe3","LVe4","LVe2","MV1e1","MV1e3","MV1e2","MV1e4","MV2e1","MV2e3","MV2e2","MV2e4"]
G:   [32,32,25,13,102,102,13,102,153,153,13,153]
x:   [2,1.473,1.641,2,2,0.973,2,0.973,2,0.973,2,0.973]
equip:
     - Open Air
     - Cable
     - Switchgear
     - MCCs and Panels

D = Din * 25.4   // convert to mm
//println("Equipment = " + equip)
equipcode = tbl.equip.indexOf(equip) + 1
//println("Equipment code = " + equipcode)

var Vlab = "LV"
if (V > 1) Vlab = "MV1"
if (V > 5) Vlab = "MV2"

key = Vlab + "e" + equipcode
idx = tbl.key.indexOf(key)
//println("key = " + key)
//println("idx = " + idx)
G = tbl.G[idx]
x = tbl.x[idx]
//println("G = "+ G)
//println("x = "+ x)

findcals = function(Ib) {
   if (V > 1) {Cf = 1.0} else {Cf = 1.5}
   if (equip == "Open Air") {K1 = -0.792; K = -0.153} else {K1 = -0.555; K = -0.097}
   if (!grounded) {K2 = 0.0} else {K2 = -0.113}


   lgIb = Math.log(Ib)/ Math.LN10
   if (V > 1) {
      lgIa = 0.00402 + 0.983 * lgIb
   } else {
      lgIa = K + 0.662 * lgIb + 0.0966 * V + 0.000526 * G + 0.5588 * V * lgIb - 0.00304 * G * lgIb
   }
   Ia = Math.pow(10, lgIa)

   En = Math.pow(10, K1 + K2 + 0.0011 * G + 1.081 * lgIa)

   return Cf * En * t/0.2 * Math.pow(610/D, x)
}

cals = findcals(Ib)
        //:output=markdown outputid=results

println()
println("Incident energy for the given current and duration = **" + cals.toFixed(2) + " cal/cm^2**")
duration = clothing / cals * t
println()
println("Duration limit for the given current and clothing = **" + duration.toFixed(2) + " secs**")

         #:  name=plotinfo
chart:
    type: line
    width: 500
    height: 500
    spacingRight: 20
title:
    text: Time-current curve

plotOptions:
    series:
        marker:
            enabled: false
xAxis:
    type: 'logarithmic'
    min: 1
    max: 100
    endOnTick: true
    tickInterval: 1
    minorTickInterval: 0.1
    gridLineWidth: 1
    title:
        text: "Current, kA"

yAxis:
    type: 'logarithmic'
    min: .02
    max: 10
    tickInterval: 1
    minorTickInterval: 0.1
    title:
        text: "Time, sec"

legend:
    align: right
    verticalAlign: middle
    layout: vertical
    borderWidth: 0
currents = numeric.pow(10,numeric.linspace(0,2,100))
durations1 = _.map(currents, function(I) {return clothing / findcals(I) * t})
series1 = _.zip(currents,durations1)
if (graphextras == "Vary clothing") {
    durations0 = _.map(currents, function(I) {return clothing / findcals(I) * t * 2})
    series0 = _.zip(currents,durations0)
    durations2 = _.map(currents, function(I) {return clothing / findcals(I) * t / 2})
    series2 = _.zip(currents,durations2)
    plotinfo.series = [{name: clothing*2 + " cals at " + Din + '"',
                        data: series0},
                       {name: clothing   + " cals at " + Din + '"',
                        data: series1},
                       {name: clothing/2 + " cals at " + Din + '"',
                        data: series2}]
} else if (graphextras == "Vary working distance") {
    Dorig = D
    D = Dorig * 2
    durations0 = _.map(currents, function(I) {return clothing / findcals(I) * t})
    series0 = _.zip(currents,durations0)
    D = Dorig / 2
    durations2 = _.map(currents, function(I) {return clothing / findcals(I) * t})
    series2 = _.zip(currents,durations2)
    plotinfo.series = [{name: clothing + " cals at " + Din*2 + '"',
                        data: series0},
                       {name: clothing + " cals at " + Din + '"',
                        data: series1},
                       {name: clothing + " cals at " + Din/2 + '"',
                        data: series2}]
} else {
    plotinfo.series = [{name: clothing + " cals at " + Din + '"',
                        data: series1}]
}
//plotinfo.series = [{data: series1}]
$("#plot").highcharts(plotinfo)

Notes

This app models the arc flash incident energy based on 1584-2002 - IEEE Guide for Performing Arc Flash Hazard Calculations. The results are based on regression models from a series of tests on equipment. Most of the tests were based on vertical busbars in boxes. IEEE 1584 states that these regression equations are applicable for the following ranges of variables:

Note that for voltages above 15 kV, this app continues to use the 1584 regression equations. This is based on analysis and tests reported in EPRI 1018693 [2009], EPRI 1022697 [2011], and Short [2011]. The system voltage has little to do with arc energies at medium voltage. The main impact is from arc lengths, and these are determined by equipment spacing. Equipment bus and enclosure spacings only moderately increase across distribution voltages. Tests mimicking the IEEE 1584 tests found that increasing bus spacings did not increase arc energies, and increased enclosure sizes decreased incident energies.

For equipment operated at 480 V and below, these calculations do not account for self-extinguishing arcs. Depending on electrode size, arrangements, spacings, voltage, and enclosure characteristics, faults may not sustain continuously. Arcs may burn out or expand and self extinguish. See section 14.8 and also the NESC [IEEE C2-2012] and Eblen and Short [2012] for more information, especially information on incident energies for utility equipment that are much lower than IEEE 1584 predictions.

Because the IEEE 1584 tests were based on vertical electrodes, the results may underpredict incident energies for equipment with horizontal bus bars. See this app for arc flash calculations for a padmounted switch with horizontal electrodes.

The IEEE 1584 working group is working on updating this model to account for a wider range of equipment conditions and to account for other bus geometries.

References

Eblen, M. L. and Short, T. A., “Arc-Flash Testing of Typical 480-V Utility Equipment,” IEEE Transactions on Industry Applications, vol. 48, no. 2, pp. 581-592, March-April 2012. Approved version

EPRI 1018693, Distribution Arc Flash: Analysis Methods and Arc Characteristics, Electric Power Research Institute, Palo Alto, CA, 2009.

EPRI 1022697, Distribution Arc Flash: Phase II Test Results and Analysis, Electric Power Research Institute, Palo Alto, CA, 2011.

IEEE 1584-2002, IEEE Guide for Performing Arc Flash Hazard Calculations.

IEEE C2-2012, National Electrical Safety Code.

Short, T. A., “Arc-Flash Analysis Approaches for Medium-Voltage Distribution,” IEEE Transactions on Industry Applications, vol. 47, no. 4, pp. 1902-1909, July-Aug. 2011. Approved version