Neboli "Programmable Logic Controller", česky obvykle "programovatelný automat". Jedná se o malý počítač specializovaný na ovládání nejrůznějších zařízení. Není to klasické písíčko s monitorem, klávesnicí a myší (i když i takové se občas najdou) ani integrovaný jednočip jako Arduino nebo Picaxe (i když i s těmi se dá dosáhnout podobného efektu), ale něco mezi: robustní krabička s několika kontrolkami, se vstupy a výstupy vyvedenými na svorky, pracovní napětí mívá obvykle 24 V, sem tam nějaký ten komunikační port (LAN, RS-232 nebo něco podobného) a uvnitř jednoduchý operační systém a paměť na uživatelský program a data. Nejčastěji se PLC používají v průmyslu, ale můžeme se s nimi setkat i v chytrých budovách a dalších aplikacích. Kvůli relativně vysoké ceně za kus (řádově tisíce až desetitisíce Kč) se nevyplatí pro zařízení vyráběná v obrovských sériích (např. auta) nebo pro kutily a bastlíře - tam je vhodnější nějaký na míru ušitý jednočip nebo nějaká krabička ovládaná přes PC. PLC mají svoje místo v kusovkách a prototypech, kde se program vymýšlí za pochodu, kde je potřeba flexibilita a rozšiřitelnost a kde nechcete ztrácet čas pájením odporů, tranzistorů a optočlenů - tedy typicky ve strojích, na kterých se potom ty obrovské série vyrábějí. Výrobců PLC je celá řada, namátkou třeba B&R, Beckhoff, Festo, Mitsubishi, Omron, Siemens, Teco a další.
Typické PLC je plastová krabička na DIN lištu, velká jako pěst nebo dvě. Některé mají malý kontrolní displej, některé jenom stavové kontrolky. Na jedné straně krabičky najdete vstupní svorky: šroubky nebo pružinové kontakty, na které přímo napojíte tlačítka nebo výstupy čidel a jiných zařízení. Všechno je standardně na 24 stejnosměrných voltů, elektrikářské nezbytnosti jako galvanické oddělení, pull-up/pull-down rezistory nebo kontrolky má PLC vestavěné. Vstupy existují digitální (0 V = logická nula, +24 V = logická jednička a nic mezi tím), analogové (napěťové většinou 0..10 V, proudové 4..20 mA apod.) a občas i speciální (na termočlánky a podobně).
Na druhé straně krabičky bývají výstupy. Na větší výkony a střídavá napětí se používají reléové (elektromechanický kontakt mezi dvěma svorkami), na rozsvěcení kontrolek a vysílání řídicích signálů tranzistorové (logické signály 0 nebo +24 V), které standardně dávají tolik proudu, že uživí cívku elektropneumatického ventilu. Dále existují výstupy analogové a pár dalších druhů (např. PWM). Sbírku svorek doplňuje napájení řídicích obvodů PLC, společné mínusy nebo plusy od vstupů a výstupů a ochranná zem.
Vstupů a výstupů se na jedno PLC vejde omezený počet, proto existují rozšiřující moduly. Některé nacvaknete na DIN lištu hned vedle základní krabičky a připojíte je k ní vestavěným konektorem, jiné můžou být umístěné kdekoli na stroji a s PLC komunikují po kabelu pomocí nějakého komunikačního protokolu (TCP/IP, CANopen, Profibus, Profinet, EtherCat, I/O link a další). Konfigurace rozšiřujících modulů a mapování fyzických vstupů a výstupů na proměnné v paměti PLC je první krok, kterým při programování vždycky začínáme.
Průmyslové stroje musí kromě obvyklé ochrany proti zasažení elektrickým proudem splňovat i další podmínky. Jakmile se někde vyskytne nějaký pohon (pneumatický, elektrický nebo jakýkoli jiný), musí být buď natolik slabý, aby nikomu nemohl ublížit, nebo musí být schovaný pod krytem. Když je potřeba, aby do nebezpečného prostoru sahali lidé (třeba kvůli zakládání dílů), musí být pohony zablokované proti pohybu: odpojením napájení motorů, zavřením hlavních ventilů a podobně. Podstatné je, že tohle blokování musí být "zadrátované" napevno, v žádném případě nesmí být řešené jenom softwarovou podmínkou někde v programu běžného PLC. Zjednodušeně řečeno: bezpečnost musí být zajištěná, i když se program zblázní a na výstupy začne posílat náhodné nesmysly.
Bezpečnostní komponenty poznáte podle žluté barvy. Spínače, tlačítka a čidla se od těch obyčejných liší tím, že mají zdvojené výstupy. Vstupní moduly, do kterých se zapojují, mají zdvojené vyhodnocovací obvody a jakmile detekují nesrovnalost (od přerušeného vodiče po ruční pokus o přemostění), vypnou silové výstupy.
Operační systém typického PLC je velmi jednoduchý. Naběhne pár vteřin po zapnutí napájení a jeho jedinou starostí je pouštět pořád dokolečka uživatelský program, hlídat hardwarová přerušení a chybové stavy a starat se o komunikaci s periferiemi. Důležitým pojmem je tzv scan - hlavní cyklus, ve kterém se děje následující:
Není pevně dáno, jak dlouho scan trvá - záleží na tom, kolik instrukcí náš program vykonává, může se klidně protáhnout na desítky milisekund. Vstupy se načetly jednou na začátku a až do příští iterace se nezmění, čekání na signál z čidla nebo stisk tlačítka proto nemůžeme řešit cyklem ve stylu repeat čti_vstupy until přišel_signál, jak jsme zvyklí z PC, ale jinak:
(vstupy máme načtené automaticky) Pokud jsme v kroku "čekání na signál": Dělej věci, které se mají během čekání dít. Pokud přišel signál, na který čekáme: Udělej věci, které se mají stát na konci čekání. Přesuň se do dalšího kroku. Jinak nedělej nic a jdi na konec programu. (výstupy, které jsme teď nastavili, se ven odešlou automaticky)
Krok si můžeme vyjádřit třeba číselnou proměnnou nebo sadou příznaků někde v paměti. Věci, které se dějí během čekání, jsou obvykle vysílání signálů pro pneuventily, kontrolky a tak. Signál, na který čekáme, může být třeba koncový snímač na pístu, se kterým právě pohybujeme, přítomnost dílu, na který čekáme, stisk tlačítka a podobně. Na konci čekání můžeme třeba vypnout ventil, zhasnout kontrolku, započítat dokončený výrobní cyklus nebo cokoli jiného.
Občas je potřeba dělat věci rychleji než dovoluje scanový cyklus, třeba počítat vysokofrekvenční pulsy z enkodérů nebo generovat PWM signály. Na to musí mít PLC příslušné hardwarové obvody, které z programu ovládáme pomocí speciálních funkcí.
Paměť PLC není jednolitá jako na PC, ale rozdělená do několika částí:
Existují PLC programovatelná pomocí tlačítek a vestavěného displeje (např. LOGO! od Siemense), ale většina vyžaduje nějaký programovací software pro PC. Některé jsou dostupné zdarma (např. CoDeSys, který využívají PLC Festo a tuším Beckhoff), jiné zpoplatněné (např. Siemensovic LOGO!Soft Comfort, Step7 a TIA Portal). Hotový program do PLC nahrajete přes příslušný kabel (dnes nejčastěji běžný ethernetový, ale můžete se setkat i s RS-232, RS-485 a jinými standardy, ke kterým je potřeba dokoupit speciální kabely nebo adaptéry) a jestli je všechno v pořádku, začne okamžitě pracovat.
Většina moderních programovacích softwarů umožňuje online připojení k PLC: na obrazovce vidíte svůj program a v něm aktuální hodnoty proměnných, barevně odlišené aktivní části a podobné vymoženosti. Některé proměnné se dají i ručně přepisovat. Je to trochu podobné debuggerům na PC, ale tady program běží normální rychlostí a vy mu pod kapotu koukáte za chodu, nekrokujete ho po jednotlivých instrukcích.
Instrukční sada PLC historicky vychází z reléové logiky, nejmenší adresovatelnou a zpracovatelnou jednotkou je bit (ne byte jako na PC). Programovací jazyky upravuje norma IEC 61131, základy mají všechna PLC podobné, ale detaily (někdy i dost podstatné) se liší od výrobce k výrobci a od typu k typu. S čím vším se můžeme setkat:
IL (Instruction List), někdy zvaný STL (STatement List) - jednoduchý textový jazyk, něco jako assembler, ve kterém píšeme přímo jednotlivé instrukce a do strojového kódu se kompiluje 1:1. Instrukce jsou většinou jednopísmenné zkratky a k logickým operacím se nepoužívají registry, ale LIFO zásobník. Jazyk je to poměrně vzácný a dnes prakticky nepoužívaný, za čtyři roky praxe jsem se s ním setkal jenom jednou a neovládám ho natolik, abych o něm mohl napsat něco užitečného.
LAD (LADder diagram) - grafický jazyk simulující elektrická reléová schémata. Jeho výhodou je, že je srozumitelný pro elektrikáře zvyklé na fyzické zapojování drátků, že se jednoduše kompiluje (a většinou i dekompiluje) a že při online připojení k běžícímu PLC názorně vidíme, kudy přesně tečou jaké signály a co je aktivní. V továrnách, kde jsem před rokem 2019 pracoval, to byl asi nejrozřířenější jazyk vůbec, takže se určitě hodí ho znát. Malá ukázka (kreslím ASCIIartem, prastaré editory běhající v textovém režimu tak opravdu vypadaly, dneska už jsou všechny grafické):
| I0.1 M1.3 Q1.0 | |------[ ]------[/]-------+--------( )--| | | | | I1.7 | | |------[ ]----------------+ | | | | I1.5 Q1.1 | |------[ ]-------------------------(S)--| | | | I1.6 Q1.1 | |------[ ]-------------------------(R)--| | |
Svislá čára nalevo představuje "napájení", trvale z ní vychází signál logická 1 (True). Svislá čára napravo je "zem" a ostatní čáry jsou "vodiče". Symbol [ ] je "spínací kontakt" (propouští "proud", když má příslušná proměnná hodnotu logická 1), symbol [/] je "rozpínací kontakt" (propouští při logické 0 čili False). Symbol ( ) je "cívka" - do příslušné proměnné vkládá 0 nebo 1 podle toho, jestli do ní "proud" teče nebo ne (pozor, trvale v každém cyklu). Symboly (S) a (R) jsou "klopné obvody": když do nich pustíme proud, S (Set) nastaví připojenou proměnnou na 1 a R (Reset) ji vynuluje. Když do nich proud nejde, připojené proměnné nijak neovlivňují a můžeme je ovládat z jiného místa programu. Proměnné si většinou můžeme pojmenovat jak chceme, tady jsem pro ukázku použil přímé absolutní adresování. Spojení prvků "do série" znamená logický AND, spojení "paralelně" logický OR, stejně jako ve skutečné elektrikařině. Rozdíly jsou jenom na úrovni zpracování: virtuální proud neprochází rychlostí světla celým obvodem najednou, jednotlivé prvky se vyhodnocují postupně zleva doprava a odshora dolů. Virtuální vodiče se nesmí vracet a tvořit smyčky, signál jde vždycky zleva doprava. Kromě základních prvků uvedených v téhle ukázce existuje nepřeberné množství dalších, které vám editory nabídnou v knihovnách, ze kterých je myší taháte do schématu.
FBD (Function Block Diagram) - grafický jazyk simulující blokovou logiku. Bloky jsou čtverečky nebo jiné tvary, které znamenají and, or a jiné operace, a po spojnicích mezi nimi chodí jednotlivé signály (proměnné). Jazyk je to na první pohled dokonale srozumitelný a názorný, ale cokoli jenom trochu složitějšího (tedy v praxi víceméně všechno) končí nepřehlednou pavučinou, která se těžko luští. FBD je dobré znát, ale asi to nebude váš denní chleba. Asi jediná výhoda oproti LAD je, že signály mohou chodit libovolným směrem, i zpátky.
SFC (Sequential Function Chart) - grafický jazyk simulující vývojové diagramy. Skládá se z příkazových bloků (co se má v daném kroku dít) a přechodových podmínek (kdy se má přejít na další krok). Teoreticky vypadá jako ideální nástroj pro tvorbu programů, které mají něco postupně dělat (tedy prakticky všech), ale má problém s přehledností: nedá se normálně číst, musíte si jednotlivé podmínky a bloky rozklikávat, pamatovat a neztratit se v nich. Možná to některé editory mají vyřešené líp, ale nevím, v praxi jsem SFC potkal jenom jednou a ukázalo se, že je rychlejší ty programy přepsat do jiného jazyka, než se snažit udržovat původní podobu.
ST (Structured Text), někdy zvaný SCL (Structured Code Language) - textový jazyk syntakticky podobný pascalu. Není tak názorný jako grafické jazyky, ale jakmile se ho jednou naučíte, zjistíte, že je vlastně velice jednoduchý, úsporný a čitelný. Například tu výše uvedenou ukázku by zapsal takhle:
Q1.0 := (I0.1 AND M1.3) OR I1.7; IF I1.5 THEN Q1.1:=True; END_IF; IF I1.6 THEN Q1.1:=False; END_IF;
Asi jedinou nevýhodou je, že nejde dekompilovat. Syntaxi popíšu podrobněji v samostatném článku.