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(
) |
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é.
- 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.
- 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),".
- 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),".
- 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),".
- Řá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(
) |
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(
) |
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í:
- 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).
- Řá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.
- 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(
) |
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í:
- 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)".
- 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.
- 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),".
- 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
- Domovská stránka produktu - http://HW.cz/iDo
- Objednat iDo v HW shopu
- Manuál k miniPLC iDo - iDo-manual_0.pdf
- iDo Config - UDP konfigurátor - iDo_Config.exe
- Stažení poslední verze firmware - 3.15
(18.11.2008)
- Článek "TEST - iDo = jednoduché programovatelné miniPLC" na serveru automatizace.HW.cz
- Článek "Počítadlo provozní doby s iDo"
- Článek "iDo – jde to i lépe aneb inteligentní automatizace pro každého"
- Další články týkající se senzorů najdete na serveru automatizace.HW.cz