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.