Téma: Rozepnutí relé po uplynutí časové intervalu

Dobrý den,

v SDS Micro LIGHT E R2 mám program (viz níže), který po zapnutí zařízení sepne relé 1, počká 2 sekundy a pak relé rozepne. To je OK.

Problém nastane, když pak relé sepnu ručně přes uživatelskou html stránku. Program počká 2 sekundy, relé rozepne a vmžiku opět sepne. A tak pořád dokola jen s mžikovým pohasnutím diody (tj. rozepnutím relé) mezi těmi 2-sekundovými intervaly.

Jak ten kód upravit, aby po ručním sepnutí relé přes uživatelskou stránku progam počkal 2 sekundy, relé rozepnul a znovu už nespínal?

Díky

Mirek


 
#define REL1 sys[231]
#define ODPOCET_SEKUND sys[64]

init
{
  REL1 = 1;
}

main
{
  if (REL1 != 0) {
    ODPOCET_SEKUND = 2;
    label cekam:

      if (ODPOCET_SEKUND != 0) goto cekam;
    REL1 = 0;
  }
  if (sys[144]) { REL1 = 1; } // rucni sepnuti rele1 z uzivatelske html stranky
}

2

Re: Rozepnutí relé po uplynutí časové intervalu

Místo využití toho, že funkce "main()" se u SDS-C volá "pořád dokola", tak použijte svou vlastní smyčku.

.
.
.
main
{
 smycka:
 // 
 // vas opakujici se kod sem
 //
 goto smycka;
}
Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

3

Re: Rozepnutí relé po uplynutí časové intervalu

Abych nezakládal další téma, měl bych dotaz, v čem konkrétně se liší timeout sys[3] od odpočítávání sys[64]? Tedy kromě toho, že sys[3] zadávám v ms a sys[64] v sek. Je nějaký důvod pro preferenci jedné nebo druhé funkce?
Díky
Aleš

4

Re: Rozepnutí relé po uplynutí časové intervalu

A ještě 1 laický dotaz k timeoutu: nastavení funkce "_timeout=0; příp. "_timeout=sys[3]+xx;" je platné pro celý program nebo pokud je uzavřeno v proceduře {}, tak pouze pro tuto část programu? Jde mi o nastavení odděleného časování ve více vlastních procedurách.
Aleš

5

Re: Rozepnutí relé po uplynutí časové intervalu

Nebojte se zakládat nové témata, dříve si toho pak všichni všimnou a odpoví.

Takže: sys[3] je "uptime", což je hodnota pouze pro čtení. Nejedná se o odpočítávání - hodnota sys[3] se neustále zvyšuje, protože "uptime" znamená - "doba běhu".

sys[64] je vhodný pro jednoduché čekací smyčky, když se do sys[64] zapíše, začne se hodnota v sys[64] snižovat o jednotku po každé vteřině. Zkuste si to (nastavte tam hodnotu a postupně si vypisujte obsah sys[64] a uvidíte jak to funguje).

Ve SDS-C jsou všechny proměnné globální. To znamená, že proměnné se neuzavírají do oblasti mezi { }, tj. jejich "scope" není omezeno na jednotlivé bloky, ale je široké na celý program.
Zaveďte si tolik různých proměnných, kolik různých čekání potřebujete.

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