Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Электротехническая задача средствами РНР
 
 автор: coloboc66   (20.07.2010 в 17:29)   письмо автору
 
 

Меряется прибором сопротивление и напряжение каждой фазы в трёхфазной электрической линии:
Сервер получает данные:

//сoпротивления фаз: 
$Ra=$_REQUEST['Ra'];
$Rb=$_REQUEST['Rb'];
$Rc=$_REQUEST['Rc'];
//напряжения фаз: 
$Ua=$_REQUEST['Ua'];
$Ub=$_REQUEST['Ub'];
$Uc=$_REQUEST['Uc'];

Вычисляет токи в фазах:

$Ia=$Ua/$Ra;;
$Ib=$Ub/$Rb;
$Ic=$Uc/$Rc;

Теперь нужно определить, какой из этих токов самый меньший, и отправить в функцию вычисления погрешности соответствующие ему $Ra и $Ua (либо $Rb и $Ub, либо $Rc и $Uc).
Вот тут я и застопорился. Проблема в том, что эти токи могут быть не только разными, но и одинаковыми попарно, или все вместе. Не могу разработать алгоритм выбора $Rфазы и $Uфазы, соответствующих минимальному току.

  Ответить  
 
 автор: Trianon   (20.07.2010 в 18:05)   письмо автору
 
   для: coloboc66   (20.07.2010 в 17:29)
 

Если следующий по величине ток отличается от минимума меньше, чем на определенную уставку, очевидно стоит рассчитать погрешность и для минимума, и для фазы с незначительно отличающимся током, и после этого выбрать бОльшее значение (из получившейся пары погрешностей.
Или я что не так понял?

  Ответить  
 
 автор: coloboc66   (20.07.2010 в 20:08)   письмо автору
 
   для: Trianon   (20.07.2010 в 18:05)
 

Функцию расчёта погрешности я напишу сам (надеюсь:)), нужно просто из трёх пар значений U и R ( одна пара для каждой фазы) выбрать ту пару, которая соответствует минимальному фазному току (I =U/R). Но проблема в том, что среди этих пар могут быть одинаковыми все соответствующие значения, или две одинаковых, а одна - нет, в разных вариантах, например Ua=220 Ub=220 Uc=220 Ra=0,1 Rb=0,2 Rc=0,2 . И как эти варианты ВСЕ предусмотреть?

  Ответить  
 
 автор: sim5   (20.07.2010 в 20:47)   письмо автору
 
   для: coloboc66   (20.07.2010 в 20:08)
 

U1=100 R1=50 I1=2
U2=100 R1=50 I2=2
Можно удалить дубликаты дающие одинаковые значения?

  Ответить  
 
 автор: coloboc66   (20.07.2010 в 22:09)   письмо автору
 
   для: sim5   (20.07.2010 в 20:47)
 

Может и можно...
Хорошо, объясню мой алгоритм работы вручную (на калькуляторе):
1. Прибором измеряю сопротивления каждой петли фаза-ноль в трёхфазной линии (Ra, Rb, Rc) и фазные напряжения по каждой фазе (Ua, Ub, Uc). Все сопротивления и напряжения могут принимать любые значения в определённых диапазонах значений, ограниченных характеристиками прибора (в данный момент эти диапазоны нам не особо важны).
2. На калькуляторе рассчитываю фазные токи Ia=Ua/Ra, Ib=Ub/Rb, Ic=Uc/Rc.
3. ГЛАЗАМИ смотрю, какой из этих токов наименьший, и рассчитываю погрешность для тока этой фазы, используя алгоритм расчёта погрешности в соответствии с паспортом прибора по принципу:
dI(%) ~ dU(%) + dR(%)
где dU - погрешность по напряжению, расчитывается от Ub,
dR - погрешность по сопротивлению, расчитывается от Rb.
Это если, к примеру, наименьшим был ток Ib.
Ну и так соответственно для любой другой фазы, если ток был в ней наименьшим....
Если токи во всех фазах были одинаковы, то для расчёта погрешности использую просто фазу А: Ua и Ra (ну или можно использовать любую из пар U и R).
Если два тока одинаковы, но меньше третьего, можно выбрать любой из этих двух.
Возможно, ещё какие-то варианты комбинаций я упустил...
Глазами легко увидеть, какие значения U и R нужно брать для дальнейших расчётов, а скрипту это условие корректно задать не могу пока...

  Ответить  
 
 автор: sim5   (20.07.2010 в 23:08)   письмо автору
 
   для: coloboc66   (20.07.2010 в 22:09)
 

Ну во-первых, если это передается ссылкой, то я бы передавал значения так:
http://url?f[a][u]=uval&f[a][r]=rval&f[b][u]=uval&f[b][r]=rval&f[c][u]=uval&f[c][r]=rval

или если это передача формой, то соотвественно бы именовал поля ее, чтобы на сервере получить массив вида ($_GET['f'] или POST):
Array
(
    [a] => Array
        (
            [u] => 100
            [r] => 90
        )

    [b] => Array
        (
            [u] => 100
            [r] => 90
        )

    [c] => Array
        (
            [u] => 100
            [r] => 40
        )

)

То есть распределенные по фазам значения напряжения и сопротивления, как вложенные массивы. Затем функцией array_diff_assoc() можно проверить, если среди них пары одинаковых напряжение=>сопротивление, и если есть, то удалить дубликаты из массива. Ну а затем примерно так:
<?
//далее $f - это полученный массив $_GET['f']
//получить токи фаз как отдельный массив
foreach($f as $key=>$val$i[$key] = $val['u']/$val['r'];
//получаем количество значений расчитанных токов
//по минимальному значению
$k array_keys(array_intersect($i, array(min($i))));
//вот тут и делайте как вам хочется, 
//если три значения минимальных (одинаковы),
//то используйте для расчета любую из фаз
//или что-то иное потребуется, 
//в общем далее можно все получить, на всякий случай 

//а теперь получить параметры фазы/фаз минимального значения
if(count($k)==1) echo "U$k[0] min = " $f[$k[0]]['u']. "V, R$k[0] min = " $f[$k[0]]['r'] . "Om"//например, одно значение
else {
  
//здесь обход по ключу фазы массива $f нескольких фаз
  //для получения их параметров  
}

Типа этого.

PS. Кстати, если одинаковы токи всех трех фаз, вы берете любую из них для дальнейших вычислений. Тогда какая вам разница сколько совпадений минимальных? Если значение одно, вы берете одну фазу, если три, любую из трех, если два, любую из двух. Я правильно понимаю? Тогда в итоге вам всегда надо получать фазу F[K[0]], и удалять одинаковые пары из исходного массива нет смысла. Я думал, что 100/50=2 и 80/40=2, и хотя такую сеть трудно представить, но стоит рассматривать все "если", вот из этого и исходил, а так...

  Ответить  
 
 автор: sim5   (20.07.2010 в 18:50)   письмо автору
 
   для: coloboc66   (20.07.2010 в 17:29)
 

Узнать надо только минимальное значение?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования