| Autor | Zpráva | ||
|---|---|---|---|
| jtfcobra Profil |
#1 · Zasláno: 3. 7. 2014, 15:13:26
Dotaz na výpočet impulzů z dne v PHP.
Jde mi o to že když dojde maximum impulzu na meraku např. 65xxx tak to jde znovu od nuly jak to spočítat kolik je za celý den máte někdo nápad? 00:00:00 0 00:45:09 1448 01:15:18 2459 01:45:25 3469 02:15:31 4466 02:45:38 5469 03:15:45 6465 03:45:51 7469 04:15:58 8480 04:46:05 9503 05:16:12 10526 05:46:18 11550 06:16:25 12565 06:46:32 13567 07:16:38 14570 07:46:45 15592 08:16:52 16599 08:46:59 17675 09:17:05 19299 09:47:12 20914 10:17:19 22531 10:47:25 24149 11:17:32 25756 11:47:39 27475 12:17:46 29099 12:47:52 30839 13:17:59 32909 13:48:06 35629 14:18:12 38522 14:48:19 41511 15:18:26 44508 15:48:33 47523 16:18:39 50525 16:48:46 53536 17:18:53 56463 17:49:00 58274 18:19:06 59606 18:49:13 60698 19:19:20 61797 19:49:26 62790 20:19:33 63785 20:49:40 64783 21:19:47 248 21:49:53 1247 22:20:00 2249 22:50:07 3238 23:20:13 4223 23:50:20 5213 23:59:00 5213 |
||
| juriad Profil |
Prostě budeš počítat, kolikrát se to protočilo.
<?php
function get_max($file) {
$rows = file($file);
$cycles = 0;
$previous = -1;
foreach ($rows as $row) {
list($time, $value) = explode(' ', $row);
$value = intval($value); # převedení na číslo
if ($value < $previous) {
$cycles++;
}
$previous = $value;
}
return $cycles * 65536 + $value;
}
echo get_max('input.txt'); |
||
| jtfcobra Profil |
Jaky bude vysledek tak jak jsi to napsal?
To bude jen pocet otocnei nebo to bude 65xxx + 5213 ? Moc děkuji za radu |
||
| juriad Profil |
V tomto případě je to 70749.
To číslo 65xxx je s vysokou pravděpodobností 65536 = 2^16, tedy jde o obyčejné aritmetické přetečení. Opraveno, přidán 9. řádek. |
||
| jtfcobra Profil |
Takle to mam do ted nactu zacatek a konec dne ale nenacitam vse jak to udelat abych spocital ty impulzy z celeho dne cca 48 zaznamu?
Moc diky <?php // Zacatek dne
$macadresa= $_GET["mac"];
$db = mysql_connect($hostname_test, $username_test, $password_test);
mysql_select_db($database_test,$db);
$qr=mysql_query("SELECT * FROM merenisystem.quido WHERE DATE(DATUM) = DATE(NOW()) AND `MAC` LIKE '%".$macadresa."%' ORDER BY ID ASC LIMIT 0,1",$db);
$rows=mysql_num_rows($qr);
while($data=mysql_fetch_array($qr)){
$caszacatek=$data["CAS"];
$datumzacatek=$data["DATUM"];
$impulzyzacatek1=$data["VSTUP1"];
$impulzyzacatek2=$data["VSTUP2"];
$impulzyzacatek3=$data["VSTUP3"];
$impulzyzacatek4=$data["VSTUP4"];
$impulzyzacatek5=$data["VSTUP5"];
$impulzyzacatek6=$data["VSTUP6"];
$impulzyzacatek7=$data["VSTUP7"];
$impulzyzacatek8=$data["VSTUP8"];
$impulzyzacatek9=$data["VSTUP9"];
$impulzyzacatek10=$data["VSTUP10"];
$impulzyzacatek11=$data["VSTUP11"];
$impulzyzacatek12=$data["VSTUP12"];
$impulzyzacatek13=$data["VSTUP13"];
$impulzyzacatek14=$data["VSTUP14"];
$impulzyzacatek15=$data["VSTUP15"];
$impulzyzacatek16=$data["VSTUP16"];
$impulzyzacatek17=$data["VSTUP17"];
$impulzyzacatek18=$data["VSTUP18"];
$impulzyzacatek19=$data["VSTUP19"];
$impulzyzacatek20=$data["VSTUP20"];
}
?>
Zacatek dne OK</p>
<p>
<?php // Konec dne
$macadresa= $_GET["mac"];
$db = mysql_connect($hostname_test, $username_test, $password_test);
mysql_select_db($database_test,$db);
$qr=mysql_query("SELECT * FROM merenisystem.quido WHERE DATE(DATUM) = DATE(NOW()) AND `MAC` LIKE '%".$macadresa."%' ORDER BY ID DESC LIMIT 0,1",$db);
$rows=mysql_num_rows($qr);
while($data=mysql_fetch_array($qr)){
$caskonec=$data["CAS"];
$datumkonec=$data["DATUM"];
$impulzykonec1=$data["VSTUP1"];
$impulzykonec2=$data["VSTUP2"];
$impulzykonec3=$data["VSTUP3"];
$impulzykonec4=$data["VSTUP4"];
$impulzykonec5=$data["VSTUP5"];
$impulzykonec6=$data["VSTUP6"];
$impulzykonec7=$data["VSTUP7"];
$impulzykonec8=$data["VSTUP8"];
$impulzykonec9=$data["VSTUP9"];
$impulzykonec10=$data["VSTUP10"];
$impulzykonec11=$data["VSTUP11"];
$impulzykonec12=$data["VSTUP12"];
$impulzykonec13=$data["VSTUP13"];
$impulzykonec14=$data["VSTUP14"];
$impulzykonec15=$data["VSTUP15"];
$impulzykonec16=$data["VSTUP16"];
$impulzykonec17=$data["VSTUP17"];
$impulzykonec18=$data["VSTUP18"];
$impulzykonec19=$data["VSTUP19"];
$impulzykonec20=$data["VSTUP20"];
}
?> |
||
| jtfcobra Profil |
Mám to takle je to dobrý nebo to mám nějak upravit
Ale problém je že třeba na začátku to má číslo 32939 v 0:01:00 takze jak to napsat aby to cetlo prvni cislo a pak se to z toho odecetlo <?php
function get_max($file) {
$rows = file($file);
$cycles = 0;
$previous = -1;
foreach ($rows as $row) {
list($time, $value) = explode(',', $row);
$value = intval($value); # převedení na číslo
if ($value < $previous) {
$cycles++;
}
$previous = $value;
}
return $cycles * 65536 + $value;
}
$db = mysql_connect($hostname_test, $username_test, $password_test);
mysql_select_db($database_test,$db);
$hledat= $_GET["mac"];
$hledat2= $_GET["merak"];
$datum= $_GET["rok"]."-". $_GET["mesic"]."-".$_GET["den"];
$result = mysql_query("SELECT * FROM merenisystem.quido WHERE `MAC` = '".$hledat."' AND `DATUM` LIKE '%".$datum."%'",$db);
$radku = mysql_num_rows($result);
printf("<table border=0 width=350px>\n<tr>\n");
printf("<td></td><td></td></tr>\n");
printf("<td bgcolor='#FF9900'><font color='black'>Datum,ulozeni</td><td bgcolor='#FF9900'><font color='black'>Cas,ulozeni</td><td bgcolor='#FF9900'><font color='black'>Impulzu</td></tr>\n");
$soubor=fopen("data.txt", "w+");
//$soubor = fopen("data.txt", "a+");
for($i=0;$i<$radku;$i++)
{
printf("<td bgcolor='#FFDAB9'> %s</td>\n",
mysql_result($result,$i,"datum"));
printf("<td bgcolor='#FFEFD5'> %s</td>\n",
mysql_result($result,$i,"cas"));
$cas = mysql_result($result,$i,"cas");
if ($hledat2 == 'VSTUP1') { $text = $cas.",".mysql_result($result,$i,"vstup1")."\n"; }
fwrite($soubor, $text);
if ($hledat2 == 'VSTUP1') { printf("<td bgcolor='#FFDAB9'> %s</td></tr>\n", mysql_result($result,$i,"vstup1"));}
}
fclose($soubor);
mysql_close($db);
printf("<td></td><td></td></tr>\n");
echo get_max('data.txt');
?> |
||
|
Časová prodleva: 4 dny
|
|||
| jtfcobra Profil |
#7 · Zasláno: 8. 7. 2014, 10:57:34
juriad:
Ahoj mohl by jsi mi poslat na sebe kontakt financne bych ti poslal odmenu a prosim o radu |
||
| juriad Profil |
#8 · Zasláno: 8. 7. 2014, 11:35:15
jtfcobra:
Zdejšímu fóru se věnuji ve volném čase, nežádám za své odpovědi odměnu. V dohledné době však nebudu mít skoro žádný čas. Zkusím ti to upravit. |
||
| juriad Profil |
<?php
$db = mysql_connect('localhost', 'root', 'root');
mysql_select_db('test', $db);
$hledat = $_GET["mac"];
$datum = $_GET["rok"] . "-" . $_GET["mesic"] . "-" . $_GET["den"];
# Jakého typu je sloupec DATUM? Jak v něm vypadají data?
# Správně by měl být typu DATETIME a žádný sloupec ČAS nemá existovat
$result = mysql_query("SELECT * FROM quido WHERE `MAC` = '" . mysql_real_escape_string($hledat) . "' AND `DATUM` LIKE '%" . $datum . "%'", $db);
#$result = mysql_query("SELECT * FROM quido", $db);
echo <<<END
<table border="0" width="350px">
<thead>
<tr>
<td>Datum,ulozeni</td>
<td>Cas,ulozeni</td>
<td>Impulzu</td>
</tr>
</thead>
<tbody>
END;
$prvni = TRUE;
$zacatek = 0;
$minule = -1;
$cyklu = 0;
while(($row = mysql_fetch_assoc($result)) !== FALSE) {
if ($prvni) {
$prvni = FALSE;
$zacatek = $row['vstup1'];
}
if ($row['vstup1'] < $minule) {
$cyklu++;
}
$minule = $row['vstup1'];
$pocet = $cyklu * 65536 + $row['vstup1'] - $zacatek;
echo <<<END
<tr>
<td>$row[datum]</td>
<td>$row[cas]</td>
<td>$pocet</td>
</tr>
END;
}
echo <<<END
</tbody>
</table>
END;
?>Pro tabulku v databázi: +----------+------------+--------+ | cas | datum | vstup1 | +----------+------------+--------+ | 12:28:29 | 2014-07-08 | 14417 | | 12:28:44 | 2014-07-08 | 43926 | | 12:28:49 | 2014-07-08 | 45310 | | 12:28:54 | 2014-07-08 | 29233 | | 12:28:57 | 2014-07-08 | 10236 | | 12:29:00 | 2014-07-08 | 29019 | | 12:29:03 | 2014-07-08 | 48848 | | 12:29:06 | 2014-07-08 | 26112 | | 12:32:31 | 2014-07-08 | 49554 | +----------+------------+--------+ Vrátí tabulku: <table border="0" width="350px"> <thead> <tr> <td>Datum,ulozeni</td> <td>Cas,ulozeni</td> <td>Impulzu</td> </tr> </thead> <tbody> <tr> <td>2014-07-08</td> <td>12:28:29</td> <td>0</td> </tr> <tr> <td>2014-07-08</td> <td>12:28:44</td> <td>29509</td> </tr> <tr> <td>2014-07-08</td> <td>12:28:49</td> <td>30893</td> </tr> <tr> <td>2014-07-08</td> <td>12:28:54</td> <td>80352</td> </tr> <tr> <td>2014-07-08</td> <td>12:28:57</td> <td>126891</td> </tr> <tr> <td>2014-07-08</td> <td>12:29:00</td> <td>145674</td> </tr> <tr> <td>2014-07-08</td> <td>12:29:03</td> <td>165503</td> </tr> <tr> <td>2014-07-08</td> <td>12:29:06</td> <td>208303</td> </tr> <tr> <td>2014-07-08</td> <td>12:32:31</td> <td>231745</td> </tr> </tbody> </table> Vím, že máš v databázi tabulku jiného tvaru, ale nevyznám se v tom bambiliony sloupců, nejspíš je úplně špatně navržená. |
||
| jtfcobra Profil |
Mohl by jsi mi prosim poslat na sebe mail abych ti poslal přístup do DB?
No mam to takto Mac, Datum Cas Vstup 1 Vstup 2 xxx, 1.1.2014 12:00 0 0 xxx, 1.1.2014 12:01 50 80 xxx, 1.1.2014 12:00 985 300 xxx, 1.1.2014 12:00 65536 0 xxx, 1.1.2014 12:00 0 0 xxx, 1.1.2014 12:00 1 0 xxx, 1.1.2014 12:00 2 0 Ale kdyz to udelam takto: Tak po každé když je tam nul tak se přičte 65536 a fakt nevim co s tím <?php // Vypocet impulzu celeho dne
function get_max($file) {
$rows = file($file);
$cycles = 0;
$previous = -1;
foreach ($rows as $row) {
list($time, $value) = explode(',', $row);
$value = intval($value); # převedení na číslo
if ($value < $previous) {
$cycles++;
}
$previous = $value;
}
return $cycles * 65536 + $value;
}
$macadresa= $_GET["mac"];
$db = mysql_connect($hostname_test, $username_test, $password_test);
mysql_select_db($database_test,$db);
$result=mysql_query("SELECT * FROM merenisystem.quido WHERE DATE(DATUM) = DATE(NOW()) AND `MAC` LIKE '%".$macadresa."%' AND CAS > TIME('00:09:00') ",$db);
$radku = mysql_num_rows($result);
//$qr=mysql_query("SELECT * FROM merenisystem.quido WHERE DATE(DATUM) = DATE(NOW()) AND `MAC` LIKE '%".$macadresa."%' ",$db);
$soubor1=fopen($_GET["mac"]."data1.txt", "w+");
$soubor2=fopen($_GET["mac"]."data2.txt", "w+");
$soubor3=fopen($_GET["mac"]."data3.txt", "w+");
$soubor4=fopen($_GET["mac"]."data4.txt", "w+");
$soubor5=fopen($_GET["mac"]."data5.txt", "w+");
$soubor6=fopen($_GET["mac"]."data6.txt", "w+");
$soubor7=fopen($_GET["mac"]."data7.txt", "w+");
$soubor8=fopen($_GET["mac"]."data8.txt", "w+");
$soubor9=fopen($_GET["mac"]."data9.txt", "w+");
$soubor10=fopen($_GET["mac"]."data10.txt", "w+");
for($i=0;$i<$radku;$i++)
{
$cas=mysql_result($result,$i,"CAS");
$datumzacatek=$data["DATUM"];
$text1 = $cas.",".mysql_result($result,$i,"VSTUP1")."\n";
fwrite($soubor1, $text1);
$text2 = $cas.",".mysql_result($result,$i,"VSTUP2")."\n";
fwrite($soubor2, $text2);
$text3 = $cas.",".mysql_result($result,$i,"VSTUP3")."\n";
fwrite($soubor3, $text3);
$text4 = $cas.",".mysql_result($result,$i,"VSTUP4")."\n";
fwrite($soubor4, $text4);
$text5 = $cas.",".mysql_result($result,$i,"VSTUP5")."\n";
fwrite($soubor5, $text5);
$text6 = $cas.",".mysql_result($result,$i,"VSTUP6")."\n";
fwrite($soubor6, $text6);
$text7 = $cas.",".mysql_result($result,$i,"VSTUP7")."\n";
fwrite($soubor7, $text7);
$text8 = $cas.",".mysql_result($result,$i,"VSTUP8")."\n";
fwrite($soubor8, $text8);
$text9 = $cas.",".mysql_result($result,$i,"VSTUP9")."\n";
fwrite($soubor9, $text9);
$text10 = $cas.",".mysql_result($result,$i,"VSTUP10")."\n";
fwrite($soubor10, $text10);
}
fclose($soubor1);
fclose($soubor2);
fclose($soubor3);
fclose($soubor4);
fclose($soubor5);
fclose($soubor6);
fclose($soubor7);
fclose($soubor8);
fclose($soubor9);
fclose($soubor10);
echo "1: ".get_max($_GET["mac"].'data1.txt')." !</br>";
echo "2: ".get_max($_GET["mac"].'data2.txt')." !</br>";
echo "3: ".get_max($_GET["mac"].'data3.txt')." !</br>";
echo "4: ".get_max($_GET["mac"].'data4.txt')." !</br>";
echo "5: ".get_max($_GET["mac"].'data5.txt')." !</br>";
echo "6: ".get_max($_GET["mac"].'data6.txt')." !</br>";
echo "7: ".get_max($_GET["mac"].'data7.txt')." !</br>";
echo "8: ".get_max($_GET["mac"].'data8.txt')." !</br>";
echo "9: ".get_max($_GET["mac"].'data9.txt')." !</br>";
echo "10: ".get_max($_GET["mac"].'data10.txt')." !</br>";
$impulzykonec1=get_max($_GET["mac"].'data1.txt');
$impulzykonec2=get_max($_GET["mac"].'data2.txt');
$impulzykonec3=get_max($_GET["mac"].'data3.txt');
$impulzykonec4=get_max($_GET["mac"].'data4.txt');
$impulzykonec5=get_max($_GET["mac"].'data5.txt');
$impulzykonec6=get_max($_GET["mac"].'data6.txt');
$impulzykonec7=get_max($_GET["mac"].'data7.txt');
$impulzykonec8=get_max($_GET["mac"].'data8.txt');
$impulzykonec9=get_max($_GET["mac"].'data9.txt');
$impulzykonec10=get_max($_GET["mac"].'data10.txt');
?>
Vypocet impulzu OK</p>
<p> |
||
|
Časová prodleva: 6 měsíců
|
|||
| jtfcobra Profil |
Tak prosím o radu zkoušel jsem od www.cem1.cz/cron2015_vypadek.php?mac=00204AF39358&rok=2015&mesic=01&den=15
juriad a bohuzel nefunguje prosim o radu kdo by mnel nejaky typ Přikládám ukázku z celého dne kde potřebuji vypočítat ty impulzy počítadlo umí 65536 impulzu a pak se přehopne od začátku je tam vidět vypadnutí elektriky a výmaz impulzu a znova od zacatku 10:42 čas http://cem1.cz/ukazka.pdf Poradíte? |
||
| Alphard Profil |
#12 · Zasláno: 15. 1. 2015, 23:20:15
|
||
| jtfcobra Profil |
#13 · Zasláno: 16. 1. 2015, 10:58:41
Alphard:
Poslal by jsi mi na sebe mail poslal bych ti cele PHP?pokud by to šlo a pomohl by jsi mi to vyřešit? |
||
| Alphard Profil |
jtfcobra [#13]:
Nebudu z toho dělat chat, ani řešit problémy soukromě, cítil bych pak nějaké závazky a mám dost jiné práce... Je možné uvést kontakt, případně i nějakou odměnu a umístit inzerát do Prací a zakázek. Pokud vás tato možno zaujala, nezakládejte duplicity, ale napište sem potřebné informace a já to přesunu. |
||
| jtfcobra Profil |
Zasilam zdrojovy kod:
www.cem1.cz/cron2015.txt DB: http://cem1.cz/ukazka.pdf Pokud by to slo nejak napsat v cyklech abych tam nemel takovy paskvil bylo by to super. Za kazdou radu jsem rad... |
||
| Alphard Profil |
#16 · Zasláno: 16. 1. 2015, 11:43:48
jtfcobra [#15]:
Takhle se nedořešíte ani za dalšího půl roku. Když už by vám někdo chtěl pomoci a věnovat tomu čtvrt hodiny, tak mu nepřehledná databáze v pdf znepříjemní jakékoliv snahy. Lepší by bylo vyexportovat tu tabulku do SQL podoby a tu dát k dispozici. Z SQL exportu je 1. zřejmá struktura a 2. stylem copy&paste lze za 5 sekund vytvořit testovací prostředí. |
||
| jtfcobra Profil |
#17 · Zasláno: 16. 1. 2015, 12:58:00
Děkuji za radu připravím to
|
||
|
Časová prodleva: 12 let
|
|||
0