Страница 1 из 1

Временной сдвиг на графике

Добавлено: Ср окт 02, 2013 12:11 pm
tpa58
Такая проблема - формирую график следующим запросом:

Код: Выделить всё

<img src="/pChart/?p=GRU2-1.I1&type=1h&unit=А">
график получаю, но с отставанием значений на 40 минут. Т.е. ось времени полностью корректна, но точки на графике смещены влево. Временная зона выставлена, с временем системы (Windows, MajorDoMo обновлен) совпадает. В истории переменной время правильное...

Re: Временной сдвиг на графике

Добавлено: Ср окт 02, 2013 12:45 pm
sergejey
очень и очень странно. так сходу даже предположить не могу в чём может быть дело. если в истории значений время правильное, то и тут должно быть нормально всё. а что выводится если открыть в браузере:
/pChart/?p=GRU2-1.I1&type=1h&unit=А&op=log
?

по идее выведется история, но если она корректная, то надо копать дальше.
в общем, сделайте пожалуйста вывод графика и плюс историю переменной как я написал (можно в текстовом файле если значений много) -- чтобы можно было сопоставить одно с другим.

Re: Временной сдвиг на графике

Добавлено: Чт окт 03, 2013 8:15 am
tpa58
График и история переменной:

Код: Выделить всё

2013-10-03 09:04:25: 79.5
2013-10-03 09:03:05: 75.4
2013-10-03 09:01:45: 78.9
2013-10-03 09:00:24: 68.3
2013-10-03 08:59:04: 58.3
2013-10-03 08:57:44: 83.4
2013-10-03 08:56:24: 78.7
2013-10-03 08:55:03: 84.3
2013-10-03 08:53:43: 87.3
2013-10-03 08:52:23: 79.5
2013-10-03 08:51:02: 77.7
2013-10-03 08:49:42: 77.8
2013-10-03 08:48:21: 88.7
2013-10-03 08:47:01: 67.4
2013-10-03 08:45:41: 60.2
2013-10-03 08:44:20: 84.5
2013-10-03 08:43:00: 83.2
2013-10-03 08:41:40: 59.9
2013-10-03 08:40:27: 59.5
2013-10-03 08:39:07: 56.5
2013-10-03 08:37:47: 56.6
2013-10-03 08:36:27: 82
2013-10-03 08:35:06: 66
2013-10-03 08:33:46: 56.5
2013-10-03 08:32:25: 53.7
2013-10-03 08:31:05: 57.1
2013-10-03 08:29:45: 61.2
2013-10-03 08:28:25: 24.4
2013-10-03 08:27:05: 25.2
2013-10-03 08:25:45: 13.5
2013-10-03 08:24:26: 10.6
2013-10-03 08:23:08: 10.3
2013-10-03 08:21:50: 10.3
2013-10-03 08:20:32: 10.3
2013-10-03 08:19:14: 11.4
2013-10-03 08:17:56: 8.8
2013-10-03 08:16:38: 8.8
2013-10-03 08:15:20: 8.5
2013-10-03 08:14:02: 8.8
2013-10-03 08:12:44: 8.3
2013-10-03 08:11:25: 8.5
2013-10-03 08:10:07: 8.8
2013-10-03 08:08:49: 9.5
2013-10-03 08:07:31: 9.5
2013-10-03 08:06:12: 9.7
Заметил еще одну особенность, из-за отсутствия питания система не работала, после включения отставания графика было примерно на 1 час, постепенно сократилось до 40 минут...

Re: Временной сдвиг на графике

Добавлено: Чт окт 03, 2013 10:47 am
martynovis
Тоже периодически графики как будто сдвигаются на 50% влево. Но бывает не всегда. И текущие показания по середине графика +-. хотя в базе все ок.

Re: Временной сдвиг на графике

Добавлено: Вт окт 08, 2013 9:50 am
ksgroup
Покопавшись в скрипте генерирующем данные для построения графика обнаружил что если в данных имеется "провал" в значениях. Ну в смысле у вас значения в базу писались скажем раз в 10 минут, а потом вдруг по каким то причинам не заполнялись в течении какого то времени и после этого вновь начали заполняться в базу. Короче на графике данные поступившие после "провала" отображаются уже со сдвигом.

Если у вас график строится например за 24 часа, а значения в базе начали заполняться позже (например 3 часа назад) график тоже получается со сдвигом.

Вся проблема в том что программа отвечающая за расстановку значений по графику не вставляет повторы значений в случае "провала" в данных, но она почему то это делает в конце графика там где должны быть текущие значения.

Извините за сумбурное описание - пишу на работе, а за спиной начальство :)

Re: Временной сдвиг на графике

Добавлено: Вт окт 08, 2013 10:02 am
martynovis
ksgroup писал(а):Короче на графике данные поступившие после "провала" отображаются уже со сдвигом.
Очень похоже на правду.

Re: Временной сдвиг на графике

Добавлено: Вт окт 08, 2013 1:36 pm
sergejey
Спасибо за информацию про "провал" -- думаю, что в этом дело. Разберёмся )

Re: Временной сдвиг на графике

Добавлено: Вт окт 08, 2013 2:59 pm
ksgroup
sergejey писал(а):Спасибо за информацию про "провал" -- думаю, что в этом дело. Разберёмся )
Я для себя разобрался примерно так:

Код: Выделить всё

   while($start_time<$end_time) {

       $value = 0;
       $ind=0;

      for($i=0;$i<$total_values;$i++) {
       		if ($history[$i]['UNX']>=$start_time && $history[$i]['UNX']<=$start_time+$period) {
            		$value += ($history[$i]['VALUE']*1);
            		$ind++;
      		}
        	if ($ind == 0){ 
			$value = $old_value; 
		}else{
        		$value = round($value / $ind,2);
			$old_value = $value;
		}

      $values[]=$value;


     $start_time+=$period;
     $px+=$px_per_point;
     $px_passed+=$px_per_point;

     if ($px_passed>30) {
      		if (date('Y-m-d', $start_time)!=$dt) {
       			$hours[]=date('d/m', $start_time);
       			$dt=date('Y-m-d', $start_time);
      		} else {
       			$hours[]=date('H:i', $start_time);
      		}
      		$px_passed=0;
     } else {
      		$hours[]='';
     }

   }
Вместо:

Код: Выделить всё

   while($start_time<$end_time) {
     if ($next_index<$total_values) {
      for($i=$next_index;$i<$total_values;$i++) {
       $next_index=$i+1;
       if ($history[$i]['UNX']>=$start_time) {
        if ($approx=='sum') {
         $value=array_sum($temp_array);
        } elseif ($approx=='max') {
         $value=max($temp_array);
        } else {
         $value=round(array_sum($temp_array)/count($temp_array), 2);
        }
        $temp_array=array($history[$i]['VALUE']);
        break;
       } else {
        $temp_array[]=$history[$i]['VALUE'];
       }
      }
     } else {
       // last known value
      $value=$history[$total_values-1]['VALUE'];
     }
     $values[]=$value;
     if ($px_passed>30) {
      if (date('Y-m-d', $start_time)!=$dt) {
       $hours[]=date('d/m', $start_time);
       $dt=date('Y-m-d', $start_time);
      } else {
       $hours[]=date('H:i', $start_time);
      }
      $px_passed=0;
     } else {
      $hours[]='';
     }
     $start_time+=$period;
     $px+=$px_per_point;
     $px_passed+=$px_per_point;
   }
Вот два графика составленных этими процедурами:
Изображение
Изображение
Верхний создан моей процедурой.
Сереж, я думаю ты знаешь где эта процедура находится. Я переделал ее под себя, но и в таком виде мне не очень нравится как она работает. Указал ее здесь просто как ориентир где копать. Я не программист, особенно в PHP. Уверен у тебя получится в итоге лучше.