26

Re: [vyřešeno] předávání dat

Řešil jsem to: http://forum.merenienergie.cz//viewtopic.php?id=259, zřejmě asi jediné možné a mě fungující je to posílat přes sys 140-147.

27

Re: [vyřešeno] předávání dat

Na http://wiki.merenienergie.cz/index.php/ … le_control je to popsáno.

28

Re: [vyřešeno] předávání dat

Díky 
Přesto nabyla by krátká ukázka programu čtení z jiného SDS  ?

29

Re: [vyřešeno] předávání dat

Ano, použít http_get() :

Příklad. SDS č. 1 je 192.168.1.100 a SDS č.2 je 192.168.1.200. Z SDS č.1 chceme číst data (čte je SDS č. 2).

 http_get(192,168,1,100,'192.168.1.100','/get_sys[123]');

Výsledek je pak podle nastavení v ram[] nebo text[].

Z SDS lze do druhého SDS také zapisovat hodnoty.

 http_get(192,168,1,100,'192.168.1.100','/sdscep?sys140=20');

Toto nastaví sys[140] na hodnotu 20.
Pozor však na rozsah funkce sdscep (viz WiKi).

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

30

Re: [vyřešeno] předávání dat

Na začátku je v sys[76] nastaven port 333 na kterém běží druhé zařízení. Pokud běží na portu 80 zaremujte. sys[77] nastavuje vystup do text[]. Zápisem hodnoty do už.proměnné sys[140] bude zobrazena její hodnota (po F5...viz popis v programu).

init
{
 sys[76]=333;
 sys[77]=2;
 echo ('Test http_get do jineho SDS zarizeni.');
 echo ('Pozor. Jelikoz http_get bezi na pozadi, neni ihned videt odpoved.');
 echo ('Refresh(F5) provede ale take opetovne odeslani stranky - tedy je vse spusteno znovu');
 echo ('V normalnim provozu vse ridi c-prog. tam zadny F5 nebude - nereste to.');
}

get
{
 echo('http_get()');
 http_get(192,168,1,251,'192.168.1.251','/get_sys[',sys[140],']');
 sys[140]=0;

 //pockam az probehne funkce do konce
label cekam_na_http:
 if (sys[65] == 0) goto cekam_na_http;

 //pokud server má problém:
 if ((sys[65] != 1024)||(sys[75] != 200)) goto chyba_www_serveru;

 //neni problem, takze ok
 echo('Server hlasi 200 OK');
 goto final;

label chyba_www_serveru:
 //obsluha chyby - www server
 echo('Chyba, www server nedostupny nebo nevratil 200 OK - konkretni http kod je: ',sys[75]);
 goto final;

label final:
 //vypis dat
 echo (text[0]);
}

main
{
 if (sys[140]>0){
  echo('sys140->', sys[140]);
  get();
 }
}

31

Re: [vyřešeno] předávání dat

Díky to je to co jsem potřeboval.

32

Re: [vyřešeno] předávání dat

Dobrý den
Podařilo se někomu vůbec přenést údaje z jednoho SDS do druhého ?
Mě se teda nic nedaří, ať zkouším co zkouším, tak se mě nic nemění.

Do jednoho SDS nahraju ten program nahoře.
Kde na druhém SDS-ku dostanu ten údaj ze sys[140], také do sys[140], nebo někam jinam ?

Prosím o radu, sedím na tom cca týden, večer co večer a nedaří se mi :-(

33

Re: [vyřešeno] předávání dat

Ano, sice ještě řeším některé problémy, ale z registru do vybraného registru to chodí.
Je o tom poměrně dost tady:
http://forum.merenienergie.cz//viewtopic.php?id=129
Pozor na verzi firmware - s hodně starýma verzema ( cca rok) jsem měl nějaké problémy.

34

Re: [vyřešeno] předávání dat

Ano, děkuji za nakopnutí, příklad funguje a konečně jsem to snad pochopil. Já jsem pořád lezl do uživatelských sys a něco tam hledal :-). V sobotu a neděli má pršet, tak se snad dostanu k programování na delší dobu. Děkuji ještě jednou.

35

Re: [vyřešeno] předávání dat

Tak jsem stvořil nějaké demo na téma přenos údaje (napětí na AD1) z jednoho sds na druhé
Mám to odladěné na dvou SDS, jedno je micro, druhé je macro s lcd displejem.
Kódy samozřejmně kde kdo pozná použil jsem vše co jsem tady na fóru našel.
Děkuji všem tady na fóru za pomoc a za objasnění problémů, zejména krevlovi :-) za nalezení vlákna na fóru. Nejsem žádný programátor, jenom si tak hraju se zařízeními a toto zařízení mě docela dostalo. Tak malou a chytrou krabičku jsem ještě neviděl. Děkuji výrobcům, programátorům a Všem co se na projektu SDS podílejí. Skvělá práce.

1) V prvním sds je tento program

/*
   PROGRAM NA ODESILANI DAT Z JEDNOHO SDS DO DRUHEHO SDS.
             1.SDS-ko IP 192.168.1.250:443
       TOTO SDS odesola data do druheho SDS (IP 192.168.1.252:333)
*/

var _vstupad;       //index S0 vstupu
var _konstad;       //prepoctova konst S0 vstupu
var _ramad;         //index ram pole
var _pomad;         //pomocna

ad
{
_vstupad=431;      //ad hodnoty sys[431], sys[432], sys[433], sys[434]
_konstad=436;      //konstanty ad sys[436], sys[437], sys[438], sys[439]
_ramad=50;         //kam se budou psat hodnoty (ja jsem nastavil ram[50]

label _ad_1:
//AD
_pomad=sys[_vstupad]*100000/sys[_konstad];  //3205 jako 3.205 V
ram[_ramad]=_pomad;   //schovat akt.napeti

_vstupad++;
_konstad+=4;
_ramad++;
if (_vstupad<435) goto _ad_1;
}

main
{
ad();
}

36

Re: [vyřešeno] předávání dat

2) V druhém SDS je tento program

/*
   PROGRAM NA PRIJEM DAT Z JEDNOHO SDS DO DRUHEHO SDS.
             2.SDS-ko IP 192.168.1.252:333
       TOTO SDS prijima data od prvniho SDS (IP 192.168.1.250:443)
*/




var a;

test
{

sys[76] = 443;         // port 1-SDS (192.168.1.250:443)
sys[77] = 1;


echo(' ');
echo('HTTP GET...');

//druhe SDS je 192.168.1.250 -> a z tohoto ctu
http_get(192,168,1,250,'192.168.1.250','/get_ram[50]?rn=4'); // jaky ram na vysilacim SDS nastavim, takovy na prijimacim SDS taky nastavim
goto cekam_na_http;

//pockam az probehne funkce do konce
label cekam_na_http:
if (sys[65] == 0) goto cekam_na_http;

//pokud server má problém:
if ((sys[65] != 1024)||(sys[75] != 200))
{
   echo('Chyba komunikace s www serverem ',sys[65],', http: ', sys[75]);

   return;
};

echo('PRIJEM ', sys[75],':  ram[0]=',ram[0]);
echo(' ');

a = 1;

echo('poz : ram[poz]');

smycka:

echo(a,'  :  ', ram[a]);

text[a] = ram[a];

a = a+1;

if (a <= ram[0]) goto smycka;

echo(' ');
echo(' PRIJEM : ');

echo(text[1]);


}

main
{
  echo('Start programu.');

opakovat:

  test();

//pockame 5 sec
sys[64] = 5;                                 //prijimam data kazdych 5 sekund
label cekej:
if (sys[64] != 0) goto cekej;

//znovu
goto opakovat;

}

37

Re: [vyřešeno] předávání dat

3) V druhém SDS je tato uživatelská html stránka

<!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>SDS-MACRO </TITLE>
<TITLE>Verze milion.1 ze dne 26.4.2013 21:00 hod</TITLE>

<META content="text/html; charset=windows-1250" http-equiv=Content-Type> 
<META content="jaromir.lastovicka" name=author>
<META content="sds-macro, sds-micro, sds, macro, micro, onlinetechnology, csphone" name=keywords>
<META content="sds-macro, sds-micro, sds, macro, micro, 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; padding:20px;
   }
   a {text-decoration:none;color:#FEFEA3;}
   a:hover {text-decoration:none;color:#FEFEA3;}


 
   #header {color:#aaa}
   #footer {clear:both; padding-top:30px;}
   #footer p {color:#3366CC;}
   #footer a {color:#FEFEA3;}
   #footer a:hover {text-decoration:none;}
   h1 {font-size:18px; margin:0; padding-bottom:10px; color:#ddd;}
   h2 {font-size:15px; margin:0; padding-bottom:5px; color:#3366CC;}

   fieldset.rs232 {
    border:1px solid #777;
    margin: 0px 0px 22px 0px;
    padding: 0px 0px 10px 10px;
    color:#fff;
    text-align:right;
   }
   fieldset {
    border:1px solid #777;
    margin: 0px 0px 20px 0px;
    padding: 0px 10px 10px 10px;
    color:#fff;
    text-align:left;
   }

   legend {
    margin-left: 0px;
    padding: 0.2em 0.5em;
    border:1px solid #777;
    color:#0cc;
    font-size:14px;
    font-weight:bold;
   }




  </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]-->
     
   <!--
   ad1, ad2, ad3, ad4 - napěťové vstupy
    -->
 
  <script type="text/javascript">
   var tt;
   var pom;
   
   var reqAD=false;     //AD a cas

   //AD
   function reqADComplete(){
    if(reqAD.readyState == 4){
     if(reqAD.status == 200){
      var rE=reqAD.responseText.split("|");
      document.getElementById("ad1").innerHTML=rE[0]/1000+" V";
      }
    }
   }


   //smycka pro nacitani hodnot - timeout 2000
   function sdsps(){
    reqAD=false;

    if(window.XMLHttpRequest){
     reqAD=new XMLHttpRequest();
    }
    else if (window.ActiveXObject){
     reqAD=new ActiveXObject("Microsoft.XMLHTTP");
    }

    //AD
    if (reqAD){
     reqAD.open("GET", "get_txt[1]?rn=5&rand="+Math.random(), true);
     reqAD.onreadystatechange = reqADComplete;
     reqAD.send(null);
    }
    t=setTimeout("sdsps()",1000);
   }

   var sub=false;
   function getSub(){
    sub=false;
    if(window.XMLHttpRequest){
     sub=new XMLHttpRequest();
    }
    else if(window.ActiveXObject){
     sub=new ActiveXObject("Microsoft.XMLHTTP");
    }
   }

   function reqSetComplete(){
    if(sub.readyState==4){
     if(sub.status==200){;}
    }
   }

  </script>
</head>
 
<body onLoad="sdsps();">
   
<div id="toppanel">
  <div id="header">   
   <h1>Pokus o přenos ad hodnoty z jednoho SDS-ka na druhé SDS-ko</h1>
   <h3>První SDS-ko 192.168.1.250:443</h3>
   <h3>Druhé SDS-ko 192.168.1.252:333</h3>
   </div>
 
  <div id="control">

   <fieldset>
    <legend>Analogová hodnota AD1</legend>
    <h2>Baterie</h2>
    <p class=col1>AD1 Napětí baterie<label class=col2 id="ad1">0.00 V</label></p>
   </fieldset>

</div> <!-- control -->
 
</div>  <!-- toppanel -->

<div id="bottpanel">
  <div id="tempa">
  </div>
</div> <!-- bottpanel -->
 
  <div id="footer"> 
  <div class="content">   
  <p>Copyright &copy;2012 onlinetechnology <a href="http://www.onlinetechnology.cz" title="sds-micro">onlinetechnology.cz</a></p>
  <p>Copyright &copy;2012 onlinetechnology <a href="http://www.merenienergie.cz" title="sds-micro">merenienergie.cz</a></p>
  <p>Copyright &copy;2012 onlinetechnology <a href="http://www.eportal.merenienergie.cz" title="eportal.merenienergie">grafy a výsledky měření na eportal.merenienergie.cz</a></p>
  <p>Ostrovní elektrárny <a href="http://www.ostrovnielektrarny.cz" title="ostrovnielektrarny">Materiál na ostrovní elektrárny</a></p>

  </div>
  </div>
  <!-- end footer -->
  </body>
  </html>

38

Re: [vyřešeno] předávání dat

Pokročil jsem trochu s pokusem získávání surových dat z MPPT tristar pomocí http_get.
Dostal jsem se ale do mrtvého bodu

Když odesílám dotaz z prohlížeče tak to vypadá takto (teplota heatsinku)
odešlu: http://192.168.1.251:1111/MBCSV.cgi?ID= … &RLO=1
dostanu výsledek: 1,4,2,0,27 (to je 27 °C)

Pokud to pošlu pomocí SDS tak
odešlu:  http_get(192,168,1,251,'192.168.1.251','/MBCSV.cgi?ID=1&F=4&AHI=0&ALO=35&RHI=0&RLO=1');
dostanu výsledek: PRIJEM 200:  ram[0]=0 (nulová hodnota do ram)

Myslím si, že problémem jsou oddělovače hodnot (čárky) a SDS očekává (|).

Nemáte někdo nápad jak to elgentně vyřešit ?

39

Re: [vyřešeno] předávání dat

Protože ten tristar je na portu 1111, je potřeba nejprve nastavit sys[?] na hodnotu 1111, před voláním http_get().
Samotný zápis tak jak je v příspěvku (38) je v pořádku.

SDS neočekává nějaké konkrétní znaky, ty | se používají jen v demo html stránkách... data které SDS obdrží po zavolání http_get() si zpracuje SDS-C program jakkoli chce.

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

40

Re: [vyřešeno] předávání dat

sys[76] mám samozřejmně nastaven na hodnotu 1111 před tím než volám http(get). Budu hledat chybu někde jinde.

41

Re: [vyřešeno] předávání dat

Takže tristar pořád odolává, nedaří se mi.
Pro pořádek uvádím celý kód programu a odpověď v CONSOLE.
SDS-MACRO IP 192.168.1.252:333
TRISTAR IP       192.168.1.251:1111

Čučím do toho od převčera, nic mě nenapadá. Kdyby někdo náhodou něco zahlédl co by bylo špatně nebo měl někdo nápad co s tím, tak napište, Díky.

/*
   PROGRAM NA PRIJEM DAT Ze zařízení MPPT TRISTAR.
       TOTO SDS MACRO ma IP 192.168.1.252:333
   SDS MACRO prijima data od MPPT TRISTAR (IP 192.168.1.251:1111)
*/

var a;

test
{
sys[76] = 1111;         // port MPPT TRISTAR (192.168.1.251:1111)
sys[77] = 1;
sys[78] = 32;

echo(' ');
echo('HTTP GET...');

//MPPT TRISTAR je 192.168.1.250 -> a z tohoto ctu
http_get(192,168,1,251,'192.168.1.251','/MBCSV.cgi?ID=1&F=4&AHI=0&ALO=35&RHI=0&RLO=1');
goto cekam_na_http;

//pockam az probehne funkce do konce
label cekam_na_http:
if (sys[65] == 0) goto cekam_na_http;

//pokud server má problém:
if ((sys[65] != 1024)||(sys[75] != 200))
{
   echo('Chyba komunikace s www serverem ',sys[65],', http: ', sys[75]);

   return;
};
echo('PRIJEM ', sys[75],':  ram[0]=',ram[0]);
echo(' ');
a = 1;
echo('poz : ram[poz]');

smycka:
echo(a,'  :  ', ram[a]);
text[a] = ram[a];
a = a+1;
if (a <= ram[0]) goto smycka;
echo(' ');
echo(' PRIJEM : ');

echo(text[1]);
}

main
{
  echo('Start programu.');
opakovat:
  test();
//pockame 5 sec
sys[64] = 5;           //prijimam data kazdych 5 sekund
label cekej:
if (sys[64] != 0) goto cekej;

//znovu
goto opakovat;
}

odpověď console:
CONSOLE:

Start programu.

HTTP GET...
PRIJEM 200:  ram[0]=0

poz : ram[poz]
1  :  0

PRIJEM :

42

Re: [vyřešeno] předávání dat

Zajímavé je, že pokud data vyčítám z PHP scriptu spuštěného na mém PC (Apache WWW server), který vyčítá data s tristaru, tak vše funguje jak má. cool

43

Re: [vyřešeno] předávání dat

Můžete udělat záchyt pomocí Wiresharku, a to záchyt komunikace mezi Tristarem a PC ?
Pro další postup je potřeba vidět všechny pakety, které se mezi zařízeními vymění.

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