1

Téma: cidla teploty

Mam pripojenych 9 cidel.
Napsal sem si programek na hlidani teploty na urcitem cidle a zaslani na mejl.
Otestoval sem, vypadalo ok. V noci me to zacala rvat na mejl - Teplota na cidle v akumulacka_up: 167772°C je nad 90°C .
Data si ukladam co 5 min. do databaze. Zadne takove teploty ulozene nemam.
Tusite co to pri alaramu hazi z nemyslnou teplotu?

2

Re: cidla teploty

Díky rušení se občas stane že čidlo vypadne, nebo zobrazí blbost. Samozřejmostí u každého měření by měla být kontrola platnosti naměřené hodnoty. To znamená alespoň test jestli ve statusu daného čidla je platná hodnota (2 NEBO 8).  Já dál u každýho měření dělám porovnání s předchozí naměřenou hodnotou a pokud je nově naměřená hodnota Hodně odlišná tak novou ignoruju. No a nakonec když už si pamatuju předchozí hodnotu tak novou hodnotu filtruju. To zjednodušeně znamená že nová hodnota nenahradí, ale jen změní hodnotu té předchozí, o kolik to mám volitelný :-) No a potom už takový nepříjemnosti nejsou...

3

Re: cidla teploty

Mohla by byt nejaka ukazka jak to resit?

4

Re: cidla teploty

Stačí hledat zde na fóru ale v stručnosti je to o délce a materiálu kabelu na kterém jsou čidla připojeny. Taktéž hraje roli souběh se silovými vodiči případně nevhodné zapojení čidel na kabelu

5 Naposledy upravil: Clouseau (2013-02-06 07:48:15)

Re: cidla teploty

Takže takhle nějak
Mám tam jen dva teploměry, každý je ošetřen stejně. Pro větší počet už by bylo dobrý na to udělat smyčku...

var teplota11; //teplota nefiltrovana
var teplota1; //teplota vyfiltrovaná
var filterdivide; //delitel filtru - cim vetsi hodnota, tim vice to bude filtrovat
var filterdivide1; //pomocná konstanta dělitele filtru

goteplota1
{
 teplota11=sys[310];
 if (sys[350]==2 || sys[350]==8) {
    if (teplota11<-2867200) {  //uprava teplomeru pokud je hodnota pod nulou a snimac typu DS18S20 (DS1820)
       teplota11+=2867200;
    }
    if (teplota11+10000<teplota1 || teplota11-10000>teplota1) { //pokud je teplota rozdilna o +-100 od minule
       teplota11=teplota1;
    }
 } else {
   teplota11=teplota1;
 }

 filterdivide1=filterdivide+1;
 teplota1=teplota1*filterdivide+teplota11;
 teplota1=teplota1/filterdivide1;
}

init
{
 filterdivide=0; //Vypni filtry
 teplota1=0;
 goteplota1();
 filterdivide=10; //Zapni filtry
 }

main
{
goteplota1();
echo (teplota1);
}