Страница 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. Уверен у тебя получится в итоге лучше.