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
UTB ve Zlíně, 2008
Obsah Programování PLC Lekce 1 – Úvod do kombinační logiky Základní pojmy Příklad 1: Minimalizace logických výrazů Úkol k procvičení Lekce 2 – Programování PLC Teco Program pro příklad 1 (domeček se třemi okny) Zapsání programu v prostředí Mosaic Lekce 3 – Kompletní řešený příklad z kombinační logiky Lekce 4 – Sekvenční logika Realizace v programu pro PLC TECO Příklad 1 – Ovládání motorku Program 2 – Vozík jeřábu Lekce 5 – Impulzní časovač Příklad 1 – Schodišťový vypínač Lekce 6 – Tabulkové úlohy Příklad 1 – Domek se třemi okny Rejstřík
2
1 2 3 3 3 5 7 8 8 9 13 15 15 16 19 22 23 25 25 28
Lekce 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: 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 vetší počet už by byla velmi rozsáhlá (viz 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 (zadání) logické funkce. a
-------
c \ b |
------
------
------
0
0
1
0
1
1
1
1
Pozor: Zde pruh v řádku nebo sloupci tabulky značí, že tam má logická proměnná hodnotu log 1.
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 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
5
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
Lekce 2 – Programování PLC Teco 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 Tecomat 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 totiž neexistuje obdoba registrů mikropočítače, 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í lekce.
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:
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
Lekce 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 1 1 1 0 1 13
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
; + mezi predchozimi trojicemi
YY1 Sa1 Sa2 Sa3 ERR
14
Lekce 4 – 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 v programu pro PLC TECO 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)
15
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, pom_vyp simulují kontrolky signalizující zapnutý a vypnutý stav. Jestliže je např. pom_zap = true, znamená to, že kontka zapnutí svítí. Jestliže je 0 nesvítí.
16
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
17
Ú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.
18
Program 2 – Vozík jeřábu 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ů
19
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 je vypnuto, nebo není ani jeden směr, oba motory zastavit ld pom_vyp 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
20
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.
21
Lekce 5 – Impulsní časovač V minulé lekci jsme se seznámili s jednou možností jak do programu vložit časování a to pomocí periodicky spouštěných procesů P6 nebo P5. V této lekci si ukážeme použití impulsního časovače, resp. instrukce IMP 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é, přejděme proto rovnou k příkladu.
22
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.
23
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í.
24
Lekce 6 – 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 lekce 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 25
odpovídající hodnoty výstupu (top) pro příslušný řádek tabulky.
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.
26
Panel
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.
27
Rejstřík Logická funkce ........................................................... 3 Logická proměnná ..................................................... 3 Logický výraz .......................................................... 3, 7 LT .............................................................................. 20 LTB............................................................................ 26
# #def.......................................................8, 10, 14, 20, 24 #table......................................................................... 26 A
M
ANC .......................................................................... 14 and............................................................................... 8 AND .................................................4, 8, 14, 16, 22, 27
majorita ...................................................................... 12 Minimalizace............................................................ 2, 5 Mosaic.......................................................... 8, 9, 11, 17
Č
O
časovač ...................................................................... 23
or 8 OR................................................................ 4, 8, 14, 16
D DCR .......................................................................... 20
P
E EQ ............................................................................. 20
panel .............................................................. 10, 17, 18 Pravdivostní tabulka................................................. 3, 7
G
R
GT ............................................................................. 20
RES ............................................................................ 16 RS klopný obvod ...................................................... 16
I
S
IMP ........................................................................... 23 INR............................................................................ 20
Sekvenční logika............................................... 2, 3, 16 SET ............................................................................ 16
J
T
JMC .......................................................................... 20 JMD .......................................................................... 20
Tabulkové úlohy ........................................................ 26
K
W
Karnaughova mapa ...................................................... 3 Kombinační logika................................................. 2, 3
wr 9
L
zásobník ......................... 8, 9, 14, 16, 19, 22, 23, 24, 26
Z
ld 8 LDC........................................................................... 14
Literatura Martinásková, M.; Šmejkal, L.: PLC a Automatizace 1. Vydal BEN, Praha 2002. ISBN 80-86056-58-9.
28
Konec dokumentu. Poslední změna: 29.1.2008
29