Jste zde

Počítadlo provozní doby s iDo

ido_logo.png

V řadě případů je třeba počítat provozní dobu zařízení. Pokud je počítání provozní doby opravdu to jediné co požadujeme, pak lze s výhodou použít některé se specializovaných zařízení. Jakmile nám však počet takto sledovaných zařízení roste či je nutné po určitém počtu provozních hodin vykonávat důležité operace (promazání, revize apod.), lze s výhodou použít například iDo.

Zadání

Objednat iDo na obchod.HW.cz

Zařízení vyžaduje pravidelnou údržbu vždy po 1200 hodinách provozu, a tedy je třeba počítat, kdy stroj opravdu pracuje a kdy nikoliv. Pokud se blíží potřeba servisního intervalu je nutné informovat obsluhu a současně včas stroj zastavit. Pochopitelně s možností „odblokování“. Zařízení budou potřeba v řádu jednotek, maximálně desítek kusů a zákaznický vývoj by byl příliš drahý.

Řešení

Prvotním nápadem bylo použití klasické počítadlo provozní doby a jím vyřešit nejpalčivější problém, tedy zajištění pravidelné údržby. S ohledem na další požadavky bylo však použito iDo. Které rovněž může poskytnout možnost zablokování stroje.

Díky tomu, že program iDo probíhá v jednoduché smyčce, je počítadlo provozní doby je velmi jednoduchá aplikace a záleží jen na tom, jak složitě či komfortně ji chceme realizovat. Pustíme-li tak smyčku například každou sekundu, pak máme zdroj hodinového signálu a zbývá jen jednoduchá inkrementace proměnné při každém průběhu smyčky.

prog (
   count1 = count1  + in.1
)

Je-li vstup 1 aktivní (sepnutý), přičteme k proměnné count1 jedničku, jinak ponecháme na původní hodnotě. Pokud stačí pouze informace ve vteřinách a ta bude dále zpracovávána strojově například přes XML, je hotovo. Vykonání příkazu pochopitelně zabere nějaký čas a ten nám může trochu narušit časové informace (vykonání tohoto jediného řádku zabere asi 2ms a tak chyba činí cca 1s za 8,33minut), ale není nic snazšího, žen zkrácením intervalu spouštění smyčky čas korigovat. O kolik, to už nám řekne sám debugger.

V našem případě bychom za toto řešení moc pochváleni nebyli, takže k prostému přičítání vteřin ještě přidáme převod na minuty a hodiny.

prog (
   count1 = count1  + in.1,
   minutes1=iif(count1==60,minutes1+1,minutes1),
   usr.hour1=iif(count1==60,usr.hour1+1,usr.hour1),
   count1=iif(count1==60,0,count1),
   minutes1=iif(minutes1==60,0,minutes1)
)

První tři řádky jsou identické, resp. ekvivalentní s prvním příkladem. Jen se počítají nejen vteřiny, ale proběhne-li jich 60, přičte se minuta a je-li i těchto 60, přičte se hodina. V tuto chvíli je ale třeba také jednotlivé čítače po dosažení 60 vynulovat a o to se postarají poslední dva řádky.

Bystřejší si jistě povšimli že proměnná usr.hour1 nemá jméno identické s Count1 či minutes1, ale je uvozena flagem usr. Tím je dosaženo automatického ukládání při změně hodnot. Vzhledem k tomu, že EEPROM má životní cyklus omezen na 100 000 zápisů, ukládáme hodnotu jen po hodinách. Podle aplikace by samozřejmě bylo rovněž možné ukládat pouze při ukončení cyklu měření (rozepnutí vstupu). To už ale záleží na té které aplikaci, jak často může vypadnout .

Nyní již jen stačí přidat blokování stroje a informování obsluhy. Druhý úkon je jednodušší, čili začneme s ním :

prog (
   count1 = count1 + in.1,
   minutes1=iif(count1==60,minutes1+1,minutes1),
   usr.hour1=iif(count1==60,usr.hour1+1,usr.hour1),
   count1=iif(count1==60,0,count1),
   minutes1=iif(minutes1==60,0,minutes1),
   out.2 = usr.hour1 <= 1150
)

Je-li proměnná usr.hour1 větší nebo rovna 1200hodinám, sepneme relé.

Blokování stroje a jeho odblokování již bude trochu složitější, protože bude třeba zastavit čítání času bez ohledu na stav vstupu :

prog (
   usr.stop= usr.hour1<=1200,
   usr.odblok= iif(dip.1,1,0),
   out.1=iif(usr.stop&&usr.odblok,1,0),
   count1 = count1 + in.1,
   minutes1=iif(count1==60,minutes1+1,minutes1),
   usr.hour1=iif(count1==60,usr.hour1+1,usr.hour1),
   count1=iif(count1==60,0,count1),
   minutes1=iif(minutes1==60,0,minutes1),
   out.2 = usr.hour1 <= 1150
)

Samozřejmě by bylo možné rozšíření o řadu dalších funkcí, například zablokování stroje v případě, že do místnosti vstoupí nějaká osoba (abychom zamezili úrazu) či kontrolu dalších provozních parametrů jako je teplota nebo osvětlení. To vše jsou ale již věci závisející výhradně na uživateli.

V některých případech vestavěný debugger vyhodi chybu "Undefined_variable", byť je na první pohled vše v pořádku. Řečeno slovy klasika (M$ promine), toto není chyba, ale vlastnost. Nebo chcete-li, toto není chyba iDo, ale autora aplikace (tedy má). V prvním běhu je ta proměnná v tom místě skutečně nedefinovaná, její hodnota je tedy nahrazena 0 a program doběhne (čímž se ovšem ona proměnná definuje) a v příštím cyklu je už vše OK.

Chyba se dá obejít explicitní deklarací proměnné pomocí usr.xxxx := 0, někde na začátku programu. pokud si ale jen hrajeme, kdo by se tím zabýval :)

Download & Odkazy

Registrace k odběru informarcí o nových firmware

Hodnocení článku: