1

Téma: SDS-C Pro začátečníky

Projděte si následující odkazy:

http://shop.an-d.cz/wiki/index.php/SDS-C

http://shop.an-d.cz/wiki/index.php/SDS-C-START

http://shop.an-d.cz/wiki/index.php/SDS-C_popis_jazyka

http://shop.an-d.cz/wiki/index.php/Sdsc_sysf

http://shop.an-d.cz/wiki/index.php/Sdsc_sysp

Pokud potřebujete poradit s programováním, využijte toto fórum.

2 Naposledy upravil: livdes (2011-04-22 11:49:57)

Re: SDS-C Pro začátečníky

zdravím vás,
mohu v jednom běhu programu použít sys[64] vícekrat současne pokažde s jinou hodnotou, asi ne. Popřípadě jak řešit odpočítávání tří rozdílných časů zároveň.
Díky.

3

Re: SDS-C Pro začátečníky

Odpočítavač v sys[64] je jen "jeden". Nicméně odpočet tří různých času není problém, je to čistě o programátorské zručnosti.

Příklad:

var cas1, cas2, cas3;

vyprsel_cas_1
{
   cas1 = VYCHOZI_HODNOTA_V_SEC_PRO_CAS_1;

   udelej_neco_co_mas_delat_kdyz_vyprsi_cas_1();
}

krok
{
   cas1 = cas1 - 1;
   cas2 = cas2 - 1;
   cas3 = cas3 - 1;
   
   if (cas1 == 0) vyprsel_cas_1();
   if (cas1 == 0) vyprsel_cas_2();
   if (cas1 == 0) vyprsel_cas_3();
}

main
{
 
  //...
 
  cas1 = 10; //deset vterin, napriklad
  cas2 = 1000; //tisic vterin, napriklad
  cas3 = 1; //co vterinu, napriklad

  //...


smycka:

    //pockame jednu sekundu
    sys[64] = 1;

cekani_na_sec:
   if (sys[64] != 0) goto cekani_na_sec;

   //sem se to dostane kazdou sekundu
   krok();

   //a skocime nahoru
   goto smycka;

}

Toto byla kratka ukazka jednoducheho reseni. V hlavni funkci main() je co vterinu zavolana funkce krok(). Funkce krok() snizi cas u kazdeho pocitadla casu o jednicku. Jakmile je kterekoliv pocitadlo na nule, vime, ze uplynul nastaveny vychozi cas, zavolame tedy prislusnou cinnost a znovu nastavime pocitadlo.

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

4

Re: SDS-C Pro začátečníky

Snažím se naučit  jak na to, začínám pomalu chápat už jsem při compilaci ledacos opravil ale z touto hláškou si nedovedu poradit:

"0: coding error : Text must be terminated on the same line!


*** Analyze done - Code is OK ***".

Pořád to procházím do kola ale nic nenacházím.Prosím pomozte co mám hledat, dík.

5

Re: SDS-C Pro začátečníky

Můžete poslat text programu ? Tady na fórum.

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

6

Re: SDS-C Pro začátečníky

Na svojí obhajobu musím říct že se to učím bez předchozích zkušeností ,nejsložitější moje programování byl jednoduchý web. Snažím se to uchopit.Zkoušel jsem to napsat několika způsoby ,ale vždy jsem skončil u stejné hlášky. Potřebuji vědět kde dělám největší chybu jsem trpělivej a na ostatní většinou příjdu:

// odesilat na portal udaje z teplomeru 5ks....................musi se dodelat
 // pri prekroceni teplot kotle nebo boileru musí poslat mail
 // odesilat na portala vodomer a plynomer.....zatim neni
 // při sepnutí rele 1 poslat mail restart a zaroven preklopit rele na 3 sec. pak opět vypnout na nulu pokud bude rele stale sepnuto jeste dvakrat opakovat pokud bude stále vypnuto postat info mail porucha......musi se dodelat
 // snimani tlaku , pri poklesu na nulu poslat mail a preklopit rele..........zatim neni
 //po výpadku napájení poslat mail...............musi se dodelat
 //po nastartování poslat mail o startu...........musi se dodelat

//zaciname...................................................................................................................

// vyptá teploty cidel, bude teplota pod limit zasle jeden mail a zablokuje dalsi a odblokuje moznost opacnych mailu 
// az stoupne teplota nad limit posle jeden mail zablokuje a odblokuje zase opacnou moznost 

//promenne

var teplota_kotel,teplota_kotel_2, horni_2, dolni_2;
var teplota_boiler_1,teplota_boiler_2, horni_1, dolni_1;
var uz_jsem_poslal_email_pro_boiler_1;
var uz_jsem_poslal_email_pro_boiler_2;
var uz_jsem_poslal_email_pro_kotel_1;
var uz_jsem_poslal_email_pro_kotel_2;

mail_1
{ 
  //zepta se jestli uz odeslal mail kdyz ne tak posle
   if (uz_jsem_poslal_email_pro_boiler_1 = 0)  smtp_send('servis@lemigas.cz.cz','Dohled UPS','teplota boileru je mene nez pozadovana.');
   //zapamatuji si ze uz jsem to poslal, at to neposila milion emailu za sebou
   uz_jsem_poslal_email_pro boiler_1 = 1;
   //vynulovat mail_2
   uz_jsem_poslal_email_pro boiler_2 = 0;
}

mail_2
{ 
  //zepta se jestli uz odeslal mail kdyz ne tak posle
   if (uz_jsem_poslal_email_pro_boiler_2 = 0) smtp_send('servis@lemigas.cz','Dohled UPS','teplota boileru stoupa nad limit.');

   //zapamatuji si ze uz jsem to poslal, at to neposila milion emailu za sebou
   uz_jsem_poslal_email_pro boiler_2 = 1;
   //vynulovat mail_1
   uz_jsem_poslal_email_pro boiler_1 = 0;
}

mail_3
{
  //zepta se jestli uz odeslal mail kdyz ne tak posle
   if (uz_jsem_poslal_email_pro_kotel_1 = 0) smtp_send('servis@lemigas.cz','Dohled UPS','teplota kotle je mene nez 'pozadovana.');

   //zapamatuji si ze uz jsem to poslal, at to neposila milion emailu za sebou
   uz_jsem_poslal_email_pro kotel_1 = 1;
   //vynulovat mail_4
   uz_jsem_poslal_email_pro lotel_2 = 0;
}

mail_4
{ 
 //zepta se jestli uz odeslal mail kdyz ne tak posle
   if (uz_jsem_poslal_email_pro_kotel_2 = 0) smtp_send('servis@lemigas.cz','Dohled UPS','teplota kotle stoupa nad limit.');

   //zapamatuji si ze uz jsem to poslal, at to neposila milion emailu za sebou
   uz_jsem_poslal_email_pro kotel_2 = 1;
   //vynulovat mail_3
   uz_jsem_poslal_email_pro kotel_1 = 0;
}

main
{
  //vychozi stav
   //prevezmeme hodnoty meznich teplot(st.C)
  dolni_1 = 40;
  horni_1 = 41;
  dolni_2 = 60;
  horni_2 = 61;

  //pockame 10 sekund, az nabehne cely system
  wait(10000);

  //------------------------------------------------------------

  //hlavni smycka, ve ktere se vykonava proces
label smycka_rizeni:

  //teplota je brana z cidla
  teplota_boiler_1 = (sys[310] / 100);  //musime delit 100 aby to byly cele stupne Celsia
  teplota_boiler_2 = (sys[311] / 100);
  teplota_kotel_2 = (sys[312] / 100);
  teplota_kotel_1 = (sys[313] / 100);

  //podle aktualni teploty rozhodnu co dál
   if (teplota_boiler_1 < dolni_1) mail_1();
   if (teplota_boiler_1 > horni_1) mail_2();
   if (teplota_boiler_2 < dolni_1) mail_1();
   if (teplota_boiler_2 < horni_1) mail_2();
   if (teplota_kotel_3 < dolni_2) mail_3();
   if (teplota_kotel_3 < horni_2) mail_4();
   if (teplota_kotel_4 < dolni_2) mail_3();
   if (teplota_kotel_4 < horni_2) mail_4();

  //sem pridej dalsi testy pro dalsi cidla a rele (tj. to co je mezi "label smycka_rizeni:" a timto radkem)

  //a porad dokola
  goto smycka_rizeni;
}

7

Re: SDS-C Pro začátečníky

Je tam těch chyb více. Při takovém stavu většinou postupně smazávám řádky až se chyba přestane vyskytovat.

Chyba je v neuzavřeném stringu na ř.  if (uz_jsem_poslal_email_pro_kotel_1 = 0) smtp_send('servisx@lemigas.cz','Dohled UPS','teplota kotle je mene nez 'pozadovana.');

Dále jsem si všimnul jednoho "=" v if

a ještě chybějící podtržítka v
   uz_jsem_poslal_email_pro kotel_1 = 1;
   //vynulovat mail_4
   uz_jsem_poslal_email_pro lotel_2 = 0;

8

Re: SDS-C Pro začátečníky

Zkuste to takhle :

mail_1
{
  //zepta se jestli uz odeslal mail kdyz ne tak posle
   if (uz_jsem_poslal_email_pro_boiler_1 == 0)
   {
   smtp_send('servisx@lemigas.cz','Dohled UPS','teplota boileru je mene nez pozadovana.');
   }
   //zapamatuji si ze uz jsem to poslal, at to neposila milion emailu za sebou
   uz_jsem_poslal_email_pro_boiler_1 = 1;
   //vynulovat mail_2
   uz_jsem_poslal_email_pro_boiler_2 = 0;
  
}

... opravit i ostatní mail sendy

9

Re: SDS-C Pro začátečníky

Prosím zase jsem se zaseknul může mi to někdo zkontrolovat už to zkouším několik hodin ale pořád mi nejde podmínka if zapsat aby v ní nebyla chyba a navazovalo to.

//pokud  sepne S0 posle mail pocka 3 sec. přepne dve rele pocka 1 sec. prepne zpet.
var rele1;
var porucha_email;
var reset;

posli_porucha_email
{
  if (porucha_email == 0)
 {
 smtp_send('servisx@lemigas.cz','Dohled UPS','porucha , Restart kotle.');

   //zapamatuji si ze uz jsem to poslal, at to neposila milion emailu za sebou
   porucha_email = 1;
   echo (' porucha_email ');
//pocka 10 sec- a provede reset kotelny
      echo('reset po 3 vterinach');
       wait(3000);
   sys[231] = 1;
   sys[232] = 1;
   wait(1000);
   sys[231] = 0;
   sys[232] = 0;
   echo(' hotovo ');
   wait(1000);
   reset = 1;
 }
}

main

{
        //sepnutý kontakt
   if (sys[156] == 0) posli_porucha_email() else reset=0;
               
}

10

Re: SDS-C Pro začátečníky

Zkus třeba

if (sys[156] == 0) { posli_porucha_email(); } else { reset=0; }

11

Re: SDS-C Pro začátečníky

Je to vlastnost překladače SDS-C. Viz návod který je na WiKi.

Funkce if umí volat pouze funkce, nebo je potřeba použít konstrukci se závorkami: { a }.

PS. V tom programu výše, je tam
porucha_email = 1;
ale už se to nikde nenuluje. Takže to odešle email jednou a už nikdy.
Je tam potřeba doplnit vynulování (např. až chybový stav zmizí).

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

12

Re: SDS-C Pro začátečníky

Zkusím se zeptat v tomto vlákně , kde dělám chybu, jen zkouším abych se učil, jeden dotaz když jsem nahrál do zařízení prográmek na odesílání dat na portál a ted jsme nahrál jiný program , přepíše se ten původní ? jak docílím abyhc ten původní zachoval, to se musí vše bahrávat vždy najednou v jednom scriptu ?
kde dělám chybu, vše hlásí že je v pořádku, ale žádný mail mě nechodí (je to jen pokus), vše jsme samozřejmně okopíroval zde na foru :-)

var mez, odeslano;
init
{
mez = 3012;
odeslano = 0;
}
posli_email
{
  if (odeslano == 0)
  {
    smtp_send('navara@xyzxyz.com', 'teplotni alarm', 'Hlasim ze teplota (',sys[310],'°C) poklesla pod ',mez,'°C .');
    echo (' odeslan mail ');
  }
  odeslano = 1;
}

uz_je_nad
{
  odeslano = 0;
  smtp_send('navara@xyzxyz.com', 'teplotni alarm', 'Hlasim ze teplota (',sys[310],'°C) stoupla nad ',mez,'°C .');
  odeslano = 1;
}

main
{
 testuj_znovu:
 if (sys[310] < mez) posli_email() else uz_je_nad();
 goto testuj_znovu;
}
s SDS - Micro začínám, ale učím se

13 Naposledy upravil: roman_rja (2012-09-11 23:29:12)

Re: SDS-C Pro začátečníky

Už jsem asi přišel na to proč to nejede, nemám nastavený SMTP , jen že mě to nejde nastavit správně , někde dělám chybu a někde se píše že už místo IP adesy to bere název třeba mail.xyzxyz.com .. poradí mě někdo ? děkuji

s SDS - Micro začínám, ale učím se

14

Re: SDS-C Pro začátečníky

Nepomůže řešení z vlákna http://forum.merenienergie.cz//viewtopic.php?id=82 ?

15

Re: SDS-C Pro začátečníky

Děkuji, za radu, povedlo se, ale musel jsem založit účet na seznamu.
ted vše chodí jak má.
Teď všechno jak dát všechny programy do kupy, jak píši v jiném dotazu a budu bádat a zlepšovat dál, ještě jednou díky.

s SDS - Micro začínám, ale učím se