1

Téma: Pomoc s programem

Dobry den,

nedavno sem poridil SDS Micro.
Nasel sem tu programek http://forum.merenienergie.cz//viewtopi … d=838#p838 do ktereho bych potreboval dosadit kus programku z wiki, ale nejak se v tom nemuzu prozatim vyznat. Poradi nekdo jak spravne dosadit do odkazovaneho programku?

Stavajici:
Doplnit o tento:

teplota_ok
{
  sys[231] = 0; //RELE1 vypnuto
  email_odeslan = 0; //povolime odeslani emailu pri pristim prekroceni limitu
}

hlasim_prekroceno
{
  //pokud jsem uz odeslal email, nebudu ho posilat znovu
  if (email_odeslan == 0)
  {
    //jeste jsem email neodeslal, takze...
    smtp_send('muj@email.cz','Kotel odstaven!!!', 'Akumulacky jsou nabite!!!');
    echo(sys[5],'.',sys[6],'.',sys[7],' - ',sys[8],':',sys[9],':',sys[10],'   Alarm odstaveni odeslany.'); //vypis na konzolu
    //a zapamatuji si odeslani
    email_odeslan = 1;
  }
  sys[231] = 1;  //RELE1 zapnuto
}

 smycka_rizeni:
 teplota = (sys[311] / 100);  //musime delit 100 aby to byly cele stupne Celsia
   if (teplota < limit - hystereze) teplota_ok();
   if (teplota > limit) hlasim_prekroceno()

Diky vsem za ochotu

2

Re: Pomoc s programem

Asi njk takto:

//deklaracia premennych
var doba_behu;          //ako dlho bezi program od posledneho restaru
var count_err_com;      //pocitadlo neprenesenych paketov
var ping_seq;           //sekvencia pre ping
var doba;               //premenna pre ping
var vlhko;
var teplo;
var tlako;
var den;
var mes;
var rok;
var hod;
var min;
var sek;
var teplota;
var limit;
var hystereze;
var email_odeslan;

init
{
 //zakladni nastaveni
 limit=2300;  //teplota *100 - cili 23st
 hystereze=50;  //teplota *100 - cili 0.5st
 email_odeslan=0;
 echoclear();
}

odosli                          //rutina pre odoslanie dat na web
{
 //nacitanie hodnot
 vlhko = sys[431];
 tlako = sys[433];
 count_err_com = sys[144];      //nacitanie poctu chyb

//teplo = sys[310];
label pockaj:
 if (sys[350] == 2)  //stav cidla teploty ok
{
 teplo = sys[310];
}
 else                //cidlo teploty nie je v stave ready
{
 goto pockaj;
}

//nacitanie premennych datumu a casu
 doba_behu = sys[3];
 den = sys[5];
 mes = sys[6];
 rok = sys[7];
 hod = sys[8];
 min = sys[9];
 sek = sys[10];


//spustim rucne IP (ziskane rucne) za xxx doplnit IP adresu a za domena doplnit vlastnu domenu
//nazvy premennych tempV a humV je nutne dodrzat!!! Su pouzite v programe index.php
 //http_get(xxx,xxx,xxx,xxx,'domena.sk','/adresar/index.php?tempV=',teplo,'&humV=',vlhko,'&pressV=',tlako);
 wait(5000);

//ak má server problém:
 if ((sys[65] != 1024)||(sys[75] != 200))   //server nie je schopny prijat data
{
  goto chyba_www_serveru;
}

//nie je problem, takze ok  a toto vypise na konzole
 echo(sys[5],'.',sys[6],'.',sys[7],' - ',sys[8],':',sys[9],':',sys[10],'   Data odoslane - OK.     Doba behu = ',doba_behu,'    Chyby comm. = ',count_err_com,'   P = ',tlako,'   T = ',teplo,'   H = ',vlhko);

//vsetko hotovo
 return;

label chyba_www_serveru:
//obsluha chyby - www server
 count_err_com++ ;                //pripocita 1 k hodnote chyb
 sys[144] = count_err_com;        //zapis poctu chyb do pamate

 //vypis na konzolu so stavovym kodom
 echo(sys[5],'.',sys[6],'.',sys[7],' - ',sys[8],':',sys[9],':',sys[10],'   Chyba komunikacie s www serverom, http: ', sys[75]);
 return;
}

mam_1_min
{
//toto je zavolane vzdy v prvej sekunde, odoslem data na web, presne kazdu minutu
odosli();
}

teplota_ok
{
  sys[231] = 0; //RELE1 vypnuto
  email_odeslan = 0; //povolime odeslani emailu pri pristim prekroceni limitu
}

hlasim_prekroceno
{
  //pokud jsem uz odeslal email, nebudu ho posilat znovu
  if (email_odeslan == 0)
  {
    //jeste jsem email neodeslal, takze...
    smtp_send('muj@email.cz','Kotel odstaven!!!', 'Akumulacky jsou nabite!!!');
    echo(sys[5],'.',sys[6],'.',sys[7],' - ',sys[8],':',sys[9],':',sys[10],'   Alarm odstaveni odeslany.'); //vypis na konzolu
    //a zapamatuji si odeslani
    email_odeslan = 1;
  }
  sys[231] = 255;  //RELE1 zapnuto
}

main
{
 sys[144] = 0;
 echo('   Start programu OK. ');        //vypis na konzolu

//pockam 1 sekundu na rozbehnutie systemu
 wait(1000);

label pingam:                           //kontrola dostupnosti vlastneho routeru
 ping_seq++;
 ping(192,168,2,1,ping_seq);            //IP routera v pripade potreby zmenit
 doba = sys[4];

cakacia_slucka:
 //uz uplynulo 500 msec?
 if (sys[4] - doba > 500) goto pingam;
 //uz prisla odpoved?
 if (sys[92] != 8) goto cakacia_slucka;

 echo ('   Ping na router OK');          //vypis na konzolu
label cakam_cas:
 if (sys[7] == 1970)                     //kontrola, ci uz je z NTP nacitany spravny datum a cas
{
  echo ('   Cakam na presny cas...');    //vypis na konzolu
  wait(1000);
  goto cakam_cas;
}
else
{
  echo(sys[5],'.',sys[6],'.',sys[7],' - ',sys[8],':',sys[9],':',sys[10],'   Presny cas OK. ');  //vypis na konzolu
}

// poslat email pri zapnuti - po vypadku a znovuzapnuti napajania
 smtp_send('adresa@domena.sk', 'Vypadok el. energie a meteostanice', 'Po vypadku je znova zapnuta dodavka elektrickej energie dna ',sys[5],'.',sys[6],'.',sys[7],' o ',sys[8],':',sys[9],':',sys[10],' hod.');
 echo(sys[5],'.',sys[6],'.',sys[7],' - ',sys[8],':',sys[9],':',sys[10],'   Email bol odoslany.'); //vypis na konzolu
 wait(1000);


label opakovat:
//pockam na patnastu sekundu v minute - nedoporucujem posielat v nultej sekunde, cas servera nemusi byt spravne nastaveny!
 if (sys[10] == 15) mam_1_min();

  //kontrola na teplotu a pripadne odeslani emailu
  teplota = sys[311];  //zadne deleni pracujeme s integery
  if (teplota < limit - hystereze) teplota_ok();
  if (teplota > limit) hlasim_prekroceno();

  wait(500);
  goto opakovat;
}