1

Téma: Spínací hodiny s jednoduchým ovládáním

Možná by se někomu mohly hodit jednoduché spínací hodiny.
Jsou ovládané přes SYS[140]-SYS[143] (relé 1) a SYS[144]-SYS[147] (relé 2), samozřejmě není problém upravit (bylo to kvůli jednoduchému zkoušení ze základního webového rozhraní).
V každé proměnné je umístěn "program" ve formě DHHMMhhmm, kde HH:MM je čas zapnutí, hh:mm čas vypnutí a D kód pro den (0-6=pondělí-neděle, 7=pracovní dny, 8=víkend a 9=každý den).
POZOR: Pro lepší kontrolu pracovních dnů používám kódování, kde 0=pondělí a 6=neděle...
Chceme-li například sepnout relé1 každý den ve 13:20 a vypnout ve 14:10, dáme do jedné z proměnných SYS[]-SYS[143] (libovolné) údaj 913201410.

Tady je kód procedury, kterou musíte pravidelně volat ve svém programu:

spinaci_hodiny {
    var cas,on,off,dd,den;
    if (sys[10]!=0)                    //spínáme jen v první vteřinu minuty
        goto nespiname;
        
    cas = sys[8] * 100 + sys[9];    //připravíme čas HHMM
    den = ((sys[4] / 86400) + 3) % 7;    //den v týdnu, 0=pondělí
    
    //RE1
    on = sys[140] / 10000;            //rozebereme sys[140] HHMMHHMM (on/off)
    off = sys[140] % 10000;
    dd = on / 10000;                //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
    on = on % 10000;
    if (dd<7 && dd!=den)
        goto test2;
    if (dd==7 && den>4)
        goto test2;
    if (dd==8 && den<5)
        goto test2;
    //porovnáváme časy, pokud on=off (nebo 0), nic neděláme
    if (cas==on && sys[231]==0 && on!=off) { 
        sys[231]=1;
        echo('PRG1: RE1 zapnuto v ',sys[8],':',sys[9]);
    }
    if (cas==off && sys[231]!=0 && on!=off) { 
        sys[231]=0;
        echo('PRG1: RE1 vypnuto v ',sys[8],':',sys[9]);
    }

test2:
    on = sys[141] / 10000;            //rozebereme sys[141] HHMMHHMM (on/off)
    off = sys[141] % 10000;
    dd = on / 10000;                //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
    on = on % 10000;
    if (dd<7 && dd!=den)
        goto test3;
    if (dd==7 && den>4)
        goto test3;
    if (dd==8 && den<5)
        goto test3;
    
    //porovnáváme časy, pokud on=off (nebo 0), nic neděláme
    if (cas==on && sys[231]==0 && on!=off) { 
        sys[231]=1;
        echo('PRG2: RE1 zapnuto v ',sys[8],':',sys[9]);
    }
    if (cas==off && sys[231]!=0 && on!=off) { 
        sys[231]=0;
        echo('PRG2: RE1 vypnuto v ',sys[8],':',sys[9]);
    }

test3:
    on = sys[142] / 10000;            //rozebereme sys[142] HHMMHHMM (on/off)
    off = sys[142] % 10000;
    dd = on / 10000;                //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
    on = on % 10000;
    if (dd<7 && dd!=den)
        goto test4;
    if (dd==7 && den>4)
        goto test4;
    if (dd==8 && den<5)
        goto test4;

    //porovnáváme časy, pokud on=off (nebo 0), nic neděláme
    if (cas==on && sys[231]==0 && on!=off) { 
        sys[231]=1;
        echo('PRG3: RE1 zapnuto v ',sys[8],':',sys[9]);
    }
    if (cas==off && sys[231]!=0 && on!=off) { 
        sys[231]=0;
        echo('PRG3: RE1 vypnuto v ',sys[8],':',sys[9]);
    }

test4:
    on = sys[143] / 10000;            //rozebereme sys[143] HHMMHHMM (on/off)
    off = sys[143] % 10000;
    dd = on / 10000;                //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
    on = on % 10000;
    if (dd<7 && dd!=den)
        goto test5;
    if (dd==7 && den>4)
        goto test5;
    if (dd==8 && den<5)
        goto test5;
    
    //porovnáváme časy, pokud on=off (nebo 0), nic neděláme
    if (cas==on && sys[231]==0 && on!=off) { 
        sys[231]=1;
        echo('PRG4: RE1 zapnuto v ',sys[8],':',sys[9]);
    }
    if (cas==off && sys[231]!=0 && on!=off) { 
        sys[231]=0;
        echo('PRG4: RE1 vypnuto v ',sys[8],':',sys[9]);
    }

test5:
    //RE2
    on = sys[144] / 10000;            //rozebereme sys[144] HHMMHHMM (on/off)
    off = sys[144] % 10000;
    dd = on / 10000;                //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
    on = on % 10000;
    if (dd<7 && dd!=den)
        goto test6;
    if (dd==7 && den>4)
        goto test6;
    if (dd==8 && den<5)
        goto test6;

    //porovnáváme časy, pokud on=off (nebo 0), nic neděláme
    if (cas==on && sys[232]==0 && on!=off) { 
        sys[232]=1;
        echo('PRG5: RE2 zapnuto v ',sys[8],':',sys[9]);
    }
    if (cas==off && sys[232]!=0 && on!=off) { 
        sys[232]=0;
        echo('PRG5: RE2 vypnuto v ',sys[8],':',sys[9]);
    }

test6:
    on = sys[145] / 10000;            //rozebereme sys[145] HHMMHHMM (on/off)
    off = sys[145] % 10000;
    dd = on / 10000;                //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
    on = on % 10000;
    if (dd<7 && dd!=den)
        goto test7;
    if (dd==7 && den>4)
        goto test7;
    if (dd==8 && den<5)
        goto test7;
    
    //porovnáváme časy, pokud on=off (nebo 0), nic neděláme
    if (cas==on && sys[232]==0 && on!=off) { 
        sys[232]=1;
        echo('PRG6: RE2 zapnuto v ',sys[8],':',sys[9]);
    }
    if (cas==off && sys[232]!=0 && on!=off) { 
        sys[232]=0;
        echo('PRG6: RE2 vypnuto v ',sys[8],':',sys[9]);
    }

test7:
    on = sys[146] / 10000;            //rozebereme sys[146] HHMMHHMM (on/off)
    off = sys[146] % 10000;
    dd = on / 10000;                //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
    on = on % 10000;
    if (dd<7 && dd!=den)
        goto test8;
    if (dd==7 && den>4)
        goto test8;
    if (dd==8 && den<5)
        goto test8;

    //porovnáváme časy, pokud on=off (nebo 0), nic neděláme
    if (cas==on && sys[232]==0 && on!=off) { 
        sys[232]=1;
        echo('PRG7: RE2 zapnuto v ',sys[8],':',sys[9]);
    }
    if (cas==off && sys[232]!=0 && on!=off) { 
        sys[232]=0;
        echo('PRG7: RE2 vypnuto v ',sys[8],':',sys[9]);
    }

test8:
    on = sys[147] / 10000;            //rozebereme sys[147] HHMMHHMM (on/off)
    off = sys[147] % 10000;
    dd = on / 10000;                //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
    on = on % 10000;
    if (dd<7 && dd!=den)
        goto nespiname;
    if (dd==7 && den>4)
        goto nespiname;
    if (dd==8 && den<5)
        goto nespiname;
    
    //porovnáváme časy, pokud on=off (nebo 0), nic neděláme
    if (cas==on && sys[232]==0 && on!=off) { 
        sys[232]=1;
        echo('PRG8: RE2 zapnuto v ',sys[8],':',sys[9]);
    }
    if (cas==off && sys[232]!=0 && on!=off) { 
        sys[232]=0;
        echo('PRG8: RE2 vypnuto v ',sys[8],':',sys[9]);
    }

nespiname:
}

2

Re: Spínací hodiny s jednoduchým ovládáním

Zrovna neco takoveho programuju, koukam ze mame podobne napady. smile
Diky za inspiraci.