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: 9 let
|
0