Programování PLC Tecomat v jazyce mnemokódů Podpůrný text pro cvičení z předmětu Mikropočítače a PLC
Autor: Jan Dolinay, dolinay [at] fai.utb.cz
Poslední změna: 2.11.2016
Obsah 1. Úvod do kombinační logiky............................................................................................................. 3 Základní pojmy 3 Příklad 1: Domeček se 3 okny 3 Minimalizace logických výrazů 5 Úkol k procvičení 7 2. Programování PLC Tecomat ............................................................................................................ 8 Program pro příklad 1 (domeček se třemi okny) 8 Zapsání programu v prostředí Mosaic ......................................................................................... 9 Příklad 2 11 3. Kompletní řešený příklad z kombinační logiky ............................................................................. 13 4. Další instrukce (porovnání, skoky, LET a BET) ........................................................................... 15 Příklad 1 – instrukce LT, JMD, INR 15 Příklad 2 – instrukce LET, RES 16 5. Práce s jednotlivými bity proměnné............................................................................................... 17 Příklad – Zobrazení čísla v binární soustavě 17 6. Sekvenční logika ............................................................................................................................ 18 Realizace RS obvodu v programu pro PLC TECOMAT 18 Příklad 1 – Ovládání motorku 19 Program 2 – Vozík jeřábu 22 7. Časování akcí v programu, časovače a čítače ................................................................................ 25 Periodicky spouštěné procesy 25 Systémové registry S13 a S20 (systémový časovač) 25 Příklad 3 – inkrementace proměnné „citac“ jedenkrát za sekundu ............................................ 25 Čítače a časovače (TON, TOF, IMP, CTU, CTD, CNT) 26 Impulsní časovač ........................................................................................................................ 26 Příklad 1 – Schodišťový vypínač ............................................................................................... 27 Časovač „zpožděný přítah“ a „zpožděný odpad“ ...................................................................... 28 Instrukce TON............................................................................................................................ 28 Instrukce TOF ............................................................................................................................ 29 Příklad 2 – Manipulátor ............................................................................................................. 29 Čítače 30 Příklad 3 – Počítání výrobků ...................................................................................................... 31 8. Tabulkové úlohy ............................................................................................................................ 33 Příklad 1 – Domek se třemi okny 33 Literatura ............................................................................................................................................ 36
2
1. Úvod do kombinační logiky Programovatelné logické automaty (PLC) vznikly původně jako náhrada za reléovou logiku. Dnes již ovšem neslouží jen pro řešení logických úloh, ale zpracovávají i analogové veličiny apod. (např. PID regulátor realizovaný pomocí PLC).
Základní pojmy Logická proměnná – veličina nabývající pouze dvou hodnot: log 0 a log 1 (true, false). Logická funkce – předpis, který k souboru hodnot vstupních logických proměnných (argumentů) přiřazuje výstupní logické proměnné. Kombinační logika – kombinací vstupů je dána kombinace výstupů. Sekvenční logika – kombinací vstupů a vnitřním stavem je dána kombinace výstupů.
Jak se dá zapsat logická funkce? • Pravdivostní tabulka • Logický výraz • Karnaughova (čteme Karnafova) mapa
Příklad 1: Domeček se 3 okny Máme domek se 2 okny a dveřmi. Topení se má zapnout, pokud bude plocha otevřených oken nebo dveří větší nebo rovna 3 m2.
Plochy jsou následující: a = 2 m2, b = 2 m2, c = 3m2. Viz obrázek.
Řešení Definujme logické proměnné následovně: vstupy = otevřeno/zavřeno = (a, b, c) výstupy = topí/netopí = (T) 3
Máme zapsat (a potom i naprogramovat) logickou funkci, která zapne/vypne topení, tj. přiřadí 1 nebo 0 výstupní proměnné T podle hodnot vstupů. Zápis logické funkce můžeme provést několika způsoby: a) Vyjádření funkce pravdivostní tabulkou i
a
b
c
T
0
0
0
0
0
1
0
0
1
1
2
0
1
0
0
3
0
1
1
1
4
1
0
0
0
5
1
0
1
1
6
1
1
0
1
7
1
1
1
1
Tabulka musí pokrýt všechny možné kombinace hodnot vstupních proměnných, kterých je 2n, kde n je počet vstupních proměnných. V tomto příkladě n = 3, tedy možných kombinací je 2* 2*2 = 8. Proto 8 řádků v tabulce. Poznámka: pravdivostní tabulka se dá použít pro „rozumný“ počet vstupních proměnných, asi 2 až 6. Pro větší počet už by byla velmi rozsáhlá (např. tabulka pro 6 vstupů bude mít 26 tj. 64 řádků). Jak vyplnit pravdivostí tabulku? Asi nejjednodušší pomůckou je použít následující postup: • • • • •
V posledním sloupci se střídají nuly a jedničky (zde je to sloupec c) V dalším sloupci (b) se střídá vždy po dvou nulách a dvou jedničkách (21) V dalším sloupci po 4 nulách a 4 jedničkách. (22 = 4) atd... V každém dalším sloupci se střídají nuly a jedničky v počtu rovném následující mocnině čísla 2. Určíme hodnotu výstupu pro jednotlivé řádky tabulky podle zadání úlohy.
b) Vyjádření funkce logickým výrazem: Zapíše se výraz odpovídající stavu, kdy je výstup roven 1, tj. vybíráme řádky z pravdivostní tabulky, kde T = 1. T=abc+abc+abc+abc abc Poznámka: Ve výrazu používáme tyto logické operátory: * = AND = A (při zápisu je možno vynechat, podobně jako při zápisu násobení) + = OR = NEBO Výraz výše tedy přečteme takto: topí se, pokud není otevřeno „a“ A současně není otevřeno „b“ A současně je otevřeno „c“ NEBO (+) pokud není otevřeno „a“ A současně je otevřeno „b“ A současně je otevřeno „c“... 4
Poznámka 1: čárkou nad jménem proměnné se obvykle označuje, že proměnná má hodnotu log. 0. Z technických důvodů jsou zde psány čárky označující log 0 pod proměnnou místo nad. Výše uvedený výpis jsme vytvořili víceméně mechanicky z pravdivostní tabulky, ale v takto jednoduchém případě by se dal vytvořit i přímo ze zadání, viz vlastně ve výsledném výrazu zapíšeme výčet případů, kdy je splněna podmínka, že je otevřená plocha >= 3 m3, např. když budou okna a a b zavřena a c otevřeno (a b c), nebo když bude otevřeno b a c a okno a bude zavřeno (a b c).
c) Vyjádření funkce pomocí Karnaughovy mapy: Je to další způsob zápisu logické funkce.
Pozor: Zde pruh v řádku nebo sloupci tabulky značí, že tam má logická proměnná hodnotu log 1. Někdy se místo pruhů používá zápis hodnot vstupních proměnných v hlavičce sloupce, viz následující obrázek.
Minimalizace logických výrazů Základní výraz pro zápis logické funkce, tak jak je výše, je většinou zbytečně složitý a z něj vycházející realizace logické funkce je nadbytečná. Vyplatí se výraz zjednodušit, tj. získat úspornější řešení. ˇ Proč? Sníží se tím cena řešení - ať už pevné logiky počet relé) nebo u programu (počet instrukcí), protože 5
se tím zkrátí doba vykonání programu a odezva systému, delší program je také pracnější, hůř se ladí, je vyšší riziko vzniku chyb. Není ale třeba snažit se o absolutní minimalizaci. Stačí osvědčené postupy, které poskytnou při malé pracnosti rozumnou efektivnost. Pro minimalizaci lze použít různých postupů. 1) Základní, ze zápisu výrazů pomocí určitých pravidel Nevýhoda: pracné, je nutno hledat nebo si pamatovat pravidla podle kterých se minimalizuje Např. pravidlo: a + b + c = a Ukázka použití: a.b.c + a.b.c + a.b.c = a.b.c
2) Pomocí Karnaughovi mapy Výhoda: jednoduchý, „mechanický“ postup. Princip: hledáme v mapě co největší smyčky z jedniček a vstupní proměnná, která ve smyčce mění hodnotu, z výsledku vypadne. Pravidla pro smyčky: • musejí být symetrické a počet jedniček musí být mocninou dvou tj. 2, 4, 8 atd. • smyčka se může vytvořit pouze z polí, která spolu sousedí „plochou stěny“, nikoliv např. diagonálně. • Smyčky hledáme, jakoby mapa byla na kouli, resp. na válcích v podélném i svislém směru, tj. smyčky se dají tvořit i přes okraje mapy. • S tvořením smyček skončíme, když jsou už všechny jedničky v mapě „využity“ v nějaké smyčce
Ukázka minimalizace pro příklad 1:
Zde jsou dvě smyčky, červená a modrá. Červená: v této smyčce se mění hodnota proměnných a, b. C nemění hodnotu, na tomto řádku má hodnotu 1. Proto a,b vypadnou, c zůstane ve výsledném výrazu. Modrá: zde a, b nemění hodnotu, obě mají v tomto sloupci hodnotu 1, c mění hodnotu, (v provním řádku má hodnotu 0 a ve druhém 1), takže vypadne. Výsledný výraz: T = c + ab 6
Úkol k procvičení Máme domeček se čtyřmi okny podle obrázku. Úkolem je topit, pokud je 2 a více oken otevřených.
1. Sestavte pravdivostní tabulku 2. Napište logický výraz pro T 3. Nakreslete Karnaughovu mapu a proveďte minimalizaci Řešení: Pravdivostní tabulka bude mít 16 řádků (protože jsou zde 4 vstupní proměnné). Podle postupu uvedeného výše ji naplníme všemi kombinacemi hodnot vstupních proměnných a, b, c, d. Hodnotu výstupní proměnné T určíme podle pravidla výše tj. tak, že T je 1 v těch řádcích tabulky, kde se vyskytují 2 a více jedničky ve vstupních proměnných. Celkem je zde 11 takových řádků. Logický výraz napíšeme podle tabulky pro řádky kde T = 1. K-mapa s vyznačením smyček je na následujícím obrázku:
Výsledný výraz po minimalizaci je: T = ab + cd + bd + ad + bc + ac To odpovídá logice zadání: jestliže při 2 a více otevřených máme topit, pak jestliže je už jen některá dvojice vstupních proměnných v log. 1, stačí to již k určení hodnoty výstupu a nemusíme vyhodnocovat zbývajících vstupních proměnných. Ve výsledném výrazu jsou vlastně všechny možné dvojice sestavitelné ze vstupních proměnných a, b, c, d.
7
2. Programování PLC Tecomat PLC je možno programovat mnoha jazyky v různých vývojových prostředích. Většinou výrobce dodává ke svým PLC i vlastní vývojové prostředí. My budeme používat prostředí Mosaic od firmy Teco a programovat budeme v jazyku mnemokódů (obdoba assembleru u mikropočítačů). Při programování se jedná prakticky o mechanický přepis logického výrazu do instrukcí programu. Podstatné je pochopit princip zásobníků. V PLC Tecomat instrukce provádějí operace s čísly uloženými na zásobnících. Ukážeme si to na příkladu programu, který bude realizovat logickou funkci z Příkladu 1 z předchozí kapitoly.
Program pro příklad 1 (domeček se třemi okny) Naším úkolem je naprogramovat logickou funkci T = c + ab Nejprve definujeme vstupní proměnné a to následujícím způsobem: #def #def #def #def
a b c Top
%X10.1 %X10.2 %X10.3 %Y1.0
Pomocí direktivy #def přiřazujeme symbolům a, b, c, a Top určité vstupy nebo výstupy. PLC Tecomat má obrazy vstupů označeny jako X a obrazy výstupů jako Y. Zápis X10.1 znamená „bajt X10, bit číslo 1. Proměnná a tedy vlastně zastupuje jeden vstupní bit. Představte si skutečné použití PLC pro řízení topení v domku. Každá ze vstupních proměnných a, b, c odpovídá vstupu do PLC z nějakého snímače, který zjišťuje jestli je okno otevřeno nebo zavřeno. Tento vstup má pouze 2 hodnoty: zapnuto/vypnuto – a je tedy v programu vyjádřen jedním bitem. V PLC jsou hodnoty vstupů (obrazy vstupů) dostupné přes proměnné typu X. Samotný program realizující zadanou funkci potom zapíšeme takto: ld c ld a and b or wr Top Vysvětlení: 1. Instrukce ld c vloží proměnou c do zásobníku. 2. Instrukce ld a vloží proměnnou a do zásobníku 3. Instrukce and b provede log. součin (AND) mezi proměnou b a vrcholem zásobníku (tj. proměnnou a, viz bod 2). výsledek vloží na zásobník. 4. Instrukce or provede log. součet (OR) mezi dvěma „nejhornějšími“ hodnotami na zásobníku, tj. mezi výsledkem kroku 3 a proměnou c. Výsledek vloží na zásobník. 5. Instrukce wr zapíše hodnotu, která je na vrcholu zásobníku (výsledek kroku 4) do proměnné Top.
8
Pro lepší pochopení si projděte postup vykonání programu ještě jednou a sledujte přitom obrázky znázorňující stav zásobníku níže. Číslo u obrázku vždy odpovídá stavu zásobníku po provedení daného kroku.
Stejného výsledku bychom dosáhli i následujícím zápisem: ld c ld a ld b and or wr Top
Zapsání programu v prostředí Mosaic Nyní program, který jsme výše vysvětlili zapíšeme ve vývojovém prostředí Mosaic a vyzkoušíme na simulovaném PLC. Postup vytvoření programu v Mosaic 1. Spusťte prostředí Mosaic 2. Otevře se okno „výběr skupiny projektů“ 3. Klikněte na tlačítko Nový. Tím vytvoříme novou skupinu projektů. Vytvořte si jednu skupinu projektů, do níž budou patřit všechny vaše projekty vytvořené v rámci těchto cvičení, např. „MojeProjekty“. 4. Po zapsání jména skupiny projektů klepněte na OK. 5. Objeví se okno pro zadání jména prvního projektu. Zadejte jméno, např. domek1. A klepněte na tlačítko Otevřít. 6. Otevře se okno výběru řídicího systému. Vyberte možnost „řady PLC nepodporující IEC“. 7. Vyberte typ PLC „TC600“ a klikněte na Ok. 8. Otevře se zdrojový soubor DOMEK1.MOS. Zde budeme psát náš program do bloku mezi značky P 0 a E 0. 9. Nejprve zapište nad značku P 0 kód definic proměnných a pak za značku P0 ale před E0 instukce samotného programu. Viz obrázek: POZOR: u definic vstupů a výstupů (#def) doplňte %, např. #def a %X10.0
9
10. Uložte změny. 11. Nyní vytvoříme tzv. panel pro otestování programu. Panel nám umožní zadat hodnoty vstupních proměnných a sledovat stav výstupní proměnné. 12. V menu Soubor zvolte Novy a Panel. 13. V okně panelu klikněte kamkoliv a napište např. „Okno a:“. 14. Klikněte na ikonu Nový objekt v panelu nástrojů. Objeví se okno pro zadání parametrů nového objektu. Zadejte jméno „a“ (jméno proměnné definované v programu direktivou #def). Dále zadejte Formát – bit, Hodnota pro nastavení – 0, text v 1: „otevreno“ a text v 0: „zavreno“. 15. Klepněte na Ok. V dotazu zda použít jméno „a“ i když není známo zvolte ANO. 16. Stejným způsobem přidejte objekty pro proměnné b, c a Top. Nastavení je stejné, jen se mění jméno. U proměnné top navíc zaškrtněte okno „chráněná“. Tím proměnnou na panelu chráníme před změnou hodnoty uživatelem – jedná se přece o výstup, ten není možno přímo měnit, mění se pouze programově jako odezva na změnu vstupů. 17. Uložte panel pod jménem DOMEK1.PAM 18. Výsledný panel by měl vypadat jak je na obrázku:
19. V menu program klepněte na Přeložit. Překlad by měl proběhnout bez chyb. 20. V menu PLC klepněte na Run. Odpovězte Ano na dotaz zda vyslat kód . (Toto odpovídá nahrání programu do mikropočítače). Zvolte např. Studený pro typ restartu PLC. 21. Nyní uvidíte, že panel zobrazuje výchozí hodnoty proměnných, které jsme zadali v polích 10
„hodnota pro nastavení“. Poklepáním na vstupní proměnné můžeme přepínat jejich hodnotu mezi log 0 a log 1. Vyzkoušejte zda se proměnná Top nastaví na 1 při zapnutí okna a a b nebo okna c, tak jak to plyne ze zadaného výrazu. 22. Tím jsme úspěšně napsali a vyzkoušeli první program pro PLC.
Příklad 2 1. Zapište následující program v prostředí Mosaic a otestujte jeho chování pomocí panelu, kterým budete nastavovat hodnoty proměnných a, b, c. Pro všechny proměnné zvolte při hodnotě log 1 text Ano, pro log 0 text Ne. 2. Zapište logický výraz, který tento program realizuje 3. O jakou funkci se jedná? TIP: Pro zapsání programu vytvořte nový projekt a to tak, že klepnete pravým tlačítkem myši na název skupiny projektů (MojeProjekty) v okně Skupiny projektů vlevo a z menu vyberete Nový Projekt... Projekt nazvěte majorita.
Panel pro otestování programu:
11
Řešení Funkce zapsaná v programu: vystup = a . (b + c) + b . c Jedná se o tzv. majoritu ze tří. Výstup je 1 tehdy, jestliže většina (majorita) vstupů je v log 1. Jde vlastně o hlasovací zařízení :). Jestliže tedy alespoň dva vstupy jsou v log 1, je výstup 1. Výraz pro majoritu po minimalizaci by byl následující: vystup = ab + ac + bc Můžeme jej dále upravit „vytknutím“ a tj: vystup = a (b+c) + bc Slovně vyjádřeno: výstup je 1, jestliže je vstup a 1 a současně i vstup b nebo c. Anebo jestliže je b log 1 a současně i c. Tedy pokud je a v log. 1 pak stačí aby bylo b NEBO c také jedna, pokud ne, pak musí být b i c jedna.
12
3. Kompletní řešený příklad z kombinační logiky Automatické vystřihování Zadání Vystřihovací zařízení může být obsluhováno ze tří stran. Materiál je zasunut a tím aktivuje dva ze tří senzorů S1, S2, S3. V této poloze dojde k vystřižení. Viz obrázek níže. Stříhání musí být zahájeno pouze tehdy, jsou-li 2 ze 3 senzorů aktivní. Z bezpečnostních důvodů se naopak musí vyloučit stříhání, jestliže jsou aktivovány všechny senzory. V tomto případě má být hlášena chyba. • Sestavte pravdivostní tabulku • Napište program v jazyku mnemokódů pro PLC Teco realizující zadanou funkci
Obr. – Schéma vystřihovacího zařízení (pohled shora) Definujme proměnné pro vstupy a výstupy: Vstupy: Senzor S1 – proměnná Sa1, log 1 = materiál je nad senzorem Senzor S2, S3 obdobně proměnné Sa2 a Sa3. Výstupy: Spínač stříhání – proměnná YY1, log 1 = střihnout Chybové hlášení – proměnná ERR, log 1 = chyba Vyplňme pravdivostní tabulku: Sa1 Sa2 Sa3 YY1 ERR 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 1 0 1 0 0 0 0 1 0 1 1 0 1 1 0 1 0 13
1
1
1
0
1
Tabulku vyplníme tak, že pro všechny možné kombinace hodnot senzorů Sa1 až Sa3 napíšeme odpovídající hodnoty výstupů YY1 a ERR. Víme, že střihnutí se má provést (tj. YY1 má být 1) pro případ, kdy je materiál zasunut tak, že zakrývá vždy dva ze tří senzorů. Podle toho přiřadíme do sloupce YY1 jedničky v těch řádcích, kde jsou právě dvě jedničky ve sloupcích vstupů (Sa1, Sa2, Sa3). V ostatních případech bude YY1 rovno nule. Výstup ERR je 1 jen v případě, že jsou zakryty všechny senzory, tedy v posledním řádku tabulky. Z tabulky vypíšeme výrazy pro YY1 a ERR: YY1 = Sa1 Sa2 Sa3 + Sa1 Sa2 Sa3 + Sa1 Sa2 Sa3 ERR = Sa1 Sa2 Sa3 Přípomeňme, že vypisujeme ty řádky tabulky, ve kterých je výstupní proměnná rovna 1. Podtržení znamená, že daná proměnná má hodnotu 0, viz první lekce. Napišme program pro PLC Teco. Nové instrukce: LDC x – vloží na zásobník negovanou hodnotu proměnné x ANC x - provede součin vrcholu zásobníku s negovanou hodnotou operandu x Výpis #def #def #def #def #def
Sa1 Sa2 Sa3 YY1 ERR
%X1.0 %X1.1 %X1.2 %Y1.0 %Y1.1
P0 LD AND ANC
Sa1 Sa2 Sa3
; S1 na vrchol zasobniku ; S1 * S2 ; S1 * S2 * S3
LD ANC AND OR
Sa1 Sa2 Sa3
LDC AND AND OR WR
Sa1 Sa2 Sa3
LD AND AND WR E0
Sa1 Sa2 Sa3 ERR
; + mezi predchozimi trojicemi
YY1
14
4. Další instrukce (porovnání, skoky, LET a BET) Tato kapitola ukazuje některé další instrukce, které se často využívají. INR – inkrementace operandu (přičtení jedničky) DCR – dekrementace operandu (odečtení jedničky) EQ, GT, LT – funkce porovnávání JMP, JMD, JMC – Skoky LET – impulz od náběžné hrany. Nastaví na vrcholu zásobníku log. 1, pokud dojde ke změně stavové proměnné z log. 0 na log. 1(náběžná hrana), jinak nastaví na vrchol zásobníku log. 0. BET – impulz od libovolné hrany. Nastaví na vrcholu zásobníku log. 1, pokud dojde ke změně stavové proměnné z log. 0 na log. 1 nebo z log. 1 na log. 0 (libovolná hrana), jinak nastaví na vrchol zásobníku log. 0. SET – podmíněné nastavení operandu na 1 (pokud je na vrcholu zásobníku nenulová hodnota) RES – podmíněné vynulování operandu (pokud je na vrcholu zásobníku nenulová hodnota) V další části jsou uvedeny příklady použití těchto instrukcí.
Příklad 1 – instrukce LT, JMD, INR Pokud má proměnná „cislo" hodnotu větší nebo rovnu 10, zvětšuje se proměnná „citac“ o 1 v každé otočce cyklu. #reg byte cislo #reg word citac P0 LD cislo LT 10 JMD konec INR citac konec: E0 Vysvětlení Hodnotu proměnné „cislo“ porovnáváme s 10 pomocí instrukce LT. Tato instrukce vloží na vrchol zásobníku log. 1, jestliže je číslo na vrcholu zásobníku menší než její operand. V opačném případě vloží log. 0. V našem případě tedy pokud v proměnné „cislo“ je hodnota menší než 10, bude po provedení instrukce LT na vrcholu zásobníku log. 1, jinak tam bude log. 0. Podmíněný skok JMD se provede, pokud je na vrcholu zásobníku nenulová hodnota. V tom případě se přeskočí instrukce INR a proměnná „citac“ se nezmění. Pokud se JMD neprovede, provede se INR a zvětší se hodnota „citac“ o 1. Pokud bychom chtěli podmínku otočit a porovnávat zda je číslo větší než 10, použili bychom instrukci GT místo LT. Ověření funkce Vytvořte na panelu objekty pro proměnnou „cislo“ a „citac“. Pokud zadáte do proměnné „cislo“ hodnotu 10 a vyšší, začne proměnná „citac“ rychle narůstat (v každém průchodu otočkou cyklu se k ní přičte 1). Pokud zadáte do „cislo“ hodnotu menší než 10, hodnota „citac“ se nebude měnit.
15
Příklad 2 – instrukce LET, RES Vynuluje proměnnou „citac“ při náběžné hraně signálu „vstup“. #reg word citac #def vstup X1.0 #reg bit stav P0 LD vstup LET stav RES citac E0
; stavová proměnná
Vysvětlení: Program zajistí, že proměnná „citac“ se vynuluje pouze jednou po stisku tlačítka, ale není nulována opakovaně po celou dobu, kdy je tlačítko stisknuto. Instrukce LET při každém vykonání nastaví do proměnné „stav“ hodnotu, jaká je na vstupu (viz popis chování instrukce v nápovědě Mosaic). Na začátku programu předpokládejme na vstupu hodnotu log. 0 (vstup = 0) a stav = 0. V této situaci zapisuje instrukce LET na vrchol zásobníku log. 0. Když se na vstupu objeví log. 1 (stisk tlačítka), pak instrukce zapíše do proměnné stav log 1. Protože tím došlo ke změně v proměnné „stav“ z 0 na 1, zapíše také log. 1 na vrchol zásobníku. Při dalším provedení instrukce LET (v další otočce cyklu) již platí, že v proměnné „stav“ je log 1 a ke změně z 0 na 1 tedy nedochází. Instrukce LET proto na vrchol zásobníku nastavuje log 0. Ověření funkce: Zapište program a vytvořte panel s objekty: • „vstup“, formát bit • „citac“, formát bez znaménka Nastavte hodnotu proměnné „citac“ např. na 5. Aktivujte vstup (přepněte na log. 1). Proměnná „citac“ se vynuluje. Je možno ale nastavit její hodnotu a hodnota zůstane nastavena, i když má „vstup“ stále hodnotu log. 1. Pokud bychom místo LET a RES použili např. jen RES, pak by proměnná „citac“ byla nulována v každé otočce cyklu a nebylo by možno změnit její hodnotu.
16
5. Práce s jednotlivými bity proměnné Mějme proměnnou „cislo“ typu byte. K jejím jednotlivým bitům můžeme přistupovat zápisem cislo.[cislo_bitu]. Např. načtení bitu 0 na zásobník: LD cislo.0 Načtení bitu 1 na zásobník: LD cislo.1 Zápis hodnoty z vrcholu zásobníku do bitu 1: WR cislo.1
Příklad – Zobrazení čísla v binární soustavě Program převede číslo zadané na panelu jako celé číslo bez znaménka (tj. např. 1, 2, 3,..) do binární soustavy, tj. zobrazí jednotlivé bity. Pro jednoduchost je velikost čísla omezena na 3 bity, program tedy funguje pro čísla 0 až 7. #reg byte cislo #reg bit b0, b1, b2 P0 LD cislo.0 WR b0 LD cislo.1 WR b1 LD cislo.2 WR b2 E0
17
6. Sekvenční logika Na rozdíl od kombinační logické funkce, u sekvenční logické funkce není výstup dán pouze okamžitou hodnotou vstupů, ale také vnitřním stavem, tj. obvod má paměť. Jedním z nejjednodušších příkladů sekvenčního obvodu je tvz. RS klopný obvod.
Obr. Dvě varianty schématu RS klopného obvodu Funkce obvodu je následující: o Přivedením log. 0 na vstup S (set) se nastaví výstup Q = 1 o Q zůstane 1 i po změně vstupu S na log .1 (pamatuje si stav) o Přivedením log. 0 na vstup R (reset) se nastaví Q = 0 o Q zůstane 0 i při změně vstupu R na log. 1 Chování obvodu je stejné jako u tzv. relé se samodržným kontaktem, které se přivedením napětí sepne a drží sepnuté i po odpojení napětí. Rozepne se speciálním signálem (reset). Praktické využítí: paměť (1 bit), ošetření vstupů např. tlačítek proti zákmitům
Realizace RS obvodu v programu pro PLC TECOMAT Funkci RS obvodu by bylo možno realizovat programem složeným z elementárních instrukcí jako AND, OR apod., ale k dispozici jsou přímo instrukce jako SET a RES SET – podmíněné nastavení proměnné na log 1 (pokud je v zásobníku nenulová hodnota RES – podmíněné nastavení na log 0 (pokud je v zásobníku nenulová hodnota)
18
Princip funkce instrukce SET je na následujícím obrázku, uvažujeme program: LD prom SET stav
Obr. - Princip instrukce SET. Instrukce RES pracuje obdobně s tím, že cílovou proměnnou (na obrázku pojmenovanou stav) vynuluje místo na stavení na 1.
Příklad 1 – Ovládání motorku Zadání Vytvořte program v prostředí Mosaic s následující funkcí. Stisknutím tlačítka START se zapne motor. Po uvolnění tlačítka zůstane zapnutý. Tlačítkem STOP se vypne. V programu definujte také výstupy pro rozsvícení kontrolek „zapnuto“ a „vypnuto“ (přidejte na panel příslušné objekty).
Řešení Výpis zdrojového kódu je na následujícím obrázku. Proměnné zap a vyp představují vstupy od tlačítek START a STOP. Proměnná pom_zap simuluje kontrolku signalizující zapnutý stav. Jestliže je pom_zap = true, znamená to, že kontrolka zapnutí svítí. Jestliže je 0 nesvítí.
19
Panel pro tento program bude vypadat následovně:
Po vytvoření programu i panelu jej vyzkoušejte: V menu Program klepněte na Přeložit. Překlad by měl proběhnout bez chyb. V menu PLC klepněte na příkaz Run. Odpovězte Ano na dotaz zda vyslat kód . Zvolte např. Studený pro typ restartu PLC. Nyní uvidíte, že panel zobrazuje výchozí hodnoty proměnných, které jsme zadali v polích „hodnota pro nastavení“. o Poklepejte na tlačítko START. Rozsvítí se kontrolka. Tlačítko nezůstane „stisknuté“, protože program jej okamžitě resetuje (instrukce res zap), kontrolka ale svítí.
o o o o
20
Úkoly k procvičení Rozšiřte předchozí program následovně o Přidejte spotřebič (Motor), který se bude zapínat a vypínat – vytvořte tedy novu proměnnou nazvanou např. „motor“, která se bude nastavovat na 1 a nulovat pomocí tlačítek START a STOP. o Přidejte vypínač pro nouzové vypnutí (Central Stop), jehož stisknutím se vše vypne. Aby bylo možno motor znovu zapnout, musí se nejprve tento vypínač deaktivovat – dalším poklepáním myší.
Nápověda – řešení nouzového vypínače: LD central RES motor ; atd. vypnutí… JMD konec ; původní kód ;ovládání tlačítky konec: E0 Nová instrukce: JMD = skok, jestliže je na vrcholu zásobníku nenulová hodnota. Jestliže je aktivován nouzový vypínač (proměnná „central”), bude na vrcholu zásobníku po instrukci LD central hodnota 1. Proto se instrukcí RES vynuluje proměnná motor (vypne se motor) a skok JMD se provede. Tím se přeskočí veškerý kód vyhodnocující stav tlačítek START a STOP. Takže dokud je vypínač aktivní (na zásobník se pomocí LD central dostává 1), vůbec se nevyhodnocuje stav tlačítka START a motor tedy nejde zapnout.
21
Program 2 – Vozík jeřábu Program ukazuje použití mnoha instrukcí. Je v něm také využit periodicky spouštěný proces P6 pro periodické provádění určité akce. Zadání Vytvořte program pro řízení vozíku jeřábu. Vozík je poháněn dvěma motory, jedním pro pohyb vlevo a druhým pro pohyb vpravo (motorl, motorp). Poloha vozíku bude na panelu simulována číslem 0 až 10, kde hodnota 0 bude představovat pozici vozíku cela vlevo a 10 pozici zcela vpravo. Po dojetí do krajní polohy se vozík musí zastavit
Řešení o Vyjdeme z příkladu 1 o Přidáme tlačítka pro nastavení směru. Stiskem tlačítka se nastaví směr vlevo nebo vpravo. o Po stisku tlačítka START pak vozík pojede nastaveným směrem
Potřebné instrukce: INR DCR EQ GT LT JMD JMC
Program: Nejprve přidáme do programu ovládání motoru (příklad 1) nové proměnné: #reg #reg #def #def
byte pozice bit motorp, motorl vpravo X0.2 vlevo X0.3
Význam nových proměnných je následující: vlevo, pravo – spínače směru – budou ovládány z panelu. motorp, motorl – simulace motorů 22
Níže je pak uveden základ programu, který vyhodnocuje směr a zapíná příslušný motor vozíku. Tento kód vložce za kód ovládání motorku z příkladu 1, viz komentář na začátku („původní kód nastaví pom_zap a pom_vyp“). Dále přidejte obsluhu levého motoru na konec (viz komentář „; totéž pro levý motor...“). P0 ; původní kód nastaví pom_zap a pom_vyp ;… ; Pokud jsou stisknuty oba směry současně, přednost má vpravo ld vpravo and vlevo ; pokud obě res vlevo ; resetuje směr vlevo, ponechá vpravo ; pokud není zapnuto, nebo není ani jeden směr, oba motory zastavit ldc pom_zap ldc vlevo anc vpravo or res motorp res motorl jmd konec ; pokud je zapnuto, zapnout motor příslušného směru... ld pom_zap and vpravo ; pokud zapnuto a směr vpravo set motorp ; zapni pravý motor a… res motorl ; …vypni levý ; totéž pro levý motor... konec: ; navestí od vyhodnocení central stop na začátku programu E0
Pro automatický posun vozíku na panelu (simulaci) využijeme periodicky spouštěného procesu P6. Kód, který napíšeme do tohoto procesu se vykonává s periodou 3,2 sekundy. Mohli bychom použít také např. rychlejší proces P5, který je spouštěn každých 400 ms. V našem příkladě je pozice vozíku simulována jen číslem. Toto číslo bude zobrazeno na panelu a při pohybu vozíku vlevo se bude zmenšovat, při pohybu vpravo bude růst. Úkolem procesu P6 tedy bude inkrementovat nebo dekrementovat toto číslo, podle toho, zda je zapnut levý nebo pravý motor vozíku (tj. zda je proměnná motorl nebo motorp rovna 1). Kód procesu P6 je níže: P6 LDC motorp ANC motorl JMD Konec6 LD motorp JMD roste LD pozice EQ 0 JMD Konec6 DCR pozice JMP Konec6 roste: LD pozice GT 10 JMD Konec6 INR pozice LD pozice Konec6: E6
; nejede-li ani jeden motor…
; Pohyb VPRAVO ; nemuze za levy okraj
; Pohyb VLEVO ; test praveho okraje
23
Program nejprve testuje, zda jede alespoň jeden motor. Pokud by byl logický součin negovaných hodnot proměnných motorl a motorp roven jedné, znamená to, že ani jeden motor nejede. Program vlastně můžeme přečíst “jestliže motorp nejede a současně (AND) motorl nejede, skoč na Konec6. V opačném případě se testuje zda je spuštěn pravý motor (LD motorp následované JMD). To by znamenalo, že číslo simulující polohu vozíku má růst. Jestliže se skok JMD neprovede, předpokládáme, že jede levý motor (případ, že nejede ani jeden motor jsme totiž už na začátku ošetřili) a pozice se tedy musí snižovat. Všimněte si testů zda pozice není rovna nule 0 nebo vetší než 10 pomocí instrukcí EQ a GT. Pokud je podmínka splněna, je na vrcholu zásobníku nenulová hodnota a následující skok JMD se provede.
Panel Panel pro vyzkoušení programu vytvořte podle následujícího obrázku.
Otestujte program: o o o o o
Přeložte a spusťte program Poklepáním na spínač směru zvolte směr vpravo. Spínač zůstane sepnutý Poklepejte na tlačítko Start. Pravý motor by se měl spustit. Obsah pozice se bude zvětšovat. Pozor, inkrementace je pomalá, hodnota se zvětší o 1 vždy po 3,2 s.
24
7. Časování akcí v programu, časovače a čítače V minulé kapitole v programu vozík jeřábu jsme viděli jednu z možností jak do programu vložit časování a to pomocí periodicky spouštěných procesů P6 nebo P5. V této části si ukážeme použití dalších časovačů a čítačů.
Periodicky spouštěné procesy Umožňují provádět opakovaně určitou akci v programu s určitou, pevně danou periodou. Je to proces P5, který se provádí každých 400 ms a proces P6, který se provádí jedenkrát za 3,2 s. Ukázka použití P6 je v příkladu vozík jeřábu v předchozí kapitole.
Systémové registry S13 a S20 (systémový časovač) Systémový registr S13 je soubor bitových proměnných, které mění svůj stav jednou za určitou jednotku času, viz obrázek: S13.7 S13.6 S13.5 S13.4 S13.3 S13.2 S13.1 S13.0 1 den 1 hod 10 min 1 min 10 s 1 s 500 ms 100 ms Např. bit 0 v registru S13 (S13.0) mění svou hodnotu z log. 0 na log. 1 a zpět z log. 1 na log. 0 každých 100 ms (perioda je 100 ms). V bitu S13.2 se mění hodnota každou sekundu, atd. Toho můžeme využít k časování operací v našem programu. Např. jestliže chceme provést nějakou akci každou sekundu, můžeme její provedení podmínit změnou hodnoty v S13.2. Musíme ovšem ošetřit aby program reagoval za změnu log. úrovně např. pomocí instrukcí BET nebo LET. Jednodušší je použití registru S20, kde se na příslušných bitech objeví log. 1 při náběžné (S20) nebo sestupné (S21) hraně signálu z S13. Log. 1 je zde vždy jen jednu otočku cyklu.
Příklad 3 – inkrementace proměnné „citac“ jedenkrát za sekundu #reg word cislo P0 LD %S20.2 JMD pricti JMP konec pricti: INR cislo konec: E0
25
Čítače a časovače (TON, TOF, IMP, CTU, CTD, CNT) Impulsní časovač Impulsní časovač (instrukce IMP) se použije následovně: LD XT LD VAL IMP casovac.bit Po změně v XT z 0 na 1 se zapne časovač a dokud neuběhne nastavený čas VAL, je na vrcholu zásobníku 1. Časové jednotky se určují bitem (.bit) dle obrázku. Např. casovac.0 určuje, že VAL je zadáno v setinách sekundy; casovac.1 určuje, že VAL je v desetinách sekundy, atd.
Casovac.0 (bit 0)
Casovac.2 (bit 2) Použití je velmi jednoduché, ukázkový příklad je níže.
26
Příklad 1 – Schodišťový vypínač Zadání Realizujte program s funkcí schodišťového spínače. Po zapnutí světla pomocí tlačítka bude světlo svítit zadanou dobu (4 sekundy) a poté automaticky zhasne. Řešení Zdrojový kód programu #reg word casovac #reg bit svetlo_1, svetlo_2, svetlo_3 #def tlacitko X0.5 #def val 4 #def sek 2 P0 LD LD IMP WR WR WR LD RES E0
tlacitko val casovac.sek svetlo_1 svetlo_2 svetlo_3 tlacitko tlacitko
Program jen aktivuje časovač a poté zapisuje do proměnných svetlo_1 až svetlo_3 hodnotu z vrcholu zásobníku, což je po dobu aktivity časovače jednička a tedy světla svítí. Poslední dvě instrukce slouží k resetování proměnné „tlacitko“, která se díky tomu chová jako skutečné tlačítko a ne jako vypínač – tedy po poklepání na panelu se ihned vrátí do vypnuté polohy. Definováním konstanty sek jako 2 nastavuje krok časovače na 1 sekundu, viz obr. výše. Počet kroků je zadán konstantou VAL, která je nastavena na 4. Čas je tedy 4 sekundy. Všimněte si, že jako proměnou startující časovač používáme „tlačítko“. Aktivací tlačítka se pak v proměnné „tlačítko“ objeví jednička, která odstartuje časový úsek.
27
Panel Na panelu jsou tři objekty představující světla a vypínač, který je propojen s proměnnou „tlačítko“.
Testování programu o Spusťte program o Poklepáním na spínač zapněte světla. Spínač se ihned vrátí do výchozí polohy (viz instrukce res spinac v programu) o Po 4 sekundách by měla světla zhasnout, viz LD val, kde val = 4 casovac.sek, kde sek = 2
Úkol k procvičení o Změňte dobu svitu na 0,5 s, tj. tak aby se světla vypnula 0,5 s po zapnutí.
Časovač „zpožděný přítah“ a „zpožděný odpad“ Instrukce TON (zpožděné sepnutí) a TOF (zpožděné vypnutí) umožňují provést změnu na výstupu s určitým zpožděním po změně na vstupu.
Instrukce TON Časovač TON zapne výstup s určitým zpožděním po změně na vstupu. Použití instrukce je následující: LD XT LD VAL TON casovac.bit TON na na vrcholu zásobníku udržuje nulu. Po změně v XT z 0 na 1 se zapne časovač, po uplynutí nastaveného času (VAL), je na vrchol zásobníku zapsána log. 1. Časové jednotky se určují bitem (.bit) stejně jako u časovače IMP, např. casovac.0 znamená, že 28
VAL je v setinách sekundy; casovac.1 znamená, že VAL je v desetinách sekundy, atd.
Instrukce TOF Časovač TOF na vrcholu zásobníku udržuje log 1. Po změně v XT z 1 na 0 se zapne časovač, po uplynutí nastaveného času je na vrchol zásobníku zapsána 0. Tedy po vypnutí vstupu je výstup ještě nějakou dobu udržován zapnutý a po uplynutí zadaného času se vypne.
Příklad 2 – Manipulátor Zadání Při řízení posuvu manipulátoru je třeba zajistit, aby se pohyb nahoru uskutečnil až 0,5 s po příchodu signálu pravého koncového spínače (aby došlo ke uklidnění a zpevnění mechanizmu a nemohlo dojít k jeho vzpříčení). Řešení Zdrojový kód programu #reg word casovac #def vpravo X0.2 #def nahoru Y0.1 P0 LD vpravo LD 50 TON casovac.0 WR nahoru E0 Program aktivuje časovač TON změnou na vstupu „vpravo“, tj. signálem od koncového spínače pro pohyb vpravo. TON udržuje na vrcholu zásobníku nulu, takže výstup „nahoru“ je také udržován ve stavu log 0. Po aktivaci spínače „vpravo“, tedy po změně hodnoty z 0 na 1 se rozběhne časovač. Po uplynutí času 50 . 10 ms tj. 0,5 s nastaví časovač na vrcholu zásobníku log 1 a ta je pak zapsána do výstupu „nahoru“. Tím se manipulátor rozjede nahoru. Panel Poklepáním na objekt „spínač vpravo“ simulujeme dojetí manipulátoru na pravý koncový spínač. Se zpožděním 0,5 s se pak zapne pohyb nahoru.
29
Jméno: vpravo Chráněná: Ne
Jméno: nahoru Chráněná: Ano
Úkol k procvičení o Doplňte do programu automatické vypnutí pohybu nahoru po uplynutí 3 sekund. Použijte k tomu časovač IMP.
Čítače Čítače slouží pro počítání impulsů (změn) na vstupu. Ukážeme si následující instrukce: CTU – Dopředný čítač CTD – Zpětný čítač CNT – obousměrný čítač Princip použití instrukce CTU: LD VSTUP LD RESET CTU citac Pokud se hodnota VSTUP změní z 0 na 1, zvětší se proměnná „citac“ o 1. Pokud je RESET log . 1, čítač se vynuluje.
30
Příklad 3 – Počítání výrobků Zadání Vytvořte program, který počítá výrobky vyrobené např. za směnu.
Řešení Zdrojový kód programu #reg word citac #def vyrobek X0.1 #def reset X0.5 P0 LD vyrobek LD reset CTU citac ; pro snazsi ovladani na panelu resetujeme vstupy LD vyrobek RES vyrobek LD reset RES reset E0
Vstupem, který aktivuje čítač je „vyrobek“. Při změně z 0 na 1 na tomto vstupu se přičte 1 k proměnné „citac“ Druhá část programu za poznámkou slouží pouze k usnadnění ovládání programu na panelu – automaticky resetuje vstupy „vyrobek“ a „reset“, takže po poklepání myší se tyto vstupy hned vrátí do výchozího stavu. Můžeme tak „přidávat výrobky“ poklepáním myši beb nutnosti tlačítko vždy ještě dalším poklepáním vyresetovat před přidáním dalšího výrobku.
Panel Poklepáním na objekt „Přidat výrobek“ se zvětší počitadlo o 1. Tím simulujeme např. projetí dalšího výrobku přes snímač, který zajišťuje vstupy pro náš program. Všimněte si také, že tlačítka Přidat výrobek i Reset jsou automaticky resetována naším programem, viz instrukce RES vyrobek.
31
Jméno: reset Chráněná: Ne Typ: bit Jméno: vyrobek Chráněná: Ne Typ: bit Jméno: citac Chráněná: Ano Typ: bez znaménka
Úkol k procvičení Upravte program tak, aby bylo možno přidávat i odebírat výrobky. Použijte k tomu obousměrný čítač (instrukci CNT). Nápověda: Čítač CNT se používá následovně: LD nahoru LD dolu LD reset CNT citac
32
8. Tabulkové úlohy Tabulkové úlohy umožňují velmi zjednodušit řešení některých úloh, např. sedmisegmentového zobrazovače. V podstatě do programu vložíme pravdivostní tabulku, místo toho abychom zadávali logickou funkci jako výraz pomocí instrukcí. Příklad definice tabulky: #table byte TB1 = 1,3,8 Místo byte může být i bit, word. Jedná se o velikost jednoho prvku tabulky. Uvedený příklad definuje tabulku, která obsahuje 3 prvky a nastavuje hodnoty těchto prvků na 1, 3 a 8. Použití tabulky v programu je následující: LD LTB WR
index TB1 val
Instrukce LTB vloží na vrchol zásobníku hodnotu z tabulky TB1 hodnotu na indexu ‚index‘ Další instrukce pak tuto hodnotu zpracuje, např. zde WR ji pak zapíše do proměnné val. Princip instrukce LTB je znázorněn i na následujícím obrázku:
Jestliže bude index = 1, pak by instrukce LTB vytáhla z tabulky definované výše hodnotu 3 (ta se v tabulce nachází na indexu 1, protože indexy jsou od nuly).
Příklad 1 – Domek se třemi okny Zadání Realizujte program podle zadáni z kapitoly 1, ale tentokrát pomocí tabulek. Máme tedy domek se třemi okny: a, b, c, která mají plochy 2, 2 a 3 m2. Pokud je otevřená plocha větší nebo rovna 3 m2, má se zapnout topení. Řešení Pravdivostní tabulku zapíšeme přímo do programu - do tabulky Princip: Řádek tabulky odpovídá zadané kombinaci otevřených oken a, b,c uvažované jako binární číslo - tedy kombinace vstupů je vlastně index do tabulky. Do tabulky pak stačí vložit pouze odpovídající hodnoty výstupu (top) pro příslušný řádek tabulky. 33
Na následujícím obrázku je výpis zdrojového kódu příkladu a princip uložení hodnot z pravdivostní tabulky do tabulky v programu. Všimněte si, že v tabulce v programu používáme datový typ bit a ukládáme do ní jen hodnoty ze sloupce T (top), tj. výstupy logické funkce.
Všimněte si také jakým způsobem převádíme tři nezávislé proměnné reprezentující otevřená okna a, b nebo c na celé číslo, které se použije jako index do tabulky. Proměnné jsou definovány jako bity v bajtu X0 (X0.0, X0.1 a X0.2). V program také definujeme proměnnou cislo jako bajt na adrese X0, takže proměnné a, b, c se v paměti překrývají s proměnou cislo. Když se nastaví např. a = 1, nastaví se tím vlastně také bit 0 (bit zcela vpravo) v proměnné cislo na 1. Abychom se zbavily případných nežádoucích bitů v proměnné cislo (využíváme totiž jen její tři spodní bity namapované na proměnné a,b,c), používáme AND s maskou %00000111.
Panel 34
Testování programu o Přeložte program (Program – Překlad) o Spusťte program o Otestujte chování programu. Měl by sepnout topení při otevření oken „a“ současně s „b“ nebo „c“, viz zadání.
Úkol k procvičení Upravte program tak, aby řešil úlohu Majorita ze 3.
35
Logická funkce ........................................................... 3 Logická proměnná ..................................................... 3 Logický výraz .......................................................... 3, 7 LT .............................................................................. 22 LTB ............................................................................ 33
# #def .......................................................8, 10, 14, 22, 27 #table ......................................................................... 33 A
M
ANC .......................................................................... 14 and ............................................................................... 8 AND .................................................4, 8, 14, 18, 24, 34
majorita ...................................................................... 12 Minimalizace ............................................................... 5 Mosaic .......................................................... 8, 9, 11, 19
Č
O
časovač ...................................................................... 26
or 8 OR ................................................................ 4, 8, 14, 18
D DCR .......................................................................... 22
P
E EQ ............................................................................. 22
panel .............................................................. 10, 19, 20 Pravdivostní tabulka ................................................. 3, 7
G
R
GT ............................................................................. 22
RES ............................................................................ 18 RS klopný obvod ...................................................... 18
I
S
IMP ........................................................................... 26 INR ............................................................................ 22
Sekvenční logika ................................................... 3, 18 SET ............................................................................ 18
J
T
JMC .......................................................................... 22 JMD .......................................................................... 22
Tabulkové úlohy ........................................................ 33
K
W
Karnaughova mapa ...................................................... 3 Kombinační logika ..................................................... 3
wr 8
L
zásobník ......................... 8, 9, 14, 18, 21, 24, 26, 27, 33
Z
ld 8 LDC ........................................................................... 14
Literatura Martinásková, M.; Šmejkal, L.: PLC a Automatizace 1. Vydal BEN, Praha 2002. ISBN 80-86056-58-9.
36