<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[SDS PLC/PAC: Měření Energie & OnlineTechnology.cz - Řízení čerp. u krb. vložky se zachováním pův. htm s pípáním a vypisem]]></title>
		<link>https://forum.sds.an-d.cz/viewtopic.php?id=690</link>
		<atom:link href="https://forum.sds.an-d.cz/extern.php?action=feed&amp;tid=690&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Nejnovější příspěvky v Řízení čerp. u krb. vložky se zachováním pův. htm s pípáním a vypisem.]]></description>
		<lastBuildDate>Fri, 08 May 2015 02:17:18 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Řízení čerp. u krb. vložky se zachováním pův. htm s pípáním a vypisem]]></title>
			<link>https://forum.sds.an-d.cz/viewtopic.php?pid=5121#p5121</link>
			<description><![CDATA[<p>Řízení čerpadla u krbové vložky se zachováním původního htm&nbsp; od Laznet s pípáním a vypisem <br />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).&nbsp; 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.</p><div class="codebox"><pre><code>// ***********************************************************************************************************
// (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&lt;200) {
  ram[_ramh]=_pom-100;
  ram[_ramh]=-1*ram[_ramh];
 } else {
  ram[_ramh]=_pom-200;
 }
 _pom=sys[_sys] % 1000;
 if (_pom&lt;200) {
  ram[_ramd]=_pom-100;
  ram[_ramd]=-1*ram[_ramd];
 } else {
  ram[_ramd]=_pom-200;
 }
 _sys++;
 _ramd++;
 _ramh++;
 if (_sys&lt;148) goto setparam_1;
}

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

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

nactitemp
{
 _sys=310;
 _ram=300;
 label nactitemp_1:
 if (sys[_sys]&gt;0 &amp;&amp; sys[_sys]&lt;20000) {
  ram[_ram]=sys[_sys];
  _pom=_ram+10;
  if (ram[_ram]&lt;ram[_pom]){
   ram[_pom]=ram[_ram];
  }
  _pom=_ram+20;
  if (ram[_ram]&gt;ram[_pom]){
   ram[_pom]=ram[_ram];
  }
 }
 _sys++;
 _ram++;
 if (_sys&lt;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&lt;ram[_ramd] &amp;&amp; ram[_rame]&lt;sys[3]){
  echo(&#039;Tepl cid &#039;, _pom, &#039; je &lt; nez nast. (&#039;, _tep);
  smtp_send(text[100], &#039;SDS panel teplot&#039;, &#039;Teplota cidla &#039;, _pom, &#039; je nizsi nez nastavena (&#039;, _tep, &#039; st.C)&#039;);
  ram[_rame]=sys[3]+8640000;  //az za 24h se odesle dalsi email pokud se teplota nevrati
 }
 if (_tep&gt;ram[_ramh] &amp;&amp; ram[_rame]&lt;sys[3]){
  echo(&#039;Tepl cid &#039;, _pom, &#039; je &gt; nez nast. (&#039;, _tep, &#039; st.C)&#039;);
  smtp_send(text[100], &#039;SDS panel teplot&#039;, &#039;Teplota cidla &#039;, _pom, &#039; je vyssi nez nastavena (&#039;, _tep, &#039; st.C)&#039;);
  ram[_rame]=sys[3]+8640000;  //az za 24h se odesle dalsi email pokud se teplota nevrati
 }
 if (_tep&gt;ram[_ramd] &amp;&amp; _tep&lt;ram[_ramh]){
  _pom=_tmo*100;
  ram[_rame]=sys[3]+_pom;  //timeout
 }

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

// IIIIIIIIIIIIIIIIIIIIIIIIII INIT IIIIIIIIIIIIIIIIIIIIIIIIII

init
{
 echo(&#039;-- INIT --&#039;);

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

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

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

 // dle parametru nastavit web promenne sys[140-141]
 if (sys[100]==0 &amp;&amp; sys[101]==0 &amp;&amp; sys[102]==0 &amp;&amp; sys[103]==0 &amp;&amp; sys[104]==0 &amp;&amp; sys[105]==0 &amp;&amp; sys[106]==0 &amp;&amp; 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&lt;10) {echoinline(&#039;0&#039;);}; echoinline(HOD,&#039;:&#039;);
   if (MIN&lt;10) {echoinline(&#039;0&#039;);}; echoinline(MIN);
 }

 echoDatum
 { if (DEN&lt;10) {echoinline(&#039;0&#039;);}; echoinline(DEN,&#039;.&#039;);
   if (MES&lt;10) {echoinline(&#039;0&#039;);}; echoinline(MES,&#039;.&#039;); 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(&#039;-- MAIN --&#039;);
   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(&#039;cekam na NTP - &#039;);
    label lntp:
       if (HOD!=0) {echoinline(&#039;NTP synchronizovan za &#039;,ODPOCET_SEKUND,&#039;s. - &#039;);echoDatum; echoinline(&#039;-&#039;); echoCas; dr; ODPOCET_SEKUND=0;}
    if (ODPOCET_SEKUND != 0) goto lntp;
    if (HOD==0) {echo(&#039;NTP neprijato&#039;);};
    //end cekani na NTP server

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

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))&amp;&amp;((p &gt; pp+20)||(p &lt; pp-20))) // vypis teploty pri zmene stupne - rozdíl min 2 desetiny - a pipnuti
       {  if (p&gt;pp) {pip_typ=1;pip_delka=5;}else{pip_typ=2;pip_delka=5;}
          ppp=p/100; echoinline(ppp,&#039; - &#039;); echoCas; pp=p; poradivypisu++;
          if (poradivypisu!=4) {echoinline(&#039;   &#039;);}else{dr;} // 3 sloupce hotovz, tak odøádkovat
       }
   if (p == 16777216) // chyba cidla
     { dr; echo(&#039;CIDLO TEPL_OUT NEFUNGUJE!!&#039;); }
     else
     { // zapinani cerpadla a pipnuti
       if (p &gt; tepl_cerp_zap &amp;&amp; RELE_CERP1 !=255) {RELE_CERP1=1; pip_typ=1;pip_delka=100; dr; echo(&#039;cerpadlo zap&#039;);};
       if (p &lt; tepl_cerp_vyp &amp;&amp; RELE_CERP1 !=0) {RELE_CERP1=0; pip_typ=2;pip_delka=100; dr; echo(&#039;cerpadlo vyp&#039;);};
     };
           // TTTTTTTTTTTTTTT  TEST serial out - pripraveno
           //      text[0] = &#039;A&#039;; // lze plnit(&#039;A&#039;), &#039;A&#039;+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(&#039;A&#039;);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(&#039;232 buffer =&#039;,p);} //
        // TTTTTTTTTTTTTTT  end TEST serial in

goto lstart;

}</code></pre></div><p>consle vypadá takto - ale nelíbí se mi to, klidně tam jde udělat solidní graf</p><div class="codebox"><pre><code>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</code></pre></div><br /><p>ale konečně budu mít brzy hotové řízení serv na vzduch a komín přes rs232.. případně zavírání čehokoli. <img src="https://forum.sds.an-d.cz/img/smilies/big_smile.png" width="15" height="15" alt="big_smile" /></p>]]></description>
			<author><![CDATA[null@example.com (manav)]]></author>
			<pubDate>Fri, 08 May 2015 02:17:18 +0000</pubDate>
			<guid>https://forum.sds.an-d.cz/viewtopic.php?pid=5121#p5121</guid>
		</item>
	</channel>
</rss>
