1 Naposledy upravil: kajman (2021-03-06 13:44:41)

Téma: Přiřazení více sys[xxx]na jedno tlačítko

Dobrý den, je možné přiřadit na jedno tlačítko na userweb více funkcí sys [14x], tak aby mi seplo více relé současně?
Třeba na tl. 1 sys [140] a [143], na tl.2 sys [142] a sys[144] a sys [140]......atd.
Něco jako tohle:<input type="button" value=" Tlacitko " onclick="javascript:sdsc_S(140,1), sdsc_S(143,1), sdsc_S(145,1);">
Pokud ano, jak to zapsat do SDSC a na Uweb. Zkouším to a nedaří se. Dík za info

2

Re: Přiřazení více sys[xxx]na jedno tlačítko

Ano v rámci toho javascriptu to jde udělat.

Udělejte si funkci do které to vše zabalíte, a teprve tu funkci volejte z onclick.

Něco ve smyslu

...
funkce { sdsc(140,1); sdcs(143,1); ... };
...

a potom ve stránce:

onclick="javascript:funkce()"

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

3

Re: Přiřazení více sys[xxx]na jedno tlačítko

Nedaří se mi to zprovoznit, zkoušel jsem kde co a pořád nic. Nešlo by to trochu víc vysvětlit?
www stránku si dokážu udělat, ale programování v céčku mi nic neříká. mám to takto. Dík

init
{
 sys[140]=0;
 sys[141]=0;
 sys[142]=0;
 sys[143]=0;
 sys[144]=0;
 sys[145]=0;
 sys[146]=0;
 sys[147]=0;
}
rele3
{
sys[140]==1; sys[143]==1; sys[145]==1;
}
main
{
rele3();    
}
// na www strance v JS mam toto 
 function rele3()  { 
    sdsc_S(140,1); sdcs_S(143,1);sdcs_S(145,1);  
   };
//volam toto
...
<input type="button" value=" TLACITKO " onclick="javascript:rele3()">
 

4

Re: Přiřazení více sys[xxx]na jedno tlačítko

ten javascript vypadá OK - ale co máte uvnitř javascript funkce sdsc_S() ?

Dále, sys 140 až 149 jsou pouze "uživatelské předávácí proměnně", tedy mechanismus předání hodnoty mezi javascriptem a programem uvnitř SDS (tj. vaš SDS-C program), (funguje to samozřejmě obousměrně ale o to teď nejde).

Takže, tím že nastavíte daný sys 140 (až 149) tak se ta nastavená hodnota (předpokládám 1) propíše do sds-c programu, ale pak je potřeba s tím ještě néco dále udělat (třeba sepnout relé, ale to je pak potřeba zápis do dalšího sys, viz jejich seznam na wiki).

Takže zbývá doplnit kód do vašeho sds-c programu, a to nějakou smyčku, která bude hlídat obsah v řekněme sys[140] a jakmile tam zachytí 1 (kterou tam vloźí ten javascript onclick přes ty javascript funkce),
tak provede zápis do sys[231] (až [228] - podle cílového relé) a tím relé sepne (nebo rozepne, záleží co se tam zapíše).

Toto programování v C je na jedno brdo s programováním v Javascriptu, takže se není potřeba obávat že by se to nepovedlo.

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

5

Re: Přiřazení více sys[xxx]na jedno tlačítko

Jedná se o mírně upravenou demo stránku pro SDS Micro, takže funkce sdsc_S obsahuje toto:

