1

Téma: Podpora pro FULL-C

Dobrý den,

rád bych se zeptal zda se plánuje uvolnit nějaké návody popřípadě hotové funkční programy pro FULL-C.
Začínám s SDS BIG a zatím jsem toho moc, čím bych se mohl inspirovat nenašel.

Pro začátek by mi stačil nějaký funkční program se sdílenýma proměnnýma.

Děkuju

Hanes

2

Re: Podpora pro FULL-C

Vše je na wiki:
http://wiki.merenienergie.cz/index.php/FULL-C_step-by-step-intro
http://wiki.merenienergie.cz/index.php/FULL-C_functions
http://wiki.merenienergie.cz/index.php/FULL-C_set_and_get_:_detailed
http://wiki.merenienergie.cz/index.php/FULL-C_tips_and_tricks

3

Re: Podpora pro FULL-C

Program pak může vypadat nějak takto:

//ovladani z UHTML
unsigned long U00;  //ktere cidlo/rele 1-6
unsigned long pu00;
unsigned int sbernice;

//T1 -> S11, S21, S31
//T2 -> S12, S22, S32
//T3 -> S13, S23, S33
//T4 -> S14, S24, S34
//T5 -> S15, S25, S35
//T6 -> S16, S26, S36
signed long S11;  //dolni teplota
signed long S21;  //horni teplota
signed long S31;  //akt teplota
signed long S12;  //dolni teplota
signed long S22;  //horni teplota
signed long S32;  //akt teplota
signed long S13;  //dolni teplota
signed long S23;  //horni teplota
signed long S33;  //akt teplota
signed long S14;  //dolni teplota
signed long S24;  //horni teplota
signed long S34;  //akt teplota
signed long S15;  //dolni teplota
signed long S25;  //horni teplota
signed long S35;  //akt teplota
signed long S16;  //dolni teplota
signed long S26;  //horni teplota
signed long S36;  //akt teplota

//stav R1-R6 -> U41-U46
unsigned long U41;  //rele 1
unsigned long U42;  //rele 2
unsigned long U43;  //rele 3
unsigned long U44;  //rele 4
unsigned long U45;  //rele 5
unsigned long U46;  //rele 6

unsigned int rele;  //jake rele je reseno
unsigned int hist;  //histereze
unsigned int paramchangetime;  //uptime posledni zmeny
unsigned int paramtimeout;  //cas od posledni zmeny parametru po zapis do DF (60s)
unsigned int hb;
unsigned int lb;

void time(void)
{
 unsigned int d, m, h, n, s;  //y
 d = SDS_get_u(5);
 m = SDS_get_u(6);
 //y = 2000 + SDS_get_u(7);
 h = SDS_get_u(8);
 n = SDS_get_u(9);
 s = SDS_get_u(10);
 printf("%u.%u. %02u:%02u:%02u ", d, m, h, n, s);
}

void main(void)
{
 time();
 printf("Start programu\n");
 //zakladni nastaveni hodnot
 S11=-9999;
 S21=-9999;
 S12=-9999;
 S22=-9999;
 S13=-9999;
 S23=-9999;
 S14=-9999;
 S24=-9999;
 S15=-9999;
 S25=-9999;
 S16=-9999;
 S26=-9999;

 U00=0;
 pu00=0;

 paramtimeout=6000;  //60s po posledni zmene v html zapsat do df
 paramchangetime=0;
 hist=50;  //0.5st
 sbernice=2199;  //sbernice A
 //sbernice=2699;  //sbernice B

 nactizdf(0);

 rele=1;  //zacina se od 1.rele
 while(1){
  //kontrola, nacteni, ulozeni do DF novych hodnot z uziv.stranky
  parametry();
  //zapis do DF
  zapisdf();

  //akt.teploty do S3x
  S31=SDS_get_i(sbernice+1);
  S32=SDS_get_i(sbernice+2);
  S33=SDS_get_i(sbernice+3);
  S34=SDS_get_i(sbernice+4);
  S35=SDS_get_i(sbernice+5);
  S36=SDS_get_i(sbernice+6);
  //akt.stav rele do U1x
  U41=SDS_get_u(231);
  U42=SDS_get_u(232);
  U43=SDS_get_u(233);
  U44=SDS_get_u(234);
  U45=SDS_get_u(235);
  U46=SDS_get_u(236);

  //ovladani rele dle teplot
  ovladani();
  rele++;
  if(rele>6) rele=1;
 }
}

void parametry(void)
{
 if(U00!=pu00){
  pu00=U00;
  time();
  printf("Zmena nastavení (teploty 1-6) %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i \n", S11, S21, S12, S22, S13, S23, S14, S24, S15, S25, S16, S26);
  paramchangetime=SDS_get_u(3);
 }
}

void nactizdf(unsigned int page)
{
 signed char buffer[264]; // vzdy minimalne 264 bajtu
 if (DF_read_page(0, &buffer) == 0){
  time();
  printf("Nepovedlo se přečíst stránku 0 z DF\n");
 } else {  
  S11=-1*(buffer[11]*100+buffer[12]);
  S21=-1*(buffer[13]*100+buffer[14]);
  S12=-1*(buffer[15]*100+buffer[16]);
  S22=-1*(buffer[17]*100+buffer[18]);
  S13=-1*(buffer[19]*100+buffer[20]);
  S23=-1*(buffer[21]*100+buffer[22]);
  S14=-1*(buffer[23]*100+buffer[24]);
  S24=-1*(buffer[25]*100+buffer[26]);
  S15=-1*(buffer[27]*100+buffer[28]);
  S25=-1*(buffer[29]*100+buffer[30]);
  S16=-1*(buffer[31]*100+buffer[32]);
  S26=-1*(buffer[33]*100+buffer[34]);

  if (DF_read_page(1, &buffer) == 0){
   time();
   printf("Nepovedlo se přečíst stránku 1 z DF\n");
  } else {
   if(S11==0) S11=buffer[11]*100+buffer[12];
   if(S21==0) S21=buffer[13]*100+buffer[14];
   if(S12==0) S12=buffer[15]*100+buffer[16];
   if(S22==0) S22=buffer[17]*100+buffer[18];
   if(S13==0) S13=buffer[19]*100+buffer[20];
   if(S23==0) S23=buffer[21]*100+buffer[22];
   if(S14==0) S14=buffer[23]*100+buffer[24];
   if(S24==0) S24=buffer[25]*100+buffer[26];
   if(S15==0) S15=buffer[27]*100+buffer[28];
   if(S25==0) S25=buffer[29]*100+buffer[30];
   if(S16==0) S16=buffer[31]*100+buffer[32];
   if(S26==0) S26=buffer[33]*100+buffer[34];

   time();
   printf("Stránka 0 a 1 přečtena z DF. Načtené hodnoty:\n", page);
   printf("Teploty pro rele 1: %i, %i\n", S11, S21);
   printf("Teploty pro rele 2: %i, %i\n", S12, S22);
   printf("Teploty pro rele 3: %i, %i\n", S13, S23);
   printf("Teploty pro rele 4: %i, %i\n", S14, S24);
   printf("Teploty pro rele 5: %i, %i\n", S15, S25);
   printf("Teploty pro rele 6: %i, %i\n", S16, S26);
  }
 }
}

void zapisdf(void)
{
 if(paramchangetime>0 && paramchangetime+paramtimeout<SDS_get_u(3)){
  paramchangetime=0;
  ulozdodf(0);
 }
}

void ulozdodf(unsigned int page)
{
 if (page==0){
  unsigned int i;
  unsigned char zbuffer[264]; // vzdy minimalne 264 bajtu - zaporne
  unsigned char pbuffer[264]; // vzdy minimalne 264 bajtu - plus
  //zaporne hodnoty jsou v page 0
  for (i=11; i<=34; i++){
   zbuffer[i]=0;
   pbuffer[i]=0;
  }
  if(S11<0){
   zbuffer[11]=-1*S11 / 100;  //hb
   zbuffer[12]=-1*S11 % 100;  //lb
  } else {
   pbuffer[11]=S11 / 100;  //hb
   pbuffer[12]=S11 % 100;  //lb
  }
  if(S21<0){
   zbuffer[13]=-1*S21 / 100;  //hb
   zbuffer[14]=-1*S21 % 100;  //lb
  } else {
   pbuffer[13]=S21 / 100;  //hb
   pbuffer[14]=S21 % 100;  //lb
  }
  if(S12<0){
   zbuffer[15]=-1*S12 / 100;  //hb
   zbuffer[16]=-1*S12 % 100;  //lb
  } else {
   pbuffer[15]=S12 / 100;  //hb
   pbuffer[16]=S12 % 100;  //lb
  }
  if(S22<0){
   zbuffer[17]=-1*S22 / 100;  //hb
   zbuffer[18]=-1*S22 % 100;  //lb
  } else {
   pbuffer[17]=S22 / 100;  //hb
   pbuffer[18]=S22 % 100;  //lb
  }
  if(S13<0){
   zbuffer[19]=-1*S13 / 100;  //hb
   zbuffer[20]=-1*S13 % 100;  //lb
  } else {
   pbuffer[19]=S13 / 100;  //hb
   pbuffer[20]=S13 % 100;  //lb
  }
  if(S23<0){
   zbuffer[21]=-1*S23 / 100;  //hb
   zbuffer[22]=-1*S23 % 100;  //lb
  } else {
   pbuffer[21]=S23 / 100;  //hb
   pbuffer[22]=S23 % 100;  //lb
  }
  if(S14<0){
   zbuffer[23]=-1*S14 / 100;  //hb
   zbuffer[24]=-1*S14 % 100;  //lb
  } else {
   pbuffer[23]=S14 / 100;  //hb
   pbuffer[24]=S14 % 100;  //lb
  }
  if(S24<0){
   zbuffer[25]=-1*S24 / 100;  //hb
   zbuffer[26]=-1*S24 % 100;  //lb
  } else {
   pbuffer[25]=S24 / 100;  //hb
   pbuffer[26]=S24 % 100;  //lb
  }
  if(S15<0){
   zbuffer[27]=-1*S15 / 100;  //hb
   zbuffer[28]=-1*S15 % 100;  //lb
  } else {
   pbuffer[27]=S15 / 100;  //hb
   pbuffer[28]=S15 % 100;  //lb
  }
  if(S25<0){
   zbuffer[29]=-1*S25 / 100;  //hb
   zbuffer[30]=-1*S25 % 100;  //lb
  } else {
   pbuffer[29]=S25 / 100;  //hb
   pbuffer[30]=S25 % 100;  //lb
  }
  if(S16<0){
   zbuffer[31]=-1*S16 / 100;  //hb
   zbuffer[32]=-1*S16 % 100;  //lb
  } else {
   pbuffer[31]=S16 / 100;  //hb
   pbuffer[32]=S16 % 100;  //lb
  }
  if(S26<0){
   zbuffer[33]=-1*S26 / 100;  //hb
   zbuffer[34]=-1*S26 % 100;  //lb
  } else {
   pbuffer[33]=S26 / 100;  //hb
   pbuffer[34]=S26 % 100;  //lb
  }
  time();
  if (DF_write_page(0, &zbuffer) == 0){
   printf("Nepovedlo se zapsat stránku 0 do DF\n");
  } else {  
   printf("Stránka 0 zapsána do DF\n");
  }
  time();
  if (DF_write_page(1, &pbuffer) == 0){
   printf("Nepovedlo se zapsat stránku 1 do DF\n");
  } else {
   printf("Stránka 1 zapsána do DF\n");
  }
 }
}

void ovladani()
{
 int t1; int t2;
 switch(rele){
  case 1:
   t1=S11;
   t2=S21;
   break;
  case 2:
   t1=S12;
   t2=S22;
   break;
  case 3:
   t1=S13;
   t2=S23;
   break;
  case 4:
   t1=S14;
   t2=S24;
   break;
  case 5:
   t1=S15;
   t2=S25;
   break;
  case 6:
   t1=S16;
   t2=S26;
   break;
 }
 nastavrele(t1, t2);
}

void nastavrele(int t1, int t2)
{
 unsigned int r;  unsigned int c; unsigned int st; unsigned int n; int ta;

 n=0;  //novy stav rele
 r=rele+230;
 st=SDS_get_u(r);  //akt stav rele
 if (st!=0) n=1;
 c=rele+sbernice;
 ta=SDS_get_i(c);  //akt teplota

 if (ta<t1-hist && st!=0) {n=0;}
 if ((ta>=t1 && st==0) && (ta<=t2 && st==0)) {n=1;}
 if (ta>t2+hist && st!=0) {n=0;}

 if (n==1){
  if (st==0){
   SDS_set_u(r, 0xFF); //zap rele
   time();
   printf("Rele %u sepnuto. Teplota %i\n", rele, ta);
  }
 } else {
  if (st!=0){
   SDS_set_u(r, 0x00); //vyp rele
   time();
   printf("Rele %u vypnuto. Teplota %i\n", rele, ta);
  }
 }
}

4

Re: Podpora pro FULL-C

Super. Přesně tohle jsem potřeboval. Děkuju.

Nemohl by jste sem ještě dát uživatelskou html stránku uloženou v SDS (alespoň část).

Předem děkuju.

Hanes

5

Re: Podpora pro FULL-C

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <TITLE>Nastavení teplot pro spínání relé SDS BIG</TITLE>
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <META content="text/html; charset=windows-1250" http-equiv=Content-Type>
  <META content="onlinetechnology" name=author>
  <META content="sds-big, sds-small, sds-ttc, ttc pro, sds, big, small, onlinetechnology, csphone" name=keywords>
  <META content="sds-big, sds-small, sds-ttc, ttc pro, sds, big, small, onlinetechnology, csphone" name=description>
  <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
  <META HTTP-EQUIV="EXPIRES" CONTENT="0">
  
  <STYLE title=currentStyle type=text/css media=screen>
   body {
    font-family:verdana, arial, sans-serif; font-size:12px; 
    word-wrap:break-word; background:#000;     
   }

   #header {color:#fff; xbackground:#e09090;}
   #header p {color:#fff;}

   #outer {float:left; xwidth:350px; xpadding:20px;}
   #outer {padding-bottom:200px; margin-bottom:-200px;}

   #wrapper {overflow:hidden;}

   #footer {clear:both; width:400px; padding:0px;}
   #footer p {color:#fff;}
   #footer a {color:#fff;}
   #footer a:hover {text-decoration:none;}

   .content {padding-top:20px;}
 
   h1 {font-size:30px; margin:0; padding:10px; color:#fff;}
   h2 {font-size:18px; margin:0; padding:10px; color:#ddd;}
   h3 {font-size:18px; margin:0; padding-bottom:10px;}
   p {font-size:12px; line-height:1.5em; margin:0; padding:5px 0;}

   fieldset {
    width:350px;
    border:1px solid #777;
    margin: 0px 10px 10px 0px;
    padding: 5px 5px 5px 5px;
    color:#fff;
    text-align:left;
    float:left;
   }

   legend {
    padding: 0.2em 0.5em;
    border:1px solid #777;
    color:#0f0;
    font-size:10px; font-style:bold;
   }
   
   label {
    clear:left; display:block; float:left;
    width:160px; text-align:left; padding-right:10px; color:#fff;
    margin-bottom:0.5em; font-size:1em; line-height:1.5em; font-style:normal;
   }
  </STYLE>

  <!--[if lte IE 7]>
   <style type="text/css">
    body {word-wrap:break-word;}
    #outer2 {float:left; display:inline; margin-left:10px; margin-right:10px;}
    #wrapper {display:inline-block;}
   </style>
  <![endif]-->

  <script type="text/javascript">
   var req=false;
   var once=true;
   var rnd=0;

   function getReq(){
    req=false;
    if(window.XMLHttpRequest){
     req=new XMLHttpRequest();
    } else if (window.ActiveXObject){
     req=new ActiveXObject("Microsoft.XMLHTTP");
    }
   }

   function sdsps(){
    if(!req){getReq();}
    if(req){
     rnd=Math.floor((Math.random() * 10000) + 1);
     req.open("GET","shared.txt?rand="+rnd,true);
     req.onreadystatechange=reqCompleteR;
     req.send(null);
    }
    t=setTimeout("sdsps()",1000);
   }

   function reqCompleteR(){
    if(req.readyState==4){
     if(req.status==200){
      if(once){
       once=false;
       var val=0;
       var idx="";
        var rE=req.responseText.split("|");
       for(i=0;i<(rE.length)-1;i++){
         var cU="";
        cU=rE[i];
        if(cU.substring(0,1)=='S'){
         idx=cU.substring(1,3);
         val=rE[i+1];
         document.getElementById(idx).value=parseFloat(val/100);
        }
       }
      } else {
       var val=0;
       var idx="";
        var rE=req.responseText.split("|");
       for(i=0;i<(rE.length)-1;i++){
         var cU="";
        cU=rE[i];
        if(cU.substring(0,1)=='S'){
         idx=cU.substring(1,3);
         //akt.teplota
         if(parseInt(idx)>30){
          val=rE[i+1];
          document.getElementById(idx).value=parseFloat(val/100);
         }
        }
        if(cU.substring(0,1)=='U'){
         idx=cU.substring(1,3);
         //akt.stav rele
         if(parseInt(idx)>40){
          val=rE[i+1];
          if(val==0){
           document.getElementById(idx).value='VYPNUTO';
          } else {
           document.getElementById(idx).value='ZAPNUTO';
          }
         }
        }
       }
      }
     }
    }
   }

   function save(){
    if(!req){getReq();}
    if(req){
     //temp
     v11=document.getElementById("11").value*100;
     v21=document.getElementById("21").value*100;
     v12=document.getElementById("12").value*100;
     v22=document.getElementById("22").value*100;
     v13=document.getElementById("13").value*100;
     v23=document.getElementById("23").value*100;
     v14=document.getElementById("14").value*100;
     v24=document.getElementById("24").value*100;
     v15=document.getElementById("15").value*100;
     v25=document.getElementById("25").value*100;
     v16=document.getElementById("16").value*100;
     v26=document.getElementById("26").value*100;
         rnd=Math.floor((Math.random() * 10000) + 1);
     req.open("GET","sv?U00="+rnd+"&S11="+v11+"&S12="+v12+"&S13="+v13+"&S14="+v14+"&S15="+v15+"&S16="+v16+"&S21="+v21+"&S22="+v22+"&S23="+v23+"&S24="+v24+"&S25="+v25+"&S26="+v26,true);
    }
    req.onreadystatechange=null;
    req.send(null);
   }
   
  </script>
 </head>

<body onLoad="sdsps();">


 <div id="header">
  <div class="content">
   <h3>Nastavení teplot pro spínání relé SDS BIG</h3>
  </div>
 </div>

 <div id="wrapper">

  <div id="outer">
   <form>

    <fieldset>
     <legend>Nastavení teplot pro relé 1</legend>
     <label for="11">Dolní teplota</label>
     <input type="text" id="11" value="" maxlength="6">
     <label for="21">Horní teplota</label>
     <input type="text" id="21" value="" maxlength="6">
     <label for="31">Aktuální teplota</label>
     <input type="text" id="31" readonly value="" maxlength="6">
     <label for="41">Aktuální stav relé</label>
     <input type="text" id="41" readonly value="" maxlength="6">
    </fieldset>

    <fieldset>
     <legend>Nastavení teplot pro relé 2</legend>
     <label for="12">Dolní teplota</label>
     <input type="text" id="12" value="" maxlength="6">
     <label for="22">Horní teplota</label>
     <input type="text" id="22" value="" maxlength="6">
     <label for="32">Aktuální teplota</label>
     <input type="text" id="32" readonly value="" maxlength="6">
     <label for="42">Aktuální stav relé</label>
     <input type="text" id="42" readonly value="" maxlength="6">
    </fieldset>

    <fieldset>
     <legend>Nastavení teplot pro relé 3</legend>
     <label for="13">Dolní teplota</label>
     <input type="text" id="13" value="" maxlength="6">
     <label for="23">Horní teplota</label>
     <input type="text" id="23" value="" maxlength="6">
     <label for="33">Aktuální teplota</label>
     <input type="text" id="33" readonly value="" maxlength="6">
     <label for="43">Aktuální stav relé</label>
     <input type="text" id="43" readonly value="" maxlength="6">
    </fieldset>

    <fieldset>
     <legend>Nastavení teplot pro relé 4</legend>
     <label for="14">Dolní teplota</label>
     <input type="text" id="14" value="" maxlength="6">
     <label for="24">Horní teplota</label>
     <input type="text" id="24" value="" maxlength="6">
     <label for="34">Aktuální teplota</label>
     <input type="text" id="34" readonly value="" maxlength="6">
     <label for="44">Aktuální stav relé</label>
     <input type="text" id="44" readonly value="" maxlength="6">
    </fieldset>

    <fieldset>
     <legend>Nastavení teplot pro relé 5</legend>
     <label for="15">Dolní teplota</label>
     <input type="text" id="15" value="" maxlength="6">
     <label for="25">Horní teplota</label>
     <input type="text" id="25" value="" maxlength="6">
     <label for="35">Aktuální teplota</label>
     <input type="text" id="35" readonly value="" maxlength="6">
     <label for="45">Aktuální stav relé</label>
     <input type="text" id="45" readonly value="" maxlength="6">
    </fieldset>

    <fieldset>
     <legend>Nastavení teplot pro relé 6</legend>
     <label for="16">Dolní teplota</label>
     <input type="text" id="16" value="" maxlength="6">
     <label for="26">Horní teplota</label>
     <input type="text" id="26" value="" maxlength="6">
     <label for="36">Aktuální teplota</label>
     <input type="text" id="36" readonly value="" maxlength="6">
     <label for="46">Aktuální stav relé</label>
     <input type="text" id="46" readonly value="" maxlength="6">
    </fieldset>
    
   </form>
  </div> <!-- end outer -->

  <input type="button" value="ULOŽIT NASTAVENÍ" onclick="save();">

  </div><!-- end #wrapper -->

 <div id="footer">
  <div class="content">
   <p>
   Teploty můžete nastavit včetně des.tečky (např 22.50). Po nastavení všech hodnot uložte data do zařízení
   pomocí tlačítka 'Uložit nastavení'.
   </p>
   <p>
   Relé je sepnuto pouze v rozmezí nstavených hodnot. Histereze je nastavena na 0.5°C.
   </p>
  </div>
 </div> <!-- end footer -->

</body>
</html>

6

Re: Podpora pro FULL-C

Zdravim,

prosim o radu z FULL-C programem. Jedna se o jednoduche ovladani rele. Bohuzel mi vubec nechce fungovat sdilena promenna. Je potreba nekde tuto moznost zapnout ? Stranaka 192.168.1.250/sv?U00=1 hlasi chybu ERR_INVALID_HTTP_RESPONSE.
Nove jsem poridil SDS BIG, na SDS IO6 funguje vse bez problemu.

Program je jednoduchy :

unsigned long U00;
U00=0;

void main(void)
{

SDS_set_u(234, U00);

}

Dekuji za odpoved.

Jirka

7

Re: Podpora pro FULL-C

Dobry den,

take bojuju se sdilenyma promennyma.
Zkousim to na prikladu uvedenem vyse.

Pokud ve funci save() vkladam do promenne Vxy hodnotu z input type="text" vše je v poradku.
Pokud ale Vxy priradim konstantu, napr. v11=23; hodnota se do SDS neprenese.

Jakym zpusobem nejlepe prenesu do SDS hodnotu, kterou napr. na strance HTML vypocitam.
Poradte prosim, kde delam chybu.

Díky

Hanes

8

Re: Podpora pro FULL-C

Byl by třeba nějaký ucelený kód?

1/ Ve full-c je potřeba nadefinovat proměnnou
unsigned long U00;
unsigned long U01;

2/ U00 by se nemělo nikde v programu "pod rukama" změnit. Tedy v nějaké smyčce např. U00=0.
3/ pro zamezení kešování html je lepší přidat nějaký random. rnd není nikde definováno, slouží jen pro odlišení dotazů a mělo by být vždy jiné. možná není vždy potřeba, ale mě se osvědčilo už od micro/macro
192.168.1.250/sv?U00=100&U01=200&rnd=4613234654

9

Re: Podpora pro FULL-C

Myslim ze nemam problem se spatnym programem. Nefunguje mi ani priklad z wiki.

Adresa 192.168.1.250/sv?U00=100 mi hlasi chybu. Firmware mam starsi.

to /sv? mi proste nejede.

na SDS-MICRO fungoval tento jednduchy script spolehlive

// toto je SDS-C
main
{

sys[231]=sys[140];
sys[232]=sys[141];
sys[233]=sys[142];
sys[234]=sys[143];
sys[235]=sys[144];
sys[236]=sys[145];

}

10

Re: Podpora pro FULL-C

Příklad je jednoduchý.

Do SDS nahrát .c i .html z příkladu výše.
V kódu html stránky ve funkci save() změním ručně hodnoty v11, v21, v12 .... viz příklad:

     v11=1;
     v21=2;
     v12=3;
     v22=4;
     v13=5;
     v23=6;
     v14=document.getElementById("14").value*100;
     v24=document.getElementById("24").value*100;

Stránku nahraju do SDS, načtu a zmáčknu tlačítko "Uložit nastavení".
V prohlížeči si zobrazím 192.168.1.250/shared.txt.
Zapsané hodnoty v11,....v23 se nemění. U v14,v24 ..... je vše OK.

Díky

Hanes


j@m napsal:

Byl by třeba nějaký ucelený kód?

1/ Ve full-c je potřeba nadefinovat proměnnou
unsigned long U00;
unsigned long U01;

2/ U00 by se nemělo nikde v programu "pod rukama" změnit. Tedy v nějaké smyčce např. U00=0.
3/ pro zamezení kešování html je lepší přidat nějaký random. rnd není nikde definováno, slouží jen pro odlišení dotazů a mělo by být vždy jiné. možná není vždy potřeba, ale mě se osvědčilo už od micro/macro
192.168.1.250/sv?U00=100&U01=200&rnd=4613234654

11

Re: Podpora pro FULL-C

Nevím kde je problém, vše jede jak má...

     v11=9991;
     v21=9992;
     v12=9993;
     v22=9994;
     v13=9995;
     v23=9996;
     v14=document.getElementById("14").value*100;
     v24=document.getElementById("24").value*100;
     v15=document.getElementById("15").value*100;
     v25=document.getElementById("25").value*100;
     v16=document.getElementById("16").value*100;
     v26=document.getElementById("26").value*100;

shared.txt
et|946689765|ut|4965200|U46|255|U45|255|U44|0|U43|0|U42|0|U41|0|S36|0|S26|0|S16|0|S35|0|S25|0| S15|0|S34|0|S24|0|S14|2500|S33|0|S23|9996|S13|9995|S32|0|S22|9994|S12|9993|S31|0|S21|9992| S11|9991|U00|2661|

12

Re: Podpora pro FULL-C

j@m napsal:

Nevím kde je problém, vše jede jak má...

     v11=9991;
     v21=9992;
     v12=9993;
     v22=9994;
     v13=9995;
     v23=9996;
     v14=document.getElementById("14").value*100;
     v24=document.getElementById("24").value*100;
     v15=document.getElementById("15").value*100;
     v25=document.getElementById("25").value*100;
     v16=document.getElementById("16").value*100;
     v26=document.getElementById("26").value*100;

shared.txt
et|946689765|ut|4965200|U46|255|U45|255|U44|0|U43|0|U42|0|U41|0|S36|0|S26|0|S16|0|S35|0|S25|0| S15|0|S34|0|S24|0|S14|2500|S33|0|S23|9996|S13|9995|S32|0|S22|9994|S12|9993|S31|0|S21|9992| S11|9991|U00|2661|


Dobrý den,
problém byl u mě v prohlížeči.
Špatně se mi po nahrátí změny aktualizoval.

Už je vše v pořádku.
Děkuji za pomoc.

Hanes

13

Re: Podpora pro FULL-C

Tak chyba odhalena. SDS IO vracelo vzdy nejakou hodnotu. BIG vraci ERR_INVALID_HTTP_RESPONSE ale hodnota promenne se meni. Program jsem nemel uplne dobre, ale tohle me zmatlo. Diky za rady.

14

Re: Podpora pro FULL-C

Nedaří se mi vyčíst strukturu konfigurace 1Wire
V příklad v http://wiki.merenienergie.cz/index.php/FULL-C_set_and_get_:_detailed je chyba, je tam  OW_busA_DevStatus = SDS_get_u(2100+index) a vůbec se neplní OW_DEVICE_CFG.
Když ale zkusím SDS_get_a(2100+index, (void *)OW_DEVICE_CFG, 25); tak mi to taky nejde a hází to chybu *** FULL-C ***: can't assign T:12 from T:14

Je někde funkční příklad vyčtení struktury?

15

Re: Podpora pro FULL-C

aleho napsal:

Nedaří se mi vyčíst strukturu konfigurace 1Wire.
Je někde funkční příklad vyčtení struktury?

Viz WIKI pro FULL-C, je tam popis a příklady.
Pokud tam bude ještě něco chybět, napište a doplníme.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

16

Re: Podpora pro FULL-C

Vytvořil jsem první velmi jednoduchý program ve Full - c:
void time(void)
{
unsigned int d, m, y, h, n, s; 
d = SDS_get_u(5);
m = SDS_get_u(6);
y = 2000 + SDS_get_u(7);
h = SDS_get_u(8);
n = SDS_get_u(9);
s = SDS_get_u(10);
printf("%u.%u.%u. %02u:%02u:%02u ", d, m, y, h, n, s);
}


void main(void)
{

  printf("Start programu\n");

time();

   for (;;);

}
Když si spustím v prohlížeči " FULL- C CONSOLE" tak se mi zobrazí toto:
Start programu
9.9.2018. 21:43:35
což je čas prvního spuštění , ale čas se dále nemění - kde mám chybu?

stránka shared. txt o které jsem se došetl pouze na foru a vůbec nevím k čemu je dobrá mi zobrazuje toto:
et|1536529885|ut|6229701|
zde se sice čísilka mění, ale vůbec netuším jejich význam.

17

Re: Podpora pro FULL-C

Kde jsou popsány příkazy pro ovládání relé, čtení vstupů na wiki jsem našel jen : SDS_set_u(233, 0xFF);
mám tomu rozumět, tak že relé jsou číslovány jako u předchozí verze 233 = SYS 233 a že pro vypnuto bude 0x00 ??????????

Odpoví mi někdo na můj předchozí dotaz s vypsáním času na www stránce???
dík.

18

Re: Podpora pro FULL-C

krevla napsal:

Vytvořil jsem první velmi jednoduchý program ve Full - c:
---
ale čas se dále nemění - kde mám chybu?

Chování odpovídá přesně tomu, co jste naprogramoval.

Program jednou zavolá printf() který vypíše čas v tu danou chvíli, a pak přejde do nekonečné smyčky for(;;); takže už nemůže udělat cokoliv jiného (např. vypsat nový čas atd.).

krevla napsal:

stránka shared. txt o které jsem se došetl pouze na foru a vůbec nevím k čemu je dobrá mi zobrazuje toto:
et|1536529885|ut|6229701|
zde se sice čísilka mění, ale vůbec netuším jejich význam.

Je to popsáno na wiki.

V této stránce (a dalších) jsou vypsány případné sdílené proměnné.

V rychlosti: et je hodnota času v sekundách (lokální epoch čas SDS) a ut je hodnota uptime v milisekundách.
Následovat mají jednotlivé sdílené proměnné, ale protože je zřejmě nemáte ve svém programu definované, tak tam uź tedy nic dalšího nevidíte.

Více viz detailní stránka na wiki, která toto popisuje.

krevla napsal:

Kde jsou popsány příkazy pro ovládání relé

Je to na wiki v sekci popisu FULL-C (funkce set a get).

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !