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

Ve WIKI je v případě vyčtení 1-wire chyba dokumentace, navíc to stejně nejde, viz. http://forum.merenienergie.cz//viewtopic.php?id=840

Naposledy upravil: aleho (2017-03-01 11:08:10)

17

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.

18

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.