1

Téma: Programátor topení

Potřeboval bych z vlastní webové stránky programovat přes sys140-147 topení v jednotlivých místnostech. Chci využít všech 31 bitů každé proměné pro přenesení :
1. teploty, kde chci nastavit desetiny stupňů - na to spotřebuju 8 bitů (maximálně do 25,5 stupně mi stačí)
2. dál tam potřebuju dostat hodiny, kdy se má topit - když budu přenášet jen 23 hodin , tj. 23 bitů
Takže z webové sránky budu posílat do SDS proměnné nějaké číslo v desítkové soustavě.

Potřebuju tedy v SDS číslo převést do bitů , rozparsovat, převést části do čísel a řídit program.
Jaké jsou v SDS příkazy na převod do bitů a z bitů do čísel , je tam nějaký příkaz typu substring?

Pokud by bylo nějaké elegantnější řešení , tak pls o radu.

Díky
karel

2

Re: Programátor topení

SDS-C je má hodně společného s jazykem C. Můžete využít klasické bitové manipulace a logických operací.

 i = sys[140] & 0x0F; // do i se zapisou dolni 4 bity
 if (sys[140] & 0x80) {...}  // pokud je nastaven bit o vaze 0x80 pak ...

Také lze použít jiné triky, jak rozšířit počet využitelných přenesených hodnoty.

Např. si zvolte sys[140] jako indexovou proměnnou a sys[141] jako parametrovou.
Příklad:

ram[1] = teplota den 1
ram[2] = hodiny den 1
ram[3] = teplota den 2
...atd... třeba 100 položek v ram[] ...

potom zápis bude následovný

sys[140] = 2  // chci zapsat do ram[2]
sys[141] = 23 // a hodnota bude 23

tyto dve hodnoty lze nastavit na dalku (viz wiki),
nejprve tedy nastavime hodnotu do sys[141] a pak urcime kam ze se to ma zapsat do sys[140].

no a v SDS-C programu bude bezet (mimo stavajici program) tento kousek kodu:

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

Samozrejme je potreba cely program zapsat tak, aby se test na (sys[140] != 0) provadel co nejcasteji,
jinak se zmeny neprovedou...

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

3

Re: Programátor topení

To je opravdu skvělý a jednoduchý nápad. Takže jen pro ověření, zda jsem to správně pochopil:

Na webu do sys 140 zapíšu:
1(obyvak) nebo 2(ložnice) atd...
do sys 141 zapíšu hodinový časovač pro příslušnou sys 140
do sys 142 zapíšu teplotu pro příslušný sys140

Vše najednou odešlu do SDS, uložím do RAM a už s RAM pracuju jako s klasickými proměnnými.
Poté stavy (nastavení jednotlivých místností a časy topení) mohu vypsat standardně :"GET", "http://192.168.1.250/get_ram[xyz].......?

Díky moc za rady.

Jen pro zajímavost pro adamn. Hraju si s SDS Macro asi od června(naprostý amatér, laik programátor) a nyní jsem ve stavu:
1. měření teploty pro veřejnost: vyjaha.g6.cz
2. řízení solárních panelů pro ohřev vody v bazénu / 4 teplotní čidla / 2 výstupy
3. řízení a sledování FVE 5 kW ve spolupráci s Zelio 2 x 0-10 V + SSR relé
4. a nyní řeším řízení topení v domě, 5 teplotních čidel - bohužel jen dva volné výstupy
5. vše doprogramováno do grafů, statistik, spotřeba, dodávka, teploty v domě atd... vše do sidebaru a zároveň do tabletu, který mi visí na zdi
6. +takové roztomilé kraviny - když zapomenu zamknout garáž, tak mi SDS po 9 hodině pošle mail...

Je to skvělé zařízení.

4

Re: Programátor topení

Ano je to pochopeno správně. Jen teď nevím jestli jde zapsat více sys[] najednou, tuším že ne.
Proto je potřeba nejprve zapsat hodnoty, jaké se budou nastavovat, a až pak index kam přijdou.
S tím ram[] to je příklad, jasně bude to pak jako proměnné. Nebo si tam lze dát if a podle indexu si ručně vybrat do které proměnné to půjde atd. Vše je to nakonec o vlastní invenci.

Nakonec při použití ram[] pak to get_ram[] bude fungovat podle očekávání.

Měření teploty je pěkné, musím uznat. No škoda že ty teploty ze srpna nevydržely déle...

V prosinci '11 bude v eshopu k dispozici modul převodníku PWM na 0-10V, může se to hodit pro přímé ovládání z SDS.

Doplňující výstupy - buď použít RS485 (lze doplnit převodník do macra) a pak externí desku s relé, můžou to nakonec být i stovky reléových výstupů po celém domě, pomocí několika modulů, pověšených na rs485...
nebo použít např. SDS MICRO na místě kde je potřeba něco ovládat, a komunikaci vyřešit právě přes Ethernet.

Bylo by fajn pokud by udělala nějaká fotogalerie a návod pro další uživatele, kteří by si to chtěli taky doma udělat. Určitě by to ocenili. Příklad viz např. http://forum.merenienergie.cz//viewtopic.php?id=78

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

5

Re: Programátor topení

Díky za rady, nakonec jsem ale usoudil, že spotřebovat tři proměnné (140-142)  na programování topení je přece jen mnoho a snažím se to stvořit dle původního mého plánu.
Takže přes sys 140 odesílám z webu do SDS sekvenci: př:5252001, kde miliony mám identifikaci místnosti, statisíce mám teplotu a jednotky v dvojkové soustavě hodiny (stačí mi 8 hodin - noční proud).
Dá se říci, že v SDS jsem vše jednoduše  udělal , ale program je hlavně při převodu hodin do ram zbytečně složitý. (v ram mám vše, abych to dokázal na webu znovu vypsat).

{
ram[1]=sys[147];
ram[2] = ram[1]/1000000;//pro jednotlivé pokoje

if (ram[2] >= 5)  // pro obývák
{
ram[17]= 0; //vynulování všech hodin před programováním
ram[18]= 0;
ram[22]= 0;
ram[23]= 0;
ram[24]= 0;
ram[11]= 0;
ram[12]= 0;
ram[13]= 0;

ram[3] = ((ram[1]-5000000)/1000);//teplota formát xxx
ram[4] = (ram[1]-5000000);
ram[5] = ((ram[4]) - (1000*ram[3])); //hodiny v binární soustavě

  if (ram[5] >=128){ ram[5]-=128; ram[13]=3;}
  if(ram[5]>=64){ ram[5]-=64; ram[12]=2;}
  if(ram[5]>=32){ ram[5]-=32;ram[11]=1;}
  if(ram[5]>=16){ ram[5]-=16;ram[24]=24;}
  if(ram[5]>=8){ ram[5]-=8;ram[23]=23;}
  if(ram[5]>=4){ ram[5]-=4;ram[22]=22;}
  if(ram[5]>=2){ ram[5]-=2;ram[18]=18;}
  if(ram[5] == 1) { ram[17] = 17;} 
sys[147]=0; //vynulování sys147
 }

Není nějaký příkaz v SDS, který z řetězce "12345678" vytáhl true, když je číslo obsaženo?
př:
if  sys[8] je obsaženo v  "12345678" tak můžu topit.
Ušetřil bych hromadu ram.


Naveďte mě prosím taky někam na Wiki, kde jsou obsaženy informace o převodníku na 485, uvítal bych  ještě nějakých 8 výstupů. Na webu u Vás jsem nic nenašel,

Fotogalerii plánuju, ale musím nejprve vše dodělat, což při mé rychlosti programování (nebo raději výzkumu programování) nebude tak rychlé. :-( Odhaduju na jaře.

Plánuju taky 24 hodinový časovač pro ovládání čistírny bazénu po 0,5 hodiny, opět nějaký checkbox na webu jako nastavení, v sds vyhodnocení. 48 hodnot odešlu opět přes sys, jak je jednoduše vyhodnotit?? Nenapadá Vás něco jednoduchého? Opět něco ve stylu: v sds minuty do půlhodin a porovnávat, zda v řetězci jsou naprogramované půlhodiny.   

Díky  a zdravím.

6

Re: Programátor topení

Časovače - podívejte se na řešení zde: http://forum.merenienergie.cz//viewtopic.php?pid=686

Dále práce s bity v proměnné:

Využijte možností jazyka C:

 if (ram[5] & 128) { echo('osmý bit je nastaven'); };
 if (ram[5] & 4) { echo('třetí bit je nastaven'); };

Nemusíte nic odečítat nebo porovnávat. Přímo se zeptejte na konkrétní bit.

Předávání parametrů:

Tak ještě jednou. Nejprve nastavíte hodnotu. Pak index. A pak příkaz k zapsání. Protože to totiž nejde poslat najednou.

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[]

 if (sys[140] != 0) // 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].
Program si to převezme, zapíše to do ram[] a sám vynuluje sys[140], takže je připraven pro další kolo.

Nevidím důvod používat ten složitý zápis pomocí sekvence která se musí dělit. Pole ram[] má 512 indexů - to musí bohatě stačit.

Zkuste:
  řekněme že máme max 16 místností [ 0 až 15 ]
  a osm bloků hodin [ 0 až 7 ]

ram[BLOK*8 + 0] až ram[BLOK*8 + 15] = teplota pro jednotlivé místnosti 0 až 15, pro daný BLOK hodin

pak např. pro BLOK = 4 (což je pátá hodina) a šestou místnost (což je místnost index 5) bude
teplota v ram[] na pozici ram[4 * 8 + 5] což je ram[37].

Je to jednoduché, jen je potřeba se zamyslet a správně si udělat indexy (např. napsat do tabulky v excelu atd.).

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

7

Re: Programátor topení

Já jsem to řešil nějak takto. Ale stačilo mi jen těch 8 sys co jsou k dispozici. Pokud by jich bylo více je potřeba postupovat jak píše adam. V user.htm to mám rozparsované do jednotlivých textboxů aby to uměla nastavit manželka smile

setparam
{
 // sys[140] - pozadovana teplota, hystereze (vždy max 999sec)
 _poztep=sys[140]/1000;
 _pom=sys[140] % 1000;
 _hyst=_pom;

 // sys[141] - max horni teplota, min dolni teplota, krok (max 999sec)
 if (sys[141]>=0) {
  _maxtep=sys[141]/1000000;
  _pom=sys[141] % 1000000;
  _mintep=_pom/1000;
  _krok=_pom % 1000;
 }
 if (sys[141]<0) {
  _maxtep=(-1*sys[141]) / 1000000;
  _pom=(-1*sys[141]) % 1000000;
  _mintep=_pom/1000;
  _krok=-1* (_pom % 1000);
 }

 // sys[142] - cas udrzovani teploty (max 999999sec)
 _udrzuj=sys[142];

 // sys[143] - cas chodu motoru, cas ustaleni teploty (max 999sec)
 _motor=sys[143]/1000;
 _ustaleni=sys[143] % 1000;

 // sys[147] - bit rozklad - vyhrazeno pro ovládání programu
 //            1bit - zap/vyp topna zkouska
 //            2bit - zap/vyp cerpadlo
 //            3bit - zap/vyp otvirani ventilu
 //            4bit - zap/vyp zavirani ventilu
 _cerpadlo=0;
 if (sys[147] & 4) { _cerpadlo=255; }
...
...
...

8 Naposledy upravil: karel (2011-11-24 22:52:25)

Re: Programátor topení

Díky za rady od obou, dle vašich návodů jsem to dal relativně jednoduše do kupy.


Zkušenosti s 485 na macru někdo má?

9

Re: Programátor topení

485 je za normálních okolností jen převodník RS232/ RS485 kde na druhé straně vytáhneš zase RS232, pokud nemáš v plánu používat 485 na bitové úrovni a posílat na něj nějaké vlastní sekvence

10 Naposledy upravil: karel (2011-12-05 22:46:00)

Re: Programátor topení

citace:adamn
Doplňující výstupy - buď použít RS485 (lze doplnit převodník do macra) a pak externí desku s relé, můžou to nakonec být i stovky reléových výstupů po celém domě, pomocí několika modulů, pověšených na rs485...
nebo použít např. SDS MICRO na místě kde je potřeba něco ovládat, a komunikaci vyřešit právě přes Ethernet.


Jak doplnit převodník 485 do macra?
Díky

11

Re: Programátor topení

Určitě to bude zásah do DIN krabičky. Jelikož je zalepená, bude asi posléze problém s případnou reklamací. Raději bych počkal na ofiko verzi s vyvedenou 485 na konektoru. Jinak bez problémů zvládá komunikaci s moduly např. od www..papouch..com (http://www.papouch.com/cz/shop/product/ … a-teplomer). K 485 bude pár ukázkových programů + demo stránka.

12

Re: Programátor topení

Na základní desce SDS MACRO je konektor JP2. Je to 5 pinů v jedné řadě.
(Pozn. hned vedle je 2x5 pinů JP1 ale to je určeno pro vnitřní LCD, takže ten ne).

Konektor JP2 má piny popsány potiskem na desce.
Je tam postupně: DR, TX, RX, +3.3V, 0 (GND)

Tyto signály jsou signály rozhraní UART, plus napájení.

To je vše co potřebujete, aby jste připojil doplňkový převodník UART na RS485.

Jako převodník se využívá katalogového zapojení některého z vhodných převodníkových chipů.
Ideálně MAX3483ECSA+.

DR = direction drive = řízení směru. Připojte na piny DE a /RE převodníkového chipu.
RX = receive = příjem dat do SDS MACRO. Připojte na pin RO převodníkového chipu.
TX = transmit = výstup dat z SDS MACRO. Připojte na pin DI převodníkového chipu.

Takže buď si koupíte hotový převodník z ESHOPu, nebo si ho sestavíte sám
(a pak určitě nebudete mít problém s tímto návodem, prakticky bude zbytečný).

---

Stejně se postupuje pokud to budete chtít připojit k SDS MICRO (LIGHT, LIGHT2, DIN).
Bude vám tam ale chybět pin DR.
Ten buď nahraďte přímým spojem na +3.3V (popř. přes rezistor 68R, ať netrápíme chip),
takže převodník bude trvale ve vysílacím režimu,
nebo ho připojte na pin D0, a pak můžete režim kontrolovat ručně (programem z SDS-C).

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

13

Re: Programátor topení

Díky,
navigujte mě prosím lehce na vašm eshopu, nemohu ten zmiňovaný převodník 485 najít.
Kdy bude macro s 485 a jak je to se zárukou, jak se zmínil j@m?

14

Re: Programátor topení

Tohle jsou otázky na obchod - viz kontakt na eshopu.

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