function sdsc_S(sysn,val){
   if(sub){
    sub.open("GET", "http://192.168.1.250/sdscep?sys"+sysn+"="+val, true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
   }
   else {
    getSub();
    sub.open("GET", "http://192.168.1.250/sdscep?sys"+sysn+"="+val, true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
   };
  } 

Představa byla taková, že pro začátek budou třeba jen dvě tlačítka (bude jich víc a měly by spínat v různých kombinacích) ON a OFF. Po stisku ON nastavením sys x,y,z...
na 1 sepnou současně  relata třeba R1, R3, R5 a R7. Po stisku ON zase všechny současně vypnou. To je všechno. Seznam sysů samozřejmě mám.

Takže zbývá doplnit kód... no zkusím se s tím ještě nějak porvat, třeba se stane zázrak.
No a k tomu poslednímu optimistickému bodu-v lednu příští rok SD. Takže asi tak.  :-)

6

Re: Přiřazení více sys[xxx]na jedno tlačítko

Skutečně už zbývá jen SDS-C program a bude to kompletní.

Zkuste to nejjednodušší:

main
{
 x:
   sys[231] = sys[140]; // prime ovladani rele 1 (via sys 231) prostrednictvim hodnoty zapsane zvenku do sys 140
   sys[232] = sys[140]; // prime ovladani rele 2 (via sys 232) prostrednictvim hodnoty zapsane zvenku do sys 140
  // atd.
 goto x;
}

Potom pro více možných kombinací už to bude jen o trošičku složitejší (použít if a bloky kódu).

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

7

Re: Přiřazení více sys[xxx]na jedno tlačítko

Mám to takhle a zůstavá to v kompilatoru viset na goto.

rele3
{
sys[140]==1; sys[143]==1; sys[145]==1;
}

init{
 echo('Start programu');
 sys[140]=0;
 sys[141]=0;
 sys[142]=0;
 sys[143]=0;
 sys[144]=0;
 sys[145]=0;
 sys[146]=0;
 sys[147]=0; 
}

main

{
rele3();


rele3;

   sys[196] = sys[140]; // prime ovladani rele 1 (via sys 196) prostrednictvim hodnoty zapsane zvenku do sys 140
   sys[197] = sys[140]; // prime ovladani rele 2 (via sys 197) prostrednictvim hodnoty zapsane zvenku do sys 140
  // atd.

 goto rele3;

}
 

Zkusil jsem kde co měnit, nevím co je špatně. Asi všechno. Nevím co dosadit za to x.

8

Re: Přiřazení více sys[xxx]na jedno tlačítko

Tady je oprava:

main
{
 rele3();

rele3label:

 sys...
 sys...
 
 goto rele3label;
}

Chybky tam byly dvě - stejný název návěští rele3 (stejný jako název funkce rele3() - a proto to hlásí chybu, názvy se nesmí použít vícekrat pro jiný účel), a druhá chyba že za návěštím byl středník místo dvojtečky. Vzorek kódu v tomto příspěvku už to ukazuje opravené.

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

9

Re: Přiřazení více sys[xxx]na jedno tlačítko

Děkuji za reakci. Program už to vzalo, nicméně pořád to nefunguje, ale snad už zbývá jen málo. Upřesním ještě můj požadavek.
SDS IO6 -na userweb je tlačítko ON po jehož stisku mají sepnout současně třeba relé R1+R3+R5, po stisku OFF zase vypnout. To je vše.
V SDS IO6 je jen tento SDS-C program - nic víc:

rele3
{
sys[140]==1; sys[143]==1; sys[145]==1;
}

init{
 echo('Start programu');
 sys[140]=0;
 sys[141]=0;
 sys[142]=0;
 sys[143]=0;
 sys[144]=0;
 sys[145]=0;
 sys[146]=0;
 sys[147]=0; 
}
main

{
rele3();

rele3label:

   sys[196] = sys[140]; // prime ovladani rele 1 (via sys 196) prostrednictvim hodnoty zapsane zvenku do sys 140
   sys[198] = sys[143]; // prime ovladani rele 2 (via sys 197) prostrednictvim hodnoty zapsane zvenku do sys 140
   sys[200] = sys[145]; // prime ovladani rele 2 (via sys 197)
  // atd.
 goto rele3label;
} 

Problém bych spíš viděl ve špatném umístění JS v userweb a taky asi ve špatném zápisu:

function sdsc_S(sysn,val){
   if(sub){
    sub.open("GET", "http://192.168.1.250sdscep?sys"+sysn+"="+val, true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
   }
 // spinani vice rele tohle je pridano
 function rele3()  { 
    sdsc_S(140,1); sdcs_S(143,1);sdcs_S(145,1);  
   }; //strednik ano ne ???
// konec 
   
   else {
    getSub();
    sub.open("GET", "http://192.168.1.250sdscep?sys"+sysn+"="+val, true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
   }// ?????? má byt ten středník ;
  }

A taky nevím jak to správně zapsat do onclick - má tam být jen rele3 nebo rele3,1 - nebo něco jiného?

<input type="button" value=" 3rele najednou " onclick="javascript:sdsc_S(rele3,1);">
 <input type="button" value="Off" onclick="javascript:sdsc_S(rele3,0);">
 

10

Re: Přiřazení více sys[xxx]na jedno tlačítko

OK zdá se že zbývá ten javascript.

Princip je jasný - nastavit sys [140 - 149] na potřebné hodnoty, a odsud si to pak sds-c program převezme a přepíše do sys které už ovládájí relé.

Takže.

Nejprve si to zkuste ručně. Nahrejte si ten sds-c program do SDS. V prohlížeči otevřete
http://192.168.1.250/sdscep?sys140=1
(=1 nebo =0 , a relé by mělo cvakat)

Tím si nezávisle ověříte, že ten sds-c program dělá co má.


Jinak problém vidím v pořadí zápisu věcí v tom javascriptu. Zkusím to opravit:

function sdsc_S(sysn,val)
{
   if(sub)
   {
    sub.open("GET", "http://192.168.1.250/sdscep?sys"+sysn+"="+val, true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
   }  
};

 // spinani vice rele tohle je pridano
 function rele3()  
 { 
    sdsc_S(140,1); sdcs_S(143,1);sdcs_S(145,1);  
  }; 
 
Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

11 Naposledy upravil: kajman (2021-03-09 18:59:14)

Re: Přiřazení více sys[xxx]na jedno tlačítko

Program je v SDS ale z prohlížeče žádná odezva. Na stránce se mění 1/0. V administraci v nastavení výstupů R1, R3, R5 nejdou přepnout na ovládání sdsc programem jsou stále v ručním off. Ručně off/on lze. Ostatní 3 relé jsou v sdsc a daji se měnit. To bude asi problém.
V parametru  R1 nastavení píše: chyba?
...
Tak se to podařilo rozchodit. Chyba byla sdsC programu  v té smyčce a sice nemělo tam být sys 196, 198, 200,... ale sys 231, 233, 235....
Ty sys 196.....blokovaly to nastavení výstupů pro ovládání z SDS programu.
Ted se zdá, že už to chodí i z uwebu. Ještě to otestuju a dám vědět. Ted si dám chvíli pauzu a pak napíšu jak to dopadlo.
Zatím mockrát děkuji za pomoc, bez toho bych se nehnul z místa. Díky..
...
Tak je to plně funkční i z Uwebu.
Mohl bych ještě poprosit o vysvětlení nebo lépe o kód na ty bloky kódů  s podmínkami if pro více tlačítek. Jak o tom píšete výš?
Díky

12

Re: Přiřazení více sys[xxx]na jedno tlačítko

no jo, ten sys pro relé - je to potřeba vždy zkontrolovat vůči seznamu na wiki, sám jsem se přehlédl.

Jsem rád že to už funguje jak má.

Ano, další krok bude složitější obsah programu sds-c. Ale tady si nejprve musíte říct, co to vlastně má dělat, a pak se to teprve dá zapsat do kódu.

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

13

Re: Přiřazení více sys[xxx]na jedno tlačítko

Mělo by to být v podstatě stejné jako v tomto případě 4-5x se opakující, jen pokaždé s jiným počtem relé.
Na uweb třeba 5 tlačítek, které budou spínat každé jinou sadu relé. V každé sadě sadě, ale mohou být použité i některé stejné relé jako v té pedchozí. Proto nemůže  být současně sepnuto více sad. Sady by měly být ovládané jen tlačítkem ON a časově ošetřené na třeba 1s. Takže zapne a vypne a můžu jít na jinou sadu. Nikdy se nesmí potkat více sad najednou. V některé sadě může být třeba 6 relé, v jiné zase jen 4. Zkoušel jsem to kopírovat tu do toho programu, ale vždy jde jen ta první sada. Šlo by to nějak rozumně vyřešit? Nechci už moc otravovat, už jste si semnou užil dost.Děkuji

14

Re: Přiřazení více sys[xxx]na jedno tlačítko

To už je lépe popsané zadání, se kterým se dá pracovat. To znamená - takové zadání se dá už zpracovat do kódu.
Nejprve tedy rozpadnutí celého procesu = návrh systému.

V rámci javascript kódu:
Sada 1 až 5 bude aktivována zápisem 1 do sys[141] aź sys[145]. A deaktivována zápisem 0.
Takže aktivace např. sady 3 bude sys[143] = 1;
To znamená, udělat si tolik onclick funkcí (pět), kolik má být tlačítek pro aktivaci (pět), a tyto funkce zapíší do patřičného sys námi dohodnuté číslo 1.
To samé pro deaktivaci sady, tzn. dalších pět tlačítek a pět funkcí.

Ve výsledku bude userweb schopen zapsat 1 nebo 0 do sys[141] až sys[145].

Dále následuje vyhodnocení a provedení akce, v programu sds-c.

Nejprve to uděláme bez zámku, tzn. půjde aktivovat či deaktivovat kterákoliv sada, i více najednou.
Zámek (možnost aktivace jen jediné sady) se přidá až v dalším kroku, ať se nám to nezamotá hned na začátku.

aktivuj_sadu_1
{
  sys[releX] = 1; 
 atd.
}

deaktivuj_sadu_1
{
  sys[releX] = 0;
  atd.
}

aktivuj_sadu_2
{
  sys[releY] = 1; 
 atd.
}

deaktivuj_sadu_2
{
  sys[releY] = 0;
  atd.
}

main
{
  echo('start programu');
  x:

  if (1 == sys[141]) { aktivuj_sadu_1(); } else { deaktivuj_sadu_1(); };
  if (1 == sys[142]) { aktivuj_sadu_2(); } else { deaktivuj_sadu_2(); };
  // atd. to si nakopírujte jak potřebujete pro X dalších sad relé

  goto x;
}

Samozřejmě ten program si upravíte podle sebe, protože jen vy víte která relé se mají zapínat a vypínat. Ale princip je zcela zřejmý, takže to nebude problém.


Další možnost je udělat to celé jinak, a to použít jen sys[140] a do něj dávat číslo sady (=1, =2, =5 atd.) a pak v programu udělat akci na základě tohoto čísla.
Jak píšu, možností je spousta, ale je potřeba vůbec někde začít.

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

15 Naposledy upravil: kajman (2021-03-10 20:07:14)

Re: Přiřazení více sys[xxx]na jedno tlačítko

Právě jsem odzkoušel ten program a funguje  to i z uwebu. Nastavil jsem si různé sady a ok. Po aktivaci relátka vrčí, protože jsou ve smyčce. Zkoušel jsem přes wait nastavit čas, ale bez výsledku. Zkusím si ještě pohrát.
Pro mě by bylo výhodnější ten způsob s využitím jen sys[140] a do něj dávat číslo sady (=1, =2, =5 atd.). Sepnutí každé sady omezit časově třeba na 1 sekundu.
.................
Podařilo se mi to upravit jiným způsobem i s i tím časem. Dá se říct, že je to tak, jak jsem chtěl.
Ale přesto z důvodu ušetření těch sys[140]... by mě zajímalo, jak se to dá řešit vše jen s tím jedním sys[140].
A taky jestli se ten můj zápis dá nějak zkrátit.
Mám to takto:

  
//R1_R3_R6
 if (sys[142]==1) {
  sys[231]=255;
  sys[233]=255;
  sys[236]=255;
  echo ('R1_R3_R6 on');
  wait(1000);
  sys[231]=0;
  sys[233]=0;
  sys[236]=0;
  }
  sys[142]==0;
 

16

Re: Přiřazení více sys[xxx]na jedno tlačítko

OK, takže si upravte javascript a stránku, tak, aby do sys[140] dávala 0 až 5.
Rozhodneme se, že hodnotě 0 dáme význam "všechny relé vypnout", hodnoté "1" zapnout 1 skupinu atd. až "5" zapnout 5 skupinu.

Pozn. A pak si ještě přidáme hodnoty (11 - 15) které ale uź stránka posílat nebude, o tom dále.

Až tohle budete mít hotové v javascriptu a prokážete si že svou web stránkou dokážete tedy takto manipulovat obsah v sys[140],
tak lze přistoupit k tvorbě sds-c programu.

vypni_vse
{
  // vzdy at je v sys 140 spravny udaj odpovidajici stavu
  sys[140] = 0; // "0" znamena vse vypnuto

  // a ted pro vsechny rele ! vypnout
  sys[rele] = 0; atd.
}

zapni_skupinu_1
{
  echo('zapinam skupinu 1');

  // vzdy at je v sys 140 spravny udaj odpovidajici stavu
  sys[140] = 11; // 11 znamena "skupina 1 byla a je zapnuta, probiha odpocet casu do vypnuti"
  sys[64] = 45; // budeme odpocitavat 45 sekund, upravte si to zde

  // a ted pro vsechny zapnout a vypnout, dle zadani pro tuto skupinu
  sys[rele] = 1; atd.
}

// ... atd. dopiste si stejnym principem skupinu 2 a 3 a 4


zapni_skupinu_5
{
  echo('zapinam skupinu 5');

  // vzdy at je v sys 140 spravny udaj odpovidajici stavu
  sys[140] = 15; // 15 znamena "skupina 1 byla a je zapnuta, probiha odpocet casu do vypnuti"
  sys[64] = 20; // budeme odpocitavat 20 sekund, upravte si to zde

  // a ted pro vsechny zapnout a vypnout, dle zadani pro tuto skupinu
  sys[rele] = 1; atd.
}

main
{
 x:

 // test na odpocet: (je sepnuta nejaka skupina) && (je uz odpocet na konci) ?
 if ( ( (11 == sys[140]) || (12 == sys[140]) || (13 == sys[140]) || (14 == sys[140]) || (15 == sys[140]) ) && (0 == sys[64]) ) vypni_vse(); 

 // test na prikaz z webu

 if (0 == sys[140]) vypni_vse(); 

 if (1 == sys[140]) zapni_skupina_1(); 
 . . .
 if (5 == sys[140]) zapni_skupina_5(); 

 // a dokola..
 goto x;
}

Řešení časovaného vypnutí je jednoduché, využijeme sys[64]. Tomu když se nastaví nějaká hodnota, tak si ji vezme, ale pak vždy samo automaticky, co 1 sekundu, tuto hodnotu sníží o 1 až se dostane na nulu, a tam zůstane. Samozřejmě kdykoliv v průběhu lze do sys[64] zapsat novou hodnotu. Může být také užitečné hodnotu sys[64] zobrazovat na user webu, aby se vědělo kdy se ta daná skupina "sama" vypne.

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

17

Re: Přiřazení více sys[xxx]na jedno tlačítko

Děkuji za návrh. Kvůli výpadku jsem si to přečetl až ted. Bohužel mi začala služba, tak  se k tomu dostanu nejdříve až příští týden ve středu. Ale obávám se, že to stejně nezvládnu ten JS.

18

Re: Přiřazení více sys[xxx]na jedno tlačítko

JS bude jednoduchý

function sdsc_S(sysn,val)
{
   if(sub)
   {
    sub.open("GET", "http://192.168.1.250/sdscep?sys"+sysn+"="+val, true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
   }  
};

a pak už jenom

<input type="button" value=" Vse vypnout" onclick="javascript:sdsc_S(140, 0);">
<input type="button" value=" Sada 1" onclick="javascript:sdsc_S(140, 1);">
...

podle potřeby.

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

19

Re: Přiřazení více sys[xxx]na jedno tlačítko

Tak mi to nedalo a v noci jsem to vyzkoušel. Vše funguje tak jak má. Ten JS je beze změny, tak, jak je v demo stránce. Bál jsem se, že tam budu muset dopisovat nějaké kódy. Jediná chyby byla v tom řádku test na odpočet. Ta druhá závorka patří ne za sys140, ale až sys64. Takže ještě jednou díky za pomoc.

A měl bych ještě jeden dotaz. Vždy po prvním načtení stránky nefunguje kterékoliv tlačítko na první kliknutí. Až na druhé. po obnovení stránky to samé. Pak už to chodí normálně. Dělá to na každé upravené demostránce micro.

20

Re: Přiřazení více sys[xxx]na jedno tlačítko

chová se to tak protože prohlížeč má "cache" (mezipaměť). Trik na to je .

function sdsc_S(sysn,val)
{
   if(sub)
   {
    sub.open("GET", "http://192.168.1.250/sdscep?sys"+sysn+"="+val+"&rand="+Math.random(), true);
    sub.onreadystatechange=reqCompleteR;
    sub.send(null);
   }  
};
Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !