среда, 8 марта 2017 г.

Запас газа в газопроводе


Классика жанра – рассчитать запас газа на выведенном в ремонт участке магистрального газопровода  или в сосуде, находящемся под давлением. Предполагается, что на участке магистрального газопровода по всей его длине уже выровнялись давление и температура. Сначала приведу формулу, а потом поговорим про занимательное:
Примечание. В предыдущих заметках приведены все недостающие для реализации расчета зависимости.
Собственно, что для сосуда, что для участка магистрального газопровода формула одна и та же, в любом случае нужно знать геометрический объем оборудования. Занимательными же в этой формуле являются условия приведения газа. По какому конечному состоянию Вы будете считать объем газа?
Существует несколько условий приведения декомпримированного газа. По давлению между ними разночтений нет, все приводится к 760 мм рт.ст.. А вот по температуре газа можно выбрать несколько вариантов:
·        Нормальные условия (международные): газ приводится к температуре 0 градусов по Цельсию.
·        Стандартные условия (международные): газ приводится к температуре 25 градусов по Цельсию.
·        Атмосферные условия (авиационные): газ приводится к температуре 15 градусов по Цельсию.
·        Атмосферные условия (принятые в газовой промышленности СССР/РФ по ГОСТ 2939-63): газ приводится к температуре 20 градусов по Цельсию.
В зависимости от применяемых условий приведения, результат расчета будет различен. Какие условия приведения выбрать? Они все равноценны, а проблему выбора Вам придется решать с Вашим контрагентом (если это сторонняя организация) или следовать исторической традиции Вашей организации.
Расчет в онлайн-режиме для участка магистрального газопровода (с указанием длины и внутреннего диаметра трубы) Вы можете сделать на странице сайта:
а для сосуда, находящегося под давлением (то же, но с вводом геометрического объема) на другой странице:

Серверная часть расчета (PHP):
<?php
// Внимание!
// проверки на адекватность исходных данных
// выполняются на стороне клиента!
//
header('Content-Type^ text/html; charset=utf-8');
if ($_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest'){
        if ($_POST){
               // исходные данные из приложения
               $ro = $_POST['ro'];// плотность газа абсолютная, кг/м3
               $pn  = $_POST['pn'];// избыточное давление газа, кгс/см2
               $prt  = $_POST['prt'];// атмосферное давление, мм рт.ст.
               $tn  = $_POST['tn'];// температура газа, по Цельсию
               $al  = $_POST['al'];// длина участка МГ, м
               $ad  = $_POST['ad'];// внутренний диаметр трубы, мм
               $privp  = $_POST['privp'];// давление приведения, мм рт.ст.
               $privt  = $_POST['privt'];// температура приведения, по Цельсию
               // децимальный разделитель
               $ro = str_replace(",", ".", $ro);
               $pn = str_replace(",", ".", $pn);
               $prt = str_replace(",", ".", $prt);
               $tn = str_replace(",", ".", $tn);
               $al = str_replace(",", ".", $al);
               $ad = str_replace(",", ".", $ad);
               $privp = str_replace(",", ".", $privp);
               $privt = str_replace(",", ".", $privt);
               
               // приведение размерности
               $tn = $tn+273.15;// температура газа по Кельвину
               $ad = $ad/1000;// диаметр трубы в м
               $patm=$prt*0.001359511;// атмосферное давление, кгс/см2
               $privp=$privp*0.001359511;// давление приведения, кгс/см2
               $privt = $privt+273.15;// температура приведения по Кельвину
               // загрузка функций
               function f_delta($ro) {
               // относительная плотность газа
               // ro - плотность газа, кг/м3
               $delta = $ro/1.2044;
               return $delta;
               }
               function f_z($delta, $pn, $patm, $tn){
               // коэффициент сжимаемости газа
               // delta - дельта
               // pn - избыточное давление газа, кгс/см2
               // patm - атмосферное давление, кгс/см2
               // tn - температура газа, по Кельвину
               $pabs = $pn+$patm;// абсолютное давление
               $pmpa = $pabs*0.0980665;// перевод кгс/см2 в МПа
               $z = 1-((10.2*$pmpa-6)*(0.345/100*$delta-0.446/1000)+0.015)*(1.3-0.0144*($tn-283.2));
               return $z;     
               }
               function f_gcount($v, $pabs, $tn, $privp, $privt, $z){
               // запас газа в замкнутом геометрическом объеме, м3
               // v - геометрический объем, м3
               // pn - избыточное давление газа, кгс/см2
               // tn - температура газа, по Кельвину
               // patm - давление приведения, кгс/см2
               // tatm - температура приведения, по Кельвину
               // z - коэффициент сжимаемости газа
               //$pabs = $pn+$patm;// абсолютное давление газа, кгс/см2
               $gcount = ($v*$pabs*$privt)/($tn*$z*$privp);
               return $gcount; 
               }
               // расчет
               $delta = f_delta($ro);// относительная плотность газа
               $z = f_z($delta, $pn, $patm, $tn);// коэффициент сжимаемости
               $s = (3.141593*$ad*$ad)/4;// площадь сечения
               $v = $s*$al;// геометрический объем
               $pabs = $pn+$patm;// абсолютное давление
               $gcount = f_gcount($v, $pabs, $tn, $privp, $privt, $z);// запас газа, м3
               // вывод результата расчета
               if ($gcount<100){
                       $res = number_format($gcount, 3);
                       $res = str_replace(".",",",$res);
                       print '<p>Запас газа в локализованном участке газопровода: '.$res.' м<sup>3</sup></p>';    
               } else {
                       $gcount = $gcount/1000;
                       $res = number_format($gcount, 3);
                       $res = str_replace(".",",",$res);
                       print '<p>Запас газа в локализованном участке газопровода: '.$res.' тыс.м<sup>3</sup></p>';
               }              
        }
}
?>
?>