Automatizace | 14. 3. 2017

PLC v praxi – trasování předmětů na dopravníkových tratích

Jak nadpis napovídá, budeme se věnovat metodikám sledování pohybu předmětů (díly či celé produkty libovolných velikostí) na dopravníkových tratích, které jsou téměř nedílnou součástí rozsáhlejších strojů a zejména celých výrobních a zpracovatelských linek.

Bavíme se konkrétně o případu, kdy se na spojité části dopravníku může pohybovat více než jeden předmět. Modelový příklad ilustruje obrázek 1, který dále poslouží k demonstraci několika metod sledování předmětů. Ve všech variantách uvažujeme běžný pohon dopravníku bez zpětné vazby (například indukční motor řízený frekvenčním měničem). V textu se dále zaměříme zejména na konfigurace s pulzním enkodérem, který nám za relativně málo peněz (šetří se totiž všude) poskytuje dobré možnosti kontroly pohybu předmětů na dopravnících.

Obr. 1: Příklad konfigurace dopravníku

Varianty bez pulzního enkodéru

Pouze okrajově uvedeme nejjednodušší varianty, které používají pouze vstupní, resp. i výstupní snímač dopravníku. Toto řešení umožňuje velmi omezeně pouze kontrolu obsazenosti dopravníku, která může být realizována například časovačem se zpožděným odpadem. Ten je vždy se vstupem předmětu nastaven na hodnotu, která odpovídá době průjezdu dílu na konec dopravníku. Je zřejmé, že tento systém pracuje spolehlivě pouze za předpokladu konstantní rychlosti pohybu. Změny rychlostí, zastavení a rozjezdy, činí tento systém téměř nepoužitelným.

Přidáním výstupního snímače lze již sledovat počet kusů přítomných na dopravníku (čítačem, který je inkrementován vstupním a dekrementován výstupním snímačem) a s použitím vhodné FIFO fronty můžeme s jednotlivými kusy předávat i data. Pokud se navíc mění pozice předmětů na dopravníku (ale nemění se pořadí), je použití fronty nezbytností pro předávání dat vázaných k předmětům.

Varianty s pulzním enkodérem

S instalací pulzního enkodéru se konečně otevírají užitečné možnosti, kterým se dále budeme více věnovat. Zmíněným enkodérem může být běžný indukční senzor, který snímá kovové body (např. hlavy šroubů) vhodně umístěné v pohonném ústrojí dopravníku (na hřídeli, motoru, …). Instalace je na většině zařízení poměrně snadná a finančně nenáročná. Změnou počtu pulzních „bodů“ (případně umístěním před/za převodovku, …) lze snadno docílit vyššího či nižšího rozlišení takového enkodéru. Vždy záleží na konkrétní aplikaci jakou přesnost vyžadujeme. Při vyšším počtu pulzů (a/nebo při vysokých rychlostech dopravníku) je třeba myslet na maximální frekvenci pulzů. Senzor zpravidla zvládá vyšší „kadence“ bez problémů, ale za rychlé vstupy do PLC je občas nutné připlatit. Stále však hovoříme o frekvencích v rámci desítek hertzů a na opravdu rychlé aplikace (cca 100 Hz a více) je vhodné použít specifické enkodéry a rychlé čítací vstupy, které vám lokální dealer PLC komponent jistě rád prodá. Hardware máme tímto zhruba objasněn a pojďme se podívat, co nám při uvedené konfiguraci nabízí software. A to nejlépe formou populárně zábavnou.

1. Kontrola obsazenosti

Začneme jednoduchým příkladem, který vychází z metody s časovačem uvedené v úvodu článku. Přináší však proti ní značné výhody. Časovač signalizující, že dopravník je obsazen jedním či více předměty, nahradíme ideálně celočíselnou řídící proměnnou (nebo přímo systémovým blokem čítače, pokud jej PLC nabízí), která je vždy se vstupem dílu na dopravník nastavena na pevně danou hodnotu. Tato hodnota bude odpovídat počtu pulzů enkodéru napočítaných za průjezd jednoho dílu celým dopravníkem. Nastavení řídící proměnné je vhodné podmínit příznakem „dopravník v pohybu“, což nám pomůže částečně zamezit falešnému obsazení při nechtěné aktivaci snímače. K funkčnosti pak už zbývá pouze s každým pulzem (vzestupnou nebo sestupnou hranou) na enkodéru snížit hodnotu řídící proměnné o 1 pokud je její hodnota větší než nula (samozřejmě za předpokladu, že na vstupním snímači není nově příchozí předmět). Nenulová hodnota proměnné signalizuje obsazenost dopravníku. Toto řešení má proti prvnímu uvedenému zřejmé výhody. Je zcela nezávislé na rychlosti dopravníku a spolehlivost neovlivní ani průběžné zastavování a rozjíždění dopravníku.

Délku dopravníku v pulzech lze určit matematicky dle mechanické konfigurace nebo experimentálně zkušebním průjezdem jednoho kusu za pomocí vhodné úpravy programu. Praxe ukazuje, že druhá možnost bývá přesnější, protože málokdy lze „od stolu“ přesně odhadnout polohy snímačů a drobné rozměrové odchylky, které ovlivňují výslednou hodnotu (například vliv tloušťky dopravního pásu na průměr sledované osy a tím rozdílné ujeté vzdálenosti na jednu otáčku). Ke zjištěné délce je rozumné přidat rezervu (dle konfigurace stroje) pro bezpečné opuštění dopravníku. Popsaný algoritmus lze využít různě. Nabízí se například možnost tvořit mezi předměty na dopravníku pevně definovanou mezeru, dle počtu pulzů od předcházejícího dílu apod. Ale to zdaleka není vše, co můžeme s danou konfigurací vykouzlit. Pusťme se tedy do toho hned v další části textu.

2. Hlídání polohy předmětů

Nyní se dostáváme k velmi užitečné funkci, kterou nám umožňuje konfigurace dopravníku ilustrovaná na obrázku 1 (enkodér, vstupní a výstupní snímač). Představme si například dopravník skrz libovolnou technologii, která nezřídka bývá uzavřena ve vlastní místnosti či prostoru a ten je při probíhajícím procesu nepřístupný jak lidské ruce, tak i jiným končetinám. Protože žádná technika není dokonalá, může dojít například vlivem poruchy technologie k uváznutí předmětu na dopravníku a následnému hromadění následujících kusů. Závažnost takového stavu může být poměrně značná a zhoršuje se hlavně s rostoucí rychlostí a počtem dílů na dopravníku. Vězte, že pro operátory následující technologie nemusí vždy výpadek přísunu dílů znamenat paniku, nýbrž signál k přestávce na cigárko. A protože kouření škodí zdraví, je třeba takové stavy co nejrychleji eliminovat. K tomu nám s úspěchem (doufejme) poslouží dále popsaný algoritmus.

Celý princip spočívá ve vytvoření virtuálního obrazu polohy předmětů na dopravníku. Celé to zní složitěji než ve skutečnosti je. Dopravník si přeneseme do PLC v podobě pole hodnot typu BOOL, kde počet prvků bude odpovídat počtu pulzů za průjezd dílu celým dopravníkem (jako v předchozím případě). Ve skutečnosti se nám opět hodí udělat pole delší, zejména pokud budeme algoritmus řešit jako uzavřený a univerzální. Princip spočívá v posouvání všech prvků pole na základě enkodéru. Jedná se v podstatě o posuvný registr. Je-li na vstupu detekován předmět, první prvek pole je nastaven na hodnotu „true“ a s každým pulzem enkodéru se celé pole posune doprava o jednu pozici. Posouvaní je dobré provádět od konce pole, protože nám odpadá nutnost použít pomocnou mezipaměť při opačném postupu. Předměty jsou pak ve virtuálním obrazu dopravníku představovány shlukem prvků s hodnotou „true“. Nejlépe si lze logiku představit díky obrázku 2.

Obr. 2: Virtuální obraz předmětů na dopravníku

Zde si ukážeme i kousek z praktické realizace a dva z mnoha způsobů, jak lze obsluhovat virtuální obraz předmětů. Oba uvedené příklady jsou pro PLC Siemens Simatic.

První varianta je spíše pro milovníky intimního kontaktu s hardware a je realizována v jazyce STL (obdoba programování v assembleru). Jako datový prostor je zde použita bitová paměť PLC, pro jednoduchost a názornost pouze 2 bajty (MB200 a MB201). Ukázka zkráceného kódu je detailně okomentována na obrázku číslo 3. Zde se jedná o poměrně mechanický zápis algoritmu a jeho nevýhodou je neúměrně narůstající rozsah kódu pro delší pole. Kód v jazyce STL lze samozřejmě napsat i v univerzálnější variantě, bude však třeba sáhnout například po metodách nepřímé adresace (pointery a adresní registry). Výsledek bude shodný, ale realitou jest, že takový program bývá hůře čitelný, zejména pro líné programátory jakým je i autor. Protože ale do Říma vede mnoho cest, je na každém, aby si zvolil tu svou, jedinou a správnou.

Obr. 3: Příklad zápisu v jazyce SCL

Autor sám dává přednost variantě druhé, realizované pomocí jazyka SCL (obdoba vyšších programovacích jazyků jako C, Pascal, Basic, …). Popisovaná aplikace přímo vybízí k využití vyššího jazyka, v němž lze velmi elegantně a snadno pracovat s poli různých velikostí. Navíc ve vývojovém prostředí Step 7 TIA Portal je tento jazyk mnohem lépe implementován, než tomu bylo v minulosti ve Step 7 do verze 5.5, a je zřejmé, že Siemens k jeho užití více směruje. Úryvek z obdobně pracujícího kódu je popsán na obrázku 4.

Obr. 4: Příklad zápisu v jazyce SCL

Z ukázky programu lze jednoduše odtušit, že funkčnost zde byla rozšířena i o zpětný posuv pole. Jedná se o dva shodné algoritmy přičemž první se vykonává při pohybu dopravníku vpřed a druhý při pohybu vzad. Při pohybu vzad se výstupní snímač chová jako vstupní. Asi většina čtenářů uzná, že realizace v jazyce SCL je velmi jednoduchá a snadno čitelná. Uvedený kód zpravidla pochopí i programátor začátečník.

Po praktické ukázce již tedy máme funkční virtuální obraz předmětů na dopravníku a vrátíme se k vlastní kontrole polohy. Zde je na místě připomenout obrázek 2. Z něj je zřejmé, že vše co nám zbývá zrealizovat je vhodné porovnání signálu z výstupního čidla proti odpovídajícímu prvku ve virtuálním obrazu. Pokud nedošlo během transportu k posunu či zaseknutí předmětu na dopravníku, měl by se signál ze snímače dostavit zhruba ve stejné době jako příznak obsazenosti ve virtuálním obrazu. K vyhodnocení poruchy je šikovné použít například paměťový časovač (pozn. autora: PLC Simatic 300 nabízí vhodný časovač S_ODTS). Ten je spuštěn s příchodem hodnoty „true“ do sledovaného prvku virtuálního obrazu a resetován detekováním předmětu na výstupním snímači. Pokud není výstupní čidlo vybaveno dříve než vyprší časovač, dojde k vyhlášení poruchy. Časový limit pro poruchu je třeba odladit pro konkrétní aplikaci, aby nebyl algoritmus příliš nebo málo citlivý. Pokud chceme být důslední, je dobré se zamyslet nad ošetřením stavu, kdy dojde ke spuštění časovače a následnému zastavení dopravníku ještě před tím, než je kontrolovaný předmět detekován snímačem. Spolehlivost popsané metody značně závisí na tom, zda zůstává po dobu pohybu zachována poloha předmětů na dopravníku. Pokud je však změna polohy známá i to se dá do jisté míry řešit.

Virtuální obraz obsazenosti nám rovněž umožňuje velmi snadno funkci rozšířit o kontrolu obsazenosti, která byla v předchozí části realizována postupným snižováním řídící proměnné. Stačí přidat další FOR cyklus (hovoříme-li jazykem SCL), který jednoduše „proklepne“ celé pole na přítomnost hodnot „true“. Dle množství obsazených bitů můžeme obsazenost dopravníku interpretovat i procentně, délkově anebo v počtech kusů (při spočítání shluků „jedniček“). Záleží jen na fantazii tvůrce.

3. Trasování dat

Předávání dat s jednotlivými předměty je rovněž celkem běžný požadavek. Nezřídka se může na jednom dopravníku vyskytovat více rozdílných předmětů a pro potřeby technologie potřebujeme například znát „rodný list“ každého kusu. Opět k tomu s úspěchem použijeme virtuální obraz předmětů popsaný v předchozí části. Rozlišovat budeme zhruba dvě metody trasování dat:

  1. Sledované předměty mají vždy parametry z předem známé, omezené databáze (například receptura).
  2. Parametry předmětu jsou unikátní s každým kusem (například generované výrobní číslo).

První varianta je v zásadě datově úspornější. Potřebná data jsou totiž uložena v libovolné centrální databázi (může se jednat o datový blok v PLC, nadřazený řídící systém, atp.) a ke sledovanému předmětu pouze přiřazujeme unikátní ukazatel do databáze. Asi nejběžnějším ukazatelem je číselné ID, například číslo konkrétní receptury. Pro trasování identifikátoru pouze předefinujeme virtuální obraz z pole hodnot BOOL na pole číselných hodnot (Int, Dint, …). Se vstupem předmětu na dopravník potom nenastavujeme hodnotu „true“, ale předáváme konkrétní ukazatel. Díky tomu se kdekoliv po cestě můžeme pomocí ukazatele podívat do databáze a převzít potřebné hodnoty. Rovněž nám zůstávají zachovány předchozí schopnosti virtuálního obrazu (vyhodnocení obsazenosti a kontrola polohy), jen je třeba mírně upravit program.

Druhá varianta není o nic složitější než ta předchozí. Rozdíl je v tom, že s předměty necestuje pouze ukazatel, ale kompletní balíček dat výhradně vázaný ke konkrétnímu kusu. Může se jednat například o výrobní číslo, výsledek kontroly kvality, časové razítko apod. Opět nám stačí předefinovat pole virtuálního obrazu tak, že nyní můžeme předávat celé datové struktury. Struktura pak může obsahovat libovolné parametry libovolných datových typů. Může se jednat i o kombinaci obou uvedených variant trasování dat. Zde už však musíme brát v potaz i datovou náročnost. Celé struktury, znásobené počtem prvků pole, mohou zabírat značné množství paměti. Zvláště pokud použijeme datový typ string, velikost pole prudce stoupá. Ve virtuálním poli je navíc každý předmět zrcadlen zpravidla v několika sousedních prvcích – čili jedna data jsou v poli duplicitní. Počet duplikátů záleží na délce předmětu a rozlišení enkodéru. Pokud narážíme na paměťové limity, lze se zamyslet nad zkrácením datového pole. Data můžeme například posouvat v poli na každý druhý pulz enkodéru, což nám sníží datovou náročnost na polovinu. Možnosti jsou opět nepřeberné a univerzální řešení neexistuje. Vždy je nutné se přizpůsobit požadavkům konkrétní aplikace.

Závěrem

Tímto jsme si představili několik variant (zpravidla jednoduše a levně proveditelných), jak můžeme kontrolovat tok materiálu na dopravnících. Rovněž se autor pokusil vyzdvihnout výhody využití vyššího programovacího jazyka (zde SCL), díky němuž je konkrétní problematika velice snadno zvládnutelná a i dobře zpětně čitelná. Obsah článku však nelze dogmaticky přijmout jako jediné řešení. Každý tvůrce software pro automatizaci si najde svou cestu k úspěšné předávce stroje. Autor vychází z osobních praktických zkušeností, získaných při vývoji PLC programů pro linky a stroje, zejména v oboru zpracování a manipulace se sklem. Pokud článek někomu poslouží myšlenkou či nápadem, nebyl čas strávený jeho tvorbou marný. Dále uvádíme, že za účelem vzniku článku nebyl pokácen jediný strom. Tímto se rozloučíme a budeme se těšit na shledanou u dalšího dílu.