1 Naposledy upravil: manav (2015-05-08 05:15:25)

Téma: Řízení čerp. u krb. vložky se zachováním pův. htm s pípáním a vypisem

Řízení čerpadla u krbové vložky se zachováním původního htm  od Laznet s pípáním a vypisem
pípá to přes pwm na reprák (protože se mi to k ničemu jinému v této nefunkční podobě nehodí) u stupně nahoru a stupně dolů, lehce s to upravíte a delší tón je u vypnutí nebo zapnutí čerpadla (pípání asi jako staré digitálky).  Logu je ve 3 sloupcích čas a teplota, případně přepnutí čidla. je tam spousta balastu, ale zatím jsem to nemazal, může se to hodit. využívám původní sds vzor, nahraný v micro light E rs232.

// ***********************************************************************************************************
// (c) copyright LazNet s.r.o.
// www.onlinetechnology.cz
//
// Licence pro: LazNet s.r.o.
//
// Tento software je chránìn autorským právem.
// Uživatel není oprávnìn odstranit ochrannou známku autorských práv (copyright).
// Uživatel není oprávnìn software kopírovat, pronajímat, pùjèovat nebo jiným zpùsobem umožnit tøetím osobám jeho využití.
// Uživatel není oprávnìn zdrojový kód nebo jeho èásti kopírovat èi poskytnout tøetím osobám.
// Uživatel je povinen užívat software v souladu s platnými právními pøedpisy a licenèními podmínkami.
// ************************************************************************************************************

// ***********  upozorneni  **************
// pouziva se RAM[300-308] pro akt.teploty
// pouziva se RAM[310-318] pro min.teploty
// pouziva se RAM[320-328] pro max.teploty
// pouziva se RAM[330-338] pro dolni mezni teploty pro email
// pouziva se RAM[340-348] pro horni mezni teploty pro email
// pouziva se RAM[350-358] pro informaci o odeslanem emailu

var _sys;   //ukazatel do sys
var _ram;   //ukazatel do ram
var _ramd;  //dolni mezni hodnoty
var _ramh;  //horni mezni hodnoty
var _rame;  //email odeslan=1
var _tmo;   //timeout pro edeslani dalsiho emailu
var _memo;  //sys[100-8]
var _web;   //sys[140-8]
var _pom;   //pomocna pro vsechno
var _tep;   //teplota ve stupnich (/100)

setparam
{
 // sys[140-7]
 _sys=140;
 _ramd=330;
 _ramh=340;

 label setparam_1:
 _pom=sys[_sys]/1000;
 if (_pom<200) {
  ram[_ramh]=_pom-100;
  ram[_ramh]=-1*ram[_ramh];
 } else {
  ram[_ramh]=_pom-200;
 }
 _pom=sys[_sys] % 1000;
 if (_pom<200) {
  ram[_ramd]=_pom-100;
  ram[_ramd]=-1*ram[_ramd];
 } else {
  ram[_ramd]=_pom-200;
 }
 _sys++;
 _ramd++;
 _ramh++;
 if (_sys<148) goto setparam_1;
}

savetopm
{
 _pom=0;
 _memo=100;
 _web=140;

 label savetopm_1:
 if (sys[_memo]!=sys[_web]) {
  sys[_memo]=sys[_web];
  echo('Hodnota ', sys[_web], ' ulozena do permanentni pameti');
  _pom=1;
 }
 _memo++;
 _web++;
 if (_memo<108) goto savetopm_1;
 if (_pom==1) setparam();  //nastaveni parametru z web promennych
}

nactitemp
{
 _sys=310;
 _ram=300;
 label nactitemp_1:
 if (sys[_sys]>0 && sys[_sys]<20000) {
  ram[_ram]=sys[_sys];
  _pom=_ram+10;
  if (ram[_ram]<ram[_pom]){
   ram[_pom]=ram[_ram];
  }
  _pom=_ram+20;
  if (ram[_ram]>ram[_pom]){
   ram[_pom]=ram[_ram];
  }
 }
 _sys++;
 _ram++;
 if (_sys<318) goto nactitemp_1;
}

kontrtemp
{
 _ram=300;
 _ramd=330;
 _ramh=340;
 _rame=350;
 label kontrtemp_1:

 _pom=_ram-299;
 _tep=ram[_ram]/100;  //akt.teplota ve stupnich
 if (_tep<ram[_ramd] && ram[_rame]<sys[3]){
  echo('Tepl cid ', _pom, ' je < nez nast. (', _tep);
  smtp_send(text[100], 'SDS panel teplot', 'Teplota cidla ', _pom, ' je nizsi nez nastavena (', _tep, ' st.C)');
  ram[_rame]=sys[3]+8640000;  //az za 24h se odesle dalsi email pokud se teplota nevrati
 }
 if (_tep>ram[_ramh] && ram[_rame]<sys[3]){
  echo('Tepl cid ', _pom, ' je > nez nast. (', _tep, ' st.C)');
  smtp_send(text[100], 'SDS panel teplot', 'Teplota cidla ', _pom, ' je vyssi nez nastavena (', _tep, ' st.C)');
  ram[_rame]=sys[3]+8640000;  //az za 24h se odesle dalsi email pokud se teplota nevrati
 }
 if (_tep>ram[_ramd] && _tep<ram[_ramh]){
  _pom=_tmo*100;
  ram[_rame]=sys[3]+_pom;  //timeout
 }

 _ram++;
 _ramd++;
 _ramh++;
 _rame++;
 if (_ram<308) goto kontrtemp_1;
}

// IIIIIIIIIIIIIIIIIIIIIIIIII INIT IIIIIIIIIIIIIIIIIIIIIIIIII

init
{
 echo('-- INIT --');

 // ****************** toto nastavi uzivatel jak potrebuje **********************************
 
 // casova prodleva pro odeslani dalsiho emailu - pocita se od navratu do "normalnich" teplot
 _tmo=300;  //sekund
 // nastaveni emailu - zmente pouze text mezi apostrofy
 sprintf(text[100], 'uzivatel@sluzba.cz');

 // *****************************************************************************************

 //vynulovat ram
 _ram=300;
 label init_1:
 ram[_ram]=0;
 _ram++;
 if (_ram<358) goto init_1;
 //nastavit min
 _ram=310;
 label init_2:
 ram[_ram]=9900;
 _ram++;
 if (_ram<318) goto init_2;
 //nastavit max
 _ram=320;
 label init_3:
 ram[_ram]=-9900;
 _ram++;
 if (_ram<328) goto init_3;

 // dle parametru nastavit web promenne sys[140-141]
 if (sys[100]==0 && sys[101]==0 && sys[102]==0 && sys[103]==0 && sys[104]==0 && sys[105]==0 && sys[106]==0 && sys[107]==0) {
  sys[140]=299199;  //+99 a -99
  sys[141]=299199;
  sys[142]=299199;
  sys[143]=299199;
  sys[144]=299199;
  sys[145]=299199;
  sys[146]=299199;
  sys[147]=299199;
 } else {
  sys[140]=sys[100];
  sys[141]=sys[101];
  sys[142]=sys[102];
  sys[143]=sys[103];
  sys[144]=sys[104];
  sys[145]=sys[105];
  sys[146]=sys[106];
  sys[147]=sys[107];
  setparam();
 }
}

// promenne pro web z puvodniho makra

DoGrafu
 {
 //savetopm();   //ulozeni parametru z web promennych do permanent memory
 nactitemp();  //nacte aktualni teploty
 //kontrtemp();  //kontrola teplot na mezni hodnoty a odeslani emailu
 }
 
 echoCas
 { if (HOD<10) {echoinline('0');}; echoinline(HOD,':');
   if (MIN<10) {echoinline('0');}; echoinline(MIN);
 }

 echoDatum
 { if (DEN<10) {echoinline('0');}; echoinline(DEN,'.');
   if (MES<10) {echoinline('0');}; echoinline(MES,'.'); echoinline(ROK);
 }
 
  
// M-M-M-M-M-M-M-M-M-M-M-M-M-M-M-M  MAIN  M-M-M-M-M-M-M-M-M-M-M-M-M-M-M-M-M-M
 #define RELE_CERP1 sys[231]
 #define RELE2 sys[232]
 #define TEPL_OUT sys[310] // nebo ram[300]
 #define ODPOCET_SEKUND sys[64]
 #define COMBUFFERINFO sys[48] // ==0 je znak, ==1 je prazdny ... funguje naopak
 #define COMBUFFER sys[49] // com buffer
 #define PWMF sys[191] // pwm frekvence
 #define PWMS sys[192] // pwm strida
 #define PWMN sys[193] // pwm strida nová
 #define DEN sys[5]
 #define MES sys[6]
 #define ROK sys[7]
 #define HOD sys[8]
 #define MIN sys[9]
 #define SEC sys[10]
 #define NTPST sys[37]
 
// M-M-M-M-M-M-M-M-M-M-M-M-M-M-M-M  MAIN  M-M-M-M-M-M-M-M-M-M-M-M-M-M-M-M-M-M
var tepl_cerp_vyp, tepl_cerp_zap, p, pp, ppp, px , poradivypisu;
var pip_delka; // delka zvuku v ms
var pip_typ;   // ton pipani

 dr { poradivypisu=1; echo();} // dalsi radek

main
{
  echo('-- MAIN --');
   tepl_cerp_vyp = 4000; // 40st
   tepl_cerp_zap = 5500; // 55st
   pip_delka = 0;        // delka pipani
   pip_typ = 0;          // ton pipani
   PWMS=0;               // nepipat
   p=0; pp=0;            // pomocne
   poradivypisu=1;       // pomocna pro vypis ve sloupcich
                      // serial_set(9600, 8, 1, 0); // nastav 9600 8n1
   // cekani na NTP server
   ODPOCET_SEKUND = 15;
   echoinline('cekam na NTP - ');
    label lntp:
       if (HOD!=0) {echoinline('NTP synchronizovan za ',ODPOCET_SEKUND,'s. - ');echoDatum; echoinline('-'); echoCas; dr; ODPOCET_SEKUND=0;}
    if (ODPOCET_SEKUND != 0) goto lntp;
    if (HOD==0) {echo('NTP neprijato');};
    //end cekani na NTP server

  // info o stavu
  echoinline('Stav cerpadla: '); if (RELE_CERP1 !=0) { echo('zapnuto');} else { echo('vypnuto');};

label lstart:
   DoGrafu; // hodnoty do webu laznet
   ODPOCET_SEKUND = 2; //nastav odpoèítávaè na 2 sekundy
    label lcekam:
     //111111111111111111111111111 tady to kmita v kuse
           // PIPANI
             if (pip_delka !=0)
                {
                  pip_delka--;
                  if (pip_typ==1) {PWMF=8000; PWMS=4500;}
                  if (pip_typ==2) {PWMF=200; PWMS=100;}
                }
                else { PWMS=0;}
         // end PIPANI
    if (ODPOCET_SEKUND != 0) goto lcekam;
     //111111111111111111111111111end
     
    //tady to kmita co ODPOCET_SEKUND / takze jen co 2s :)
  p=TEPL_OUT; //odchozi teplota z krbu
   if (sys[196]!=2) {sys[196]=2;} // rizeni rele cerpadla vzdy z SDS
   if (((p/100) != (pp/100))&&((p > pp+20)||(p < pp-20))) // vypis teploty pri zmene stupne - rozdíl min 2 desetiny - a pipnuti
       {  if (p>pp) {pip_typ=1;pip_delka=5;}else{pip_typ=2;pip_delka=5;}
          ppp=p/100; echoinline(ppp,' - '); echoCas; pp=p; poradivypisu++;
          if (poradivypisu!=4) {echoinline('   ');}else{dr;} // 3 sloupce hotovz, tak odøádkovat
       }
   if (p == 16777216) // chyba cidla
     { dr; echo('CIDLO TEPL_OUT NEFUNGUJE!!'); }
     else
     { // zapinani cerpadla a pipnuti
       if (p > tepl_cerp_zap && RELE_CERP1 !=255) {RELE_CERP1=1; pip_typ=1;pip_delka=100; dr; echo('cerpadlo zap');};
       if (p < tepl_cerp_vyp && RELE_CERP1 !=0) {RELE_CERP1=0; pip_typ=2;pip_delka=100; dr; echo('cerpadlo vyp');};
     };
           // TTTTTTTTTTTTTTT  TEST serial out - pripraveno
           //      text[0] = 'A'; // lze plnit('A'), 'A'+p, nebo konstatami (èísly - napø. 15, 0x35, 0b01101101) nebo hodnotou z promìnné - v tomto posledním pøípadì však dojde k pøevodu dolních osmi bitù na ASCII znak.
           //       serial_write(0, 0, 1); // 0 == pole text[] 1 == pole ram[] alternativa serial_text_out('A');s
           // TTTTTTTTTTTTTTT end TEST serial out
        //TTTTTTTTTTT  TEST serial in
          if (COMBUFFERINFO == 0) // neco tam je - naopak v simulátoru    -----------------    UPRAVIT PRED ODESLANIM do SDS!!!! z != na ==
            {p=COMBUFFER; dr; echoinline('232 buffer =',p);} //
        // TTTTTTTTTTTTTTT  end TEST serial in

goto lstart;

}

consle vypadá takto - ale nelíbí se mi to, klidně tam jde udělat solidní graf

54 - 00:07   55 - 00:07   
cerpadlo zap
56 - 00:07
57 - 00:07   58 - 00:08   59 - 00:08
60 - 00:08   61 - 00:08   62 - 00:09
63 - 00:09   64 - 00:10   63 - 00:11
62 - 00:12   61 - 00:12   60 - 00:12
59 - 00:12   58 - 00:12   57 - 00:12
56 - 00:13   55 - 00:13   54 - 00:13
53 - 00:13   54 - 00:15   55 - 00:15
56 - 00:15   57 - 00:16   58 - 00:16
59 - 00:17   60 - 00:17   61 - 00:17
62 - 00:18   63 - 00:18   64 - 00:18
65 - 00:19   66 - 00:19   67 - 00:20
68 - 00:21   69 - 00:22   70 - 00:23
71 - 00:25   72 - 00:27   73 - 00:31
74 - 00:35   73 - 00:49   72 - 00:53
71 - 00:58   70 - 01:01   69 - 01:05
68 - 01:08   67 - 01:11   66 - 01:14
65 - 01:17   64 - 01:20   63 - 01:23
62 - 01:26   61 - 01:28   60 - 01:31
59 - 01:33   58 - 01:36   57 - 01:38
56 - 01:41   55 - 01:43   54 - 01:46
53 - 01:49   52 - 01:51   51 - 01:54
50 - 01:57   49 - 02:00   48 - 02:03
47 - 02:06   46 - 02:09   45 - 02:13
44 - 02:16   43 - 02:20   42 - 02:24
41 - 02:28   40 - 02:32   39 - 02:36

cerpadlo vyp
38 - 02:38   37 - 02:58   36 - 03:14
35 - 03:33   34 - 03:55   33 - 04:18

ale konečně budu mít brzy hotové řízení serv na vzduch a komín přes rs232.. případně zavírání čehokoli. big_smile