Jste zde

Mini PLC iDo a hrátky s tlačítky - 1. část

Mezi Vánocemi a Silvestrem jsem si v dovolené vyšetřil trošku času na nenáročné zábavné hraní se 4 tlačítky a miniPLC iDo, které vyrábí a prodává firma HW server. Přesněji hraní si s logickými binárními vstupy a reléovými výstupy. V následujícím článku najdete popis prográmků, kde se tlačítky mění frekvence spínání výstupu, podle stisknutého tlačítka se mění délka impulsu / sepnutí relé apod.

Zatímco v článcích a testech "TEST - iDo = jednoduché programovatelné miniPLC" a "Počítadlo provozní doby s iDo", kde jste si mohli na serveru automatizace.hw.cz přečíst praktický popis miniPLC iDo s dílny přímo HW serveru a vyzkoušet si na něm program pro realizaci měřiče provozního času a jednoduchý signálový multiplexer. Dnes pak sbírku příkladů programování rozšíříme a podíváme se na takové základní prográmky pro různé řízení reléového výstupu spínacími tlačítky připojenými na všechny 4 binární vstupy miniPLC iDo.

Znalé programátory upozorňuji, že nejde o nic světoborného a následující ukázky jsou spíše určeny pro začínající uživatele, kteří nemají s programováním čehokoliv moc velké zkušenosti. Ale následující prográmky lze rozhodně použít jako součásti pro větší celky.

Poznámka pro přepisování prográmku do mini PLC iDo: Pokud by vám i po vložení některého z níže uvedeného prográmku do iDo překladač vyhazoval chybu, zkuste si "pohrát" s mezerami mezi proměnnými a oddělovací čárkou v příkazech iif. To bývá často vyřešení problému. Jinak prográmky jsou všechny plně vyzkoušeny a odladěny a mě osobně bez problémů okamžitě fungovaly.

 

1. Sepnutí a rozepnutí výstupu stiskem tlačítka

 

Účel: Prvním stiskem spínacího tlačítka dojde k sepnutí reléového výstupu a druhým stiskem opět k rozepnutí výstupu. Vhodné jako část rozsáhlejšího programu, například pro potřeby ručního ovládání programu či výstupu.

Poznámky k provedí vstupů a výstupů miniPLC iDo:


 

Vzhledem k provedení vstupů miniPLC iDo, je možné na ně připojit jen beznapěťové výstupy zařízení, jakými například mohou být kontakty výstupního relé, nebo přímo připojit kontakty mechanických spínačů a přepínačů bez nutnosti k nim přivádět nějaké napětí. Protože však vstupy vyhodnocují / zjišťují zkrat, nevyskytuje se (nenaměříte) na nich žádné napětí a vstupní odpor je v řádu MegaOhmů. Výstup je pak typické třívývodové přepínací relé, které tak lze použít jako rozpínací (NC) nebo spínací (NO).

Syntaxe programu:

prog(

tlacitko1 = in.1,

out.1 = iif((stav==0) && (tlacitko1==1), 1, out.1),
out.1 = iif((stav==1) && (tlacitko1==1), 0, out.1),
stav = iif((out.1==1) && (tlacitko1==0), 1, stav),
stav = iif((out.1==0) && (tlacitko1==0), 0, stav)

)

 

Obrazovka vývojového prostředí s právě napsaným, uloženým a spuštěným programem "Sepnutí a rozepnutí výstupu stiskem tlačítka"

Popis programu:

Základní myšlenka programu je velmi jednoduchá: spínací tlačítko připojené na vstupu 1 provádí opakované přepnutí (postupné sepnutí a rozepnutí) kontaktu relé O1. Instrukcí „iif (proměnná1, proměnná2, proměnná3)“ se pak mění stav výstupu při každém zjištěném novém sepnutí tlačítka. Důležité je slovo "novém", což znamená, že dlouhým držením stisknutého tlačítka se nebude střídavě výstup přepínat. Pro každé přepnutí je nutné vždy tlačítko stisknout a poté uvolnit. Program tedy reaguje tzv. na hranu. Instrukce „iif“ pracuje tak, že když se proměnná1 = 1, tak vrací proměnnou2, když je rovna 0 vrací proměnnou3 . Aby však při nezvolení té dané kombinace nedošlo k změně výstupu, je nutné jako třetí proměnnou vždy zadat „vystup“. Bez třetí udané proměnné bohužel nelze příkaz „iif“ použít. Jde o vcelku primitivní záležitost, která v sobě ukazuje jen princip čtení binárních vstupů a ovládání výstupního relé.

  1. Na začátku je fyzickému vstupu in.1 přiřazena proměnná tlačítko1. Logický stav in.1 se mění podle sepnutí (zkratování) svorek na vstupu 1.

  2. Proměnné out.1, která fyzicky odpovídá stavu výstupního relé 0, závisí na hodnotě proměnné tlačítko1 a stav. Výstup se přepne, jestliže je tlačítko sepnuto a předchozí stav výstupu i tlačítka byl nula. To dělá řádek "out.1 = iif((stav==0) && (tlacitko1==1), 1, out.1),".
  3. Pokud zůstane tlačítko neustále sepnuté, bude výstup stále sepnutým, stejně tak, i když tlačítko pustíme (rozepneme), protože pak není pozitivně vyhodnocen ani jeden řádek "out.1=iif(....." a stav proměnné out.1 tak zůstává nezměněn. Změní se však hodnota proměnné "stav", díky které se program připraví na další stisk tlačítka. To zajišťuje řádek "stav = iif((out.1==1) && (tlacitko1==0), 1, stav),".

  4. Pokud tedy dojde k dalšímu sepnutí tlačítka (tj. při sepnutém výstupu (out.1=1)), dojde k pozitivnímu vyhodnocení rovnice "(stav==1) && (tlacitko1==1)" a výstup se rozepne (out.1=0). To dělá řádek "out.1 = iif((stav==1) && (tlacitko1==1), 0, out.1),".

  5. Řádek "stav = iif((out.1==0) && (tlacitko1==0), 0, stav)" zajišťuje, aby i následné pokračování držení sepnutého tlačítka nezpůsobilo opětovné sepnutí výstupu. K tomu je nutné tlačítko opět pustit (rozepnout jeho kontakt) a následně opět stisknout.

 

2. Změna délky sepnutí relé dle stisknutého tlačítka

 

Účel: Na základě stisku jednoho ze čtyř tlačítek se provede časově omezené sepnutí (rozepnutí) výstupního relé. Časová délka sepnutí závisí na stisknutém tlačítku. Tlačítko na vstupu 1 představuje nejkratší čas, tlačítko na vstupu 4 pak nejdelší dobu sepnutí.

Syntaxe programu:

prog(

tlacitko1 = in.1,
tlacitko2 = in.2,
tlacitko3 = in.3,
tlacitko4 = in.4,

pocet = iif(tlacitko1,10,0),
pocet = iif(tlacitko2,20,pocet),
pocet = iif(tlacitko3,30,pocet),
pocet = iif(tlacitko4,40,pocet),

out.1 = iif(pocitani==0,0,1),
pocitani = iif(pocitani==0,pocet,pocitani-1),
pocitani = iif(pocitani<0,pocet,pocitani)

)

 

Obrazovka vývojového prostředí s právě napsaným, uloženým a spuštěným programem "Změna délky sepnutí relé dle stisknutého tlačítka"

Popis programu:

Zde již program čeká na sepnutí jednoho ze čtyř tlačítek připojených na konektory I1 až I4. Podle toho, které bylo stisknuto se nastaví proměnná pocet a dle její hodnoty se udržuje výstupní proměnná v hodnotě 1, tedy výstup sepnutý / přepnutý. Fyzické časování je pak zde definováno periodou opakování programové smyčky (údaj Run Period pod programovacím oknem) a odečítáním hodnoty pocet přes proměnnou pocitani. Aby hodnota délky pulsu byla cca 1 až 4 sekundy, musí být při v programu uvedených hodnotách proměnné pocet (10 až 40) údaj Run Period 100 ms. To však samozřejmě určuje i reakci na stisk tlačítka, která v mém případě může být až 100 ms, což již někdy může být hodně. Pak je nutné zvýšit hodnoty proměnné pocet a snížit údaj Run Period.

3. Počet sepnutí relé na základě stisknutého tlačítka

 

Účel: Na základě stisku jednoho ze čtyř tlačítek se x-krát sepne a rozepne výstup (relé). Generují se tak 1 až 4 pulsy stejné délky. Tlačítko na vstupu 1 představuje jeden puls, tlačítko na vstupu 4 pak pulsy 4.

Syntaxe programu:

prog(

tlacitko1 = in.1,
tlacitko2 = in.2,
tlacitko3 = in.3,
tlacitko4 = in.4,

pocet = iif(tlacitko1,2,0),
pocet = iif(tlacitko2,4,pocet),
pocet = iif(tlacitko3,6,pocet),
pocet = iif(tlacitko4,8,pocet),

out.1 = iif(pocitani!=0, !out.1,0),
pocitani = iif(pocitani==0,pocet,pocitani-1),
pocitani = iif(pocitani<0,pocet,pocitani)

)

 

Obrazovka vývojového prostředí s právě napsaným, uloženým a spuštěným programem "Počet sepnutí relé na základě stisknutého tlačítka"

Popis programu:

Začátek programu je stejný jako v předchozím. Vlastně celý program vypadá na první pohled stejně, jako v předchozím případě se změnou délky pulsu (obdélníku). Rozdíly jsou vsak následující:

  1. Proměnná pocet označuje počet hran generovaného výstupního signálu, ne tedy počet pulsů. Protože v mém případě mělo tlačítko 1 generovat 1 puls a tlačítko 4 generovat 4 pulsy, jsou hodnoty proměnné pocet 2 hrany až 8 hran (jeden puls = 2 hrany).

  2. Řádek "out.1 = iif(pocitani!=0, !out.1,0)" střídavě invertuje výstup out.1, dokud není vyčerpaný obsah proměnné pocitani, která je na začátku naplněná hodnotou pocet, a která se postupně odečítá až do nuly.

  3. Délky generovaných pulsů je zde dané periodou vykonávání programové smyčky - viz hodnota údaj Run Period. Sice je tak program krásně jednoduchý, ale pokud chcete pulsy delší než 100 ms, již budete mít hodně pomalou reakci na stisk tlačítka (v nejhorším případě až celou délku pulsu).

4. Změna frekvence přepínání dle stisknutého tlačítka

 

Účel: Na základě stisku jednoho ze čtyř tlačítek dojde ke změně frekvence přepínání výstupu (relé). Mění se zde perioda obdélníkového signálu (přepínání), když střída zůstává stejná. Tlačítko na vstupu 1 představuje nejkratší periodu, tlačítko na vstupu 4 pak nejdelší periodu.

Syntaxe programu:

prog(

delka:=10,

tlacitko1 = in.1,
tlacitko2 = in.2,
tlacitko3 = in.3,
tlacitko4 = in.4,

pocet = iif(tlacitko1,1*delka,pocet),
pocet = iif(tlacitko2,2*delka,pocet),
pocet = iif(tlacitko3,3*delka,pocet),
pocet = iif(tlacitko4,4*delka,pocet),

log1 = iif(log1>0, log1-1,0),
log0 = iif((log1==0) && (log0!=0), log0-1, log0),

log1 = iif((log1==0) && (log0==0), pocet, log1),
log0 = iif(log0==0, pocet+1, log0),

out.1 = iif(log1>0,1,0)

)

 

Obrazovka vývojového prostředí s právě napsaným, uloženým a spuštěným programem "Změna frekvence spínání dle stisknutého tlačítka"

Popis programu:

Tento program je již trošku složitější na pochopení. Začátek programu je však skoro stejný jako u předchozích. Pouze zde přibylo definování délky generovaných pulsů přes proměnnou delka. Funkce zbytku programu s proměnnými log1 a log 2, reprezentujícími stav výstupního signálu, je následující:

  1. Proměnná log1, která definuje délku kladného pulsu periodického signálu, se naplní hodnotou pocet a pak je postupně každým průchodem smyčky odečítána. To dělá řádek "log1 = iif((log1==0) && (log0==0), pocet, log1)," a "log1 = iif(log1>0, log1-1,0)".

  2. Proměnná log0, která definuje zápornou hodnotu pulsu periodického signálu, se naplní hodnotou pocet+1 a začne se odečítat, když se vyprázdní proměnná log1. Proč hodnota pocet+1 ? No, protože při nulové hodnotě proměnné log0 se již opět nahazuje výstup out.1 do stavu 1 (generuje se kladný obdélník). Také změnou načítané hodnoty, lze případně měnit střídu signálu.

  3. Takto to jde pořád dokola, dokud se nestiskne jiné tlačítko a tedy nezmění se volba. To provádí o proti předchozím programům změna v řádku "pocet = iif(tlacitko1,1,pocet),".

  4. Frekvenci přepínání se určuje hodnotou proměnné delka, kterou lze měnit nejen v programu, ale i za chodu programu na obrazovce výpisu všech proměnných v programu - Variables. Samozřejmě výsledná časová perioda je určena i zadaným údajem Run Period, který může být 40 ms nebo větší. Kratší nelze zvolit z důvodu doby potřebné k vykonávání programu 37 ms. Hodnota proměnné delka může být například 1.0, 10, 50 apod. a to třeba i dálkově po ethernetu nebo přes XML.

Závěr

Všechny zde uvedené prográmky patří mezi to nejjednodušší, co lze s PLC iDo provádět, ale jako cvičení z logického myšlení nebo pro začínající programátory mohou být zajímavé. Zároveň je lze jen s minimem úprav vložit do nějakého většího programu a tím si ulehčit práci. Všechny zde uvedené prográmky byly vlastnoručně odzkoušeny jako plně funkční na miniPLC iDo.

V dalším díle se pak podíváme na trošku složitější "hrátky s tlačítky", kde budeme měřit délku sepnutí tlačítek nebo s nimi vybírat senzor teploty pro komparaci na výstup.

Více podrobných informací o iDo najdete v pdf manuálu iDo-manual_0.pdf a iDo lze jednoduše zakoupit v internetovém obchodě HW serveru = HW shopu.

Antonín Vojáček
vojacek@ hwg.cz

DOWNLOAD & Odkazy

Fotogalerie miniPLC iDo

  

  

  

  

Hodnocení článku: