1

Téma: Předávání parametrů do SDS-C programu z venku

Často je potřeba dostat množství hodnot a parametrů do zařízení SDS. Např. z webové stránky nebo řídícího systému nebo z jiného SDS (předávání hodnot mezi dvěma programy SDS-C na dvou nebo více různých zařízeních) . . .

Využijeme http://wiki.merenienergie.cz/index.php/ … le_control .

To umožňuje zápis do jedné sys[] proměnné, z rozsahu indexů 140 až 147.
Někdy těchto osm položek může stačit, ale mnohdy to nestačí.

Pak je potřeba si pomoct:

sys[140] - příkaz k zapsání (program převezme hodnoty když zde není nula)
sys[141] - index do ram[]
sys[142] - nová hodnota do ram[]

Příklad zápisu hodnoty 1 do sys[140]: http://192.168.1.250/sdscep?sys140=1

vezmi_udaje
{
 
 if (sys[140] == 0) return;
 // neni-li sys[140] nulove
 
 i = sys[141]; // prevezmu cilovy index do promenne i
 ram[i] = sys[142]; // zapisu do ram[] novou hodnotu
 //
 sys[140] = 0; // prave jsem to zapsal, takze at se mi ten zapis porad neopakuje
 
}

Nejprve pošlete do SDS hodnotu v sys[142]. Následně tam pošlete index do ram[] v sys[141]. A nakonec sdělíte programu ať to zpracuje, tak že pošlete nenulové číslo do sys[140].
V SDS-C programu se musí pravidelně volat uvedená funcke vezmi_udaje - program si to v této funkci převezme, zapíše to do ram[] a sám vynuluje sys[140], takže je připraven pro další kolo.
Samozřejmě nemusí být cílem pole ram[]. Pokud si funkci upravíte tak, aby podle indexu rozlišovala vaše statické proměnné, můžete zapisovat i do nich.

Toto celé lze pěkně zkombinovat se http://forum.merenienergie.cz//viewtopic.php?id=130. Volání funkce vezmi_udaje vložte přímo do v tomto příkladu uvedené smyčky main_loop, hned za ty všechny ify (tj. přímo před řádek goto main_loop;, bez čehokoliv navíc).

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

2

Re: Předávání parametrů do SDS-C programu z venku

Pořád čekám kdy se objeví něco jako http://192.168.1.250/sdscep?sys140=123& … sys142=789  smile  moooc by to usnadnilo nastavování hodnot jedním tlačítkem "Odeslat" pro celou user.htm

3

Re: Předávání parametrů do SDS-C programu z venku

No jo to mě nenapadlo. Uděláme. Je to přidáno v požadavcích ? smile musim se podivat

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

4

Re: Předávání parametrů do SDS-C programu z venku

Přes registr dostupný z webu (140) si volím na který telefon zasílám nějakou zprávu. Chtěl jsem to ještě rozšířit o funkci zasílání na telefon jehož číslo zadám do registru. Již se mi stalo, že jsem si cizině zakoupil tamní simkartu a z tohoto důvodu by tato fce byla praktická. Nemůžu, ale přijít na to jak dostat tel číslo z registru do emailové adresy, která odesílá sms v příkazu smtp_send (´číslo@operátor.xx´ .............)

5

Re: Předávání parametrů do SDS-C programu z venku

Subject emailu může být jen jeden jediný text. Samotný obsah emailu je už pak skládán ze všech dalších parametrů při zavolání funkce.

Řešením je tady použít if.

 if (prvni)
 {
   smtp_send('1234@operator.xx', ...
 } else
 if (druhy)
   smtp_send('8965@operator.xx', ...
 } else
 ...
Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

6

Re: Předávání parametrů do SDS-C programu z venku

Dobrý den,
potřeboval bych trochu poradit, jak získat data do SDS po jeho zapnutí.
Mám na serveru udělán PHP script ve kterém mám:
...
    $url = 'http://192.168.1.250/sdscep?sys140=128';
    header('Location: '.$url);
...

Když tento script zavolám z prohlížeče, tak dojde k přesměrování na http://192.168.1.250/sdscep?sys140=128 a do sys[140] se zapíše 128.

Když ale tento script zavolám z SDS-C přes http_get(192,168,1,80,'192.168.1.80','/vytapeni/startup.php), tak mi to hodí chybu 301 (přesměrování), což je pravda, takže to je logické, podstatné ale je, že do sys[140] se nic nezapíše.
Můžete mi někdo poradit, jak to vyřešit?

7

Re: Předávání parametrů do SDS-C programu z venku

adamn napsal:

Subject emailu může být jen jeden jediný text. Samotný obsah emailu je už pak skládán ze všech dalších parametrů při zavolání funkce.

Řešením je tady použít if.

 if (prvni)
 {
   smtp_send('1234@operator.xx', ...
 } else
 if (druhy)
   smtp_send('8965@operator.xx', ...
 } else
 ...

Ano to mi funguje, ale přepínám si jen mezi čísly, která mám v programu "předvolené". V dotazu mi šlo o to jak dostat do odesílané adresy  nové číslo které vložím pouze do registru (např 141) smtp_send. Např.: smtp_send(´sys[140]@operator.xx´,......, ale tak, jak jsem to napsal to nefunguje a proto se ptám, jestli by to šlo udělat nějak jinak. Zkoušel jsem i přikaz DEFINE xxx sys[140]@operator.xx a pak smtp_send(´XXX@operator.xx´,......, s uvozovkama i bez, ale nepřišel jsem na řešení

8

Re: Předávání parametrů do SDS-C programu z venku

Tak jsem zkoušel ještě javascript, konkrétně :

 <script>  
    window.location.replace("http://192.168.1.250/sdscep?p=0&sys140="+param);
 </script>  

Opět, v prohlížeči to funguje, ale přes SDS-C ne. Sice mi to už neřve žádnou chybu, vrací to sys[65] = 1024 a sys[75] = 200, ale do sys[140] se nic nepřenese.

Nikdo nevíte jak to udělat? Nikdo jste neřešil jak přes script naplnit sys[140-147] ?

9

Re: Předávání parametrů do SDS-C programu z venku

Pokud je na místě přesměrování přes 301 apod., tak funkce skončí na této stránce, nepokračuje dále.
Musíte tam dát přímý odkaz přímo na konkrétní PHP skript.

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

10

Re: Předávání parametrů do SDS-C programu z venku

Omlouvám se, ale té odpovědi nerozumím. Já chci přes PHP script naládovat data do SDS, konkrétně SYS[140-147].  Kde mám dát přímý odkaz na konkrétní PHP script? V SDS žádný PHP script nemám.

11

Re: Předávání parametrů do SDS-C programu z venku

Netřeba se omlouvat. Vyřešíme.

Pochopil jsem to tak, že z SDS posíláte příkaz-data na svůj server, který vám dá "chybu" 301.

Když ale tento script zavolám z SDS-C přes http_get(192,168,1,80,'192.168.1.80','/vytapeni/startup.php), tak mi to hodí chybu 301 (přesměrování), což je pravda, takže to je logické, podstatné ale je, že do sys[140] se nic nezapíše.
Můžete mi někdo poradit, jak to vyřešit?

Tzn. posíláte z SDS-C něco někam na server (192.168.1.80) na soubor /vytapeni/startup.php. Váš server odpoví s 301 (protože je tam ten zápis do "Location", už to vidím). S tím si zařízení SDS neporadí a nemůže poradit.

Je to ono ?

Měníte "Location" v běžícím PHP skriptu, aby jste provedl HTTP GET a vykonal funkci "sdscep".
Takto to je špatně - tak to určitě nelze dělat.
Použijte http://php.net/manual/en/function.http-get.php , v příkladech tam jsou i ukázky jak to udělat.

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

12

Re: Předávání parametrů do SDS-C programu z venku

Takže http_get jsem po dvou dnech zdárně rozchodil. Chvíli jsem byl bezradný, protože mi to furt házelo interní chybu 500, než jsem pochopil, že http_get není standartně v PHP, ale musí se nainstalovat rozšiřující balíček. Takže to se povedlo, pokročil jsem dál, ale narazil jsem na další problém, který mi hlava nebere a opět bych potřeboval pomoc.
Na serveru mám následující PHP script:

<?php
 echo("START ");
 define ("NAZEV_SOUBORU_Pal", "./palivo.txt");

 $file_Pal=fopen(NAZEV_SOUBORU_Pal, "r");

 $datum=fgets($file_Pal);
 $palivo_den=fgets($file_Pal);
 $palivo_mesic=fgets($file_Pal); 
 $palivo_sezona=fgets($file_Pal); 
 echo($palivo_den);
 echo($palivo_mesic);
 echo($palivo_sezona);
 
 fclose($file_Pal);

  for ($i=1; $i<=4; ++$i)
  {
    $sysn = $i + 139;
    if ($i == 1)
    {
      $val = $palivo_den;
//      $val = 1111;   
    }
    if ($i == 2)
    { 
      $val = $palivo_mesic;
//      $val = 2222;
    }
    if ($i == 3)
    {
      $val = $palivo_sezona;
//      $val = 3333;
    }
    if ($i == 4)
    {
      $sysn = 147;
      $val = 128;    
    }
  $response = http_get("http://192.168.1.250/sdscep?p=0&sys".$sysn."=".$val, array("timeout"=>1), $info);
  }
?>

V souboru palivo.txt mám 4 řádky, na prvním je datum (s tím nedělám nic) a pak 3 řádky se třema hodnotama, které posílám do sys[140-142] a nakonec do sys[147] posílám 128, jako příznak, že už je přenos hotov.
Když tento script odstartuji z prohlížeče, tak se vše provede OK (data se vyčtou ze souboru, přes echo se mi zobrazí a pošlou do SDS). Když ho ale zavolám z SDS-C přes http_get(192,168,1,80,'192.168.1.80','/vytapeni/startup.php'), tak se mi do $palivo_den a $palivo_mesic načte nula, tzn. i v sys[140-141] mám nulu a zbytek se načte v pořádku. Když hodnoty nevyčítám ze souboru, ale posílám tam konstanty (viz. zakomentářované řádky), tak je také všechno OK. Takže se mi zmrší to vyčítání dat ze souboru, ale to absolutně netuším proč.
Napadá někoho čím to může být? Předem děkuji za pomoc.

13

Re: Předávání parametrů do SDS-C programu z venku

Asi uvažuji trochu jinak, zatím nemám SDS .... ale nestačilo by pouze z webu posílat data do SDS, např. přes cron ??? Pokud jsem to pochopil, tak SDS pošle http_get na web a ten zpětně http_get do SDS .... ????

SDS micro DIN - firmware 8.7.2014, SDS micro DIN - firmware Beta xx.x.2014
SDS nováček :-) Správce sítě, programátor, kutil .... :-)

14

Re: Předávání parametrů do SDS-C programu z venku

Určitě šlo, ale já potřebuji aby se tam ty data poslala v přesně definovaný okamžik, při náběhu SDS před náběhem PLC smyčky, např. po výpadku proudu. Takže SDS si to poslání musí vyžádat.

15

Re: Předávání parametrů do SDS-C programu z venku

Pokud jsem to pochopil dobře, tak na web posíláte jakoby zálohu dat (nějaké 3 proměnné) a po výpadku je zase potřebujete nacucnout. A co nějaké malé aku v záloze ? SDS máte asi starší verzi bez dataflash.
Předpokládám, že to hlídá nějaký kotel ... na pevné ? pelety ? Ten kotel není zálohovaný ?

SDS micro DIN - firmware 8.7.2014, SDS micro DIN - firmware Beta xx.x.2014
SDS nováček :-) Správce sítě, programátor, kutil .... :-)

16

Re: Předávání parametrů do SDS-C programu z venku

Ano, jde o zálohu dat. Aku dávat nebudu, bylo by to dražší než celé SDS a výpadky el. jsou minimální. Navíc SDS nic nehlídá, jen monitoruje. No vlastně hlídá palivo v zásobníku, ale to není tak podstatné. Na provoz kotle nebo vytápění nemá SDS vliv.
Sice jsem psal, že tím chci řešit výpadky proudu, ale to až v budoucnu. Teď je největší problém, že SDS mám chvíli, takže zatím ladím PLC (a ještě nějakou dobu budu) a každé nahrátí nového PLC mi ty data vymaže (to je třeba i 20x za den).
Jinak mám novou verzi s dataflash, ale ta má omezenou životnost, takže ji zatím nevyužívám. Aspoň ne do doby než budu mít PLC odlazené a ne do doby než bude možné do dataflash zapsat více dat najednou.
Aby bylo jasné co podnikám, tak můžete nahlédnou na http://82.114.194.154 sekce "Vytápení" a "Grafy měření". Ale je to teprve ve vývoji, tak to tak berte s rezervou wink

17

Re: Předávání parametrů do SDS-C programu z venku

Pěkné !!! To demo topení se mi moc líbí !!! ... ale ta Joomla big_smile ... já raději Drupal big_smile
Já bych asi šel na ten dataflash ... pár pokusů jestli to funguje a pak to můžete zakomentovat ...

SDS micro DIN - firmware 8.7.2014, SDS micro DIN - firmware Beta xx.x.2014
SDS nováček :-) Správce sítě, programátor, kutil .... :-)

18

Re: Předávání parametrů do SDS-C programu z venku

A to já raději Joomla smile .... , ale vraťme se k tématu.
Dataflash fungovat bude, to nemusím zkoušet a tím že to zakomentuji, tak se dostanu tam kde jsem. Každým uploadem PLC se mi konstanty smažou. Chci, aby mi to monitorovalo (sbíralo) data už teď a abych zároveň mohl rozšiřovat a zdokonalovat PLC.
Ta záloha na server musí fungovat, nevidím důvod proč ne, ale někde je tam nějaký zádrhel na který nemůžu přijít.

19

Re: Předávání parametrů do SDS-C programu z venku

Ukládání hodnot do DATAFLASH musí přežít přepsání SDS-C programu (např. při nahrání nového, nebo reset zařízení atd.).

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

20 Naposledy upravil: videoservis (2012-06-04 15:01:25)

Re: Předávání parametrů do SDS-C programu z venku

Hraju si s programem a jscriptem do user.html stránky a narazil jsem na problém a nevím, proč se to tak děje.
Po studiu různých www, jsem objevil script do www na odesílání hodnot, který jsem upravil pro optřeby SDS. Vše funguje jak má, hodnoty do sys[140] až .. to posílá, ale s jedním problémem.
V SDS mám program, který testuje přítomnost "1" v určitém sys[140...] - pokud se vyskytne - testuje relé na 0, pokud je 0, tak zapne a obráceně - pak vynuluje příslušný sys[140..].
Pokud pošlu ze scriptu toto (s návratem p=0) :
"GET", "http://192.168.0.60/sdscep?p=0&sys"+sysn+"="+aa, true);
tak to funguje jen při prvním odeslání - (relé sepne) ale už nereaguje na druhý povel
ve scriptu mám zakomponováno zobrazení návratové hodnoty a ta se zobrazí i se statusem O.K.
Ale pokud neběží SDS program (který nuluje příslušný sys[140..], tak zápisy s následnou kontrolou ve web rozhraní fungují.
Pokud pošlu ze scriptu toto (bez návratu p=0) :
"GET", "http://192.168.0.60/sdscep?sys"+sysn+"="+aa, true);
Tak tu funguje dobře i opakovaně, ale příjdu o návratovou hodnotu a status je 12152 neznámá chyba.

SDS program pro test mám toto :
// Výstupy :
// 1) Re1 - Osvětlení dům, cesta
#define RE1 sys[231]
// 2) Re2 - Osvětlení zahrada
#define RE2 sys[232]
// 3) Re3 - Reset kamerového systému
#define RE3 sys[233]
// 4) Re4 -
#define RE4 sys[234]
//---------------------------
toggle
{
echo('sys142 = 'sys[142]);
sys[142] = 0;
echo('sys142 = 'sys[142]);
if (RE1 == 0)
{
RE1 = 255;
}
else
{
RE1 = 0;
}
//wait(500);
return;
}
//---------------------------
toggle2
{
echo('sys143 = 'sys[143]);
sys[143] = 0;
echo('sys143 = 'sys[143]);
if (RE2 == 0)
{
RE2 = 255;
}
else
{
RE2 = 0;
}
return;
}
//----------------------------
toggle3
{
echo('sys143 = 'sys[143]);
sys[143] = 0;
echo('sys143 = 'sys[143]);
if (RE3 == 0)
{
RE3 = 255;
}
else
{
RE3 = 0;
}
return;
}
//----------------------------
main
{
main_loop:
if (sys[142] == 1) toggle() ;
if (sys[143] == 1) toggle2() ;
if (sys[143] == 2) toggle3() ;
goto main_loop;
}

A script do html :

<!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">
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<title>SDS send zkušební verze</title>
</head>

<body>
<script type="text/javascript">
function sdsc_S_ev(sysn){    //pokud se volá sdsc_S_ev doplní se aa z getElementu
aa=document.getElementById("sys"+sysn).value;
sdsc_S(sysn,aa);
}
function sdsc_S(sysn,aa){    //zde se volá sdsc_S které už obsahuje (sysn,aa)
var sub = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));
if(!sub){
alert("Tak tady to nepoběží!");
return true;
}
sub.open("GET", "http://192.168.0.60/sdscep?p=0&sys"+sysn+"="+aa, true);
sub.onreadystatechange=function () {zpracuj(sub); } ;
sub.send(null);
return false
}
function zpracuj(sub){
var txt;
if (sub.readyState == 4){ //bylo odpovězeno
if(sub.status == 200  || sub.status==0  || sub.status == 12152){    //status 12152 se vrací pokud se nepoužije p=0
txt=sub.responseText;
document.getElementById("ret").innerHTML = " = " + txt;
//alert("Status kod :"+sub.status+":"+ sub.statusText);
}
else alert("Chyba: "+ sub.status +":"+ sub.statusText);
}
}
</script>
</p>
Test zkušební verze:
<br />

<input type="submit" onclick="return sdsc_S(141,1)" value="Do 141 dá 1" />
SDS return : <span id="ret">no sync</span><br />
<br />
<input type="submit" onclick="return sdsc_S(142,1)" value="Do 142 dá 1" />
<br />
<input type="submit" onclick="return sdsc_S(143,1)" value="Do 143 dá 1" />
<br />
<input type="submit" onclick="return sdsc_S(143,2)" value="Do 143 dá 2" />
<br />
<input type="submit" onclick="return sdsc_S(143,3)" value="Do 143 dá 3" />
<br />

<input type="button" value="Odešle hodnotu do 140" onclick="return sdsc_S_ev(140)">
<input type="text" id="sys140" name="sys140" value="" maxlength="5">


</body>

</html>

Prosím o zkouknutí. Dík

21

Re: Předávání parametrů do SDS-C programu z venku

Hmmm zajímavé. Ty návratové hodnoty jsem ještě nikdy nepoužil. Asi to bude problém ve FW. Jestli je to potřeba rychle vyřešit, doporučuji napsat ještě jeden dotaz na sys[231] a podle něj nastavit něco na html stránce.

Jinak c-program bych poněkud odlechčil (snad bude funkční)...

SDS program pro test mám toto :
// Výstupy :
// 1) Re1 - Osvětlení dům, cesta
#define RE1 sys[231]
// 2) Re2 - Osvětlení zahrada
#define RE2 sys[232]
// 3) Re3 - Reset kamerového systému
#define RE3 sys[233]
// 4) Re4 -
#define RE4 sys[234]
//---------------------------

toggle
{
echo('sys142 = ', sys[142]);
sys[142] = 0;
echo('sys142 = ', sys[142]);
RE1 = 255-RE1;
//wait(500);
}
//---------------------------

toggle2
{
echo('sys143 = ',sys[143]);
sys[143] = 0;
echo('sys143 = ',sys[143]);
RE2 = 255-RE2;
}
//----------------------------

toggle3
{
echo('sys143 = ', sys[143]);
sys[143] = 0;
echo('sys143 = ', sys[143]);
RE3 = 255-RE3;
}
//----------------------------

main
{
if (sys[142] == 1) toggle() ;
if (sys[143] == 1) toggle2() ;
if (sys[143] == 2) toggle3() ;
}

22 Naposledy upravil: videoservis (2012-06-05 21:19:31)

Re: Předávání parametrů do SDS-C programu z venku

Dík za tip, to je o hodně chytřejší, než to if
Ten jscript jsem dal celej do sem : http://forum.merenienergie.cz//viewtopic.php?id=282

Tenhle prográmek je jen pro test. V origo se mi načítají do html stavy relátkových sys.
Zbylé věci jsem si nasměroval do ram, abych nemusel vytvářet několik get_sys dotazníků. Takhle si jen přidávám do ram a k tomu doplním příslušné rE[x] a document.getElementy.
Použil jsem i nápad s tím for (i=1;i<5;i++) pro zozhození rE[x]
Ještě tam mám změnu ubrázků LED diod přes script a asi by bylo lepší to udělat přes css a className. To si pak ještě cvičně zkusím.
Dělal jsem to html/script/css porvé a už jsem nad tím probdil několik nocí.

Funguje to, ten návrat jsem oželel - byla to jen kosmetická vada na kterou mne upozornil "audit" v GoggleChromu

23

Re: Předávání parametrů do SDS-C programu z venku

OK. Když tak mrkni do demo stránky na http://84.244.91.117:10000/user.htm  Právě to CSS jsem tam řešil na zobrazení stavů RS485.

Jo a ty SYS se dají už vyčítat i hromadně. Viz info dole na stránce na http://wiki.merenienergie.cz/index.php/ … le_control

24

Re: Předávání parametrů do SDS-C programu z venku

j@m napsal:

OK. Když tak mrkni do demo stránky na http://84.244.91.117:10000/user.htm  Právě to CSS jsem tam řešil na zobrazení stavů RS485.

Jo a ty SYS se dají už vyčítat i hromadně. Viz info dole na stránce na http://wiki.merenienergie.cz/index.php/ … le_control

jj, z tohohle tvého dema jsem také čerpal viz to použití for (i=....)
Na to hromadné vyčítání se mrknu. Nějak nestíhám tem překotný vývoj.

25

Re: Předávání parametrů do SDS-C programu z venku

Dobrý den, trochu mimo toto vlákno, ale.... chci si na plochu Win7 přidat widget/gadget, kde se bude propisovat aktuální stav S0 (e2 - mám tam pověšený elektroměr z měniče solární elektrárny) a potřebuji vdědět, jestli jde nějakým příkazem vyvolat tuto hodnotu v txt formě podobně jako třeba výpis čidla teploty (třeba http://192.168.1.250/temp.txt), je to možné? Děkuji.