Jak se říká nejlepší na konec, ale v otázce kompletní komunikace IO-link bude tohle pro spoustu uživatelů asi nejhorší část. Konečně si ukážeme jak to rozchodit v PLC, a že to zase až tak úplně jednoduché nebude, uvidíte sami. Vytvořili jsme pro Vás také videoukázku, jak to všechno jede. Jestliže ale potřebujete jen číst cyklicky procesní hodnoty ze snímače (většina případů), tak je situace přesně opačná. Je to jednoduché, tak dočtěte až do konce.
K naší PLC sestavě připojíme nějaké ovladače, červeným budeme číst ze snímače, dva zelené slouží k zápisu jedné nebo druhé sady zvoleného parametru do snímače. V praxi se to takhle dělat nebude, ale pro vyzkoušení a porozumění jak to funguje, nám bude tohle zapojení vyhovovat. |
Jak jsme uvedli ve třetím kroku, načteme do S7-PTC IODD soubor připojeného senzoru a dále vše kopírujeme do SM 1278 modulu v sestavě S7-1200. Vyzkoušíme také online IO-Link spojení a vše co jsme si ukázali ve třetím kroku. To jen pro připomenutí. |
|
Zatím jsme se nezmínili o jedné věci, bez které žádnou komunikaci nerozchodíme. A sice popis IODD souboru. Ten je nesmírně důležitý a najdete jej na webu vždy někde v blízkosti IODD souboru patřičného výrobce. Bez popisu nebudete vědět, co a kde se nachází za parametry. Je to podobné jako u Profibus/Profinet, jestliže nevíte, jak vypadá telegram, tak jste vedle. Tento popis bývá v html, pdf a podobných formátech, záleží na výrobci, a je vždy jiný pro jiný druh snímače, jak je vidět z obrázku. |
Popis komunikace obsahuje více stránek, záleží na složitosti snímače. Data jsou rozdělena po tzv. indexech a podindexech, každý index obsahuje určité množství bytes, záleží na tom, co konkrétní index obsahuje. Například index 67 na obrázku je velký jen 4 byte a slouží k zápisu a čtení parametru offsetu skutečné hodnoty vzdálenosti. Máme totiž připojen laserový snímač vzdálenosti. Index 72 ve čtyřech bytech vrací skutečnou hodnotu vzdálenosti, v dalším byte máme kvalitu signálu atd. Je nezbytné si tento popis vždy důkladně prostudovat, například index 20, který obsahuje text typu zařízení, má 27 bytes. Klikněte si na obrázek pro zvětšení. |
Online spojení s PLC je funkční, my si poznačíme identifikační číslo hardware, tedy našeho IO-Link Master modulu Simatic, které je 269. |
Firemní blok Siemens "IO_LINK_CALL_1200", který jsme do projektu přetáhli z knihovny, vložíme někde do PLC programu. Automaticky si při vložení vygeneruje vlastní instanční datový blok. Popis tohoto bloku je na webu podpory Siemens, odkaz v závěru, ale my si přesto důležité vstupy popíšeme. Pozor, tento blok vyžaduje acyklickou komunikaci, tedy nevyvolává se v každém cyklu programu, ale vždy jednou a jeho běh trvá několik cyklů programu, což uvidíme v závěru a na videoukázce. |
REQ - požadavek na spuštění komunikace - bloku, reaguje na pozitivní hranu.
ID - identifikační číslo hardware, to je to naše 269, ale v hexa.
CAP - přístupový bod funkce, obvykle bývá 227 a nemění se.
RD_WR - jasné, bit který udává, zda blok bude ze snímače číst, nebo do něj zapisovat. Obojí najednou nejde.
PORT - port IO_Link masteru, který budeme obsluhovat, tedy kde máme připojen snímač.
IOL_INDEX - číslo idexu který budeme číst/zapisovat
IOL_SUBINDEX - bude-li nula, čte celý index, jinak udává číslo podindexu který chceme číst. Tohle se nikde nedočtete!
LEN - délka, kolik bytes chceme zapsat do snímače. Pro čtení nemá význam. Také není nikde uvedeno.
RECORD_IOL_DATA - klíčový parametr, a sice kam se budou přečtené data ukládat, nebo odkud se vezmou pro zápis.
DONE_VALID - bitový signál který nám říká, že komunikace proběhla OK a data jsou platná
BUSY - blok právě komunikuje
IOL_STATUS - status bloku, v případě poruchy vrací kód poruchy, například 8002 = špatná adresa portu.
RD_LEN - počet bytes které byly přečteny. Zjistíte, zda jste přečetli celý index.
... dále už jsou funkce obdobné jakou u jiných bloků.
Parametr RECORD_IOL_DATA je datový blok DB111, kde se uloží přečtené hodnoty ze snímače. Tento datový blok si založíme nový s libovolným názvem, ale pozor, musí být dlouhý přesně 232 bytes, typu pole po jednotlivých bytech. Jinak nám to funkční blok nevezme. Pro zápis je vhodné si udělat další datový blok, do kterého si připravíme data, které budeme chtít zapsat do senzoru. |
Pokud potřebujete pro přehlednost vidět adresy jednotlivých bytes nejen v symbolických názvech, zrušte optimalizaci přístupu ve vlastnostech datového bloku. Pak ve sloupci offset budou adresy podobně jako ve Step7 pro S7-300/400. |
Příprava parametrů pro čtení může pak vypadat pro přehlednost třeba takto. Index 72, viz začátek článku. Doporučuji nejprve si rozchodit čtení a vyzkoušet si různé indexy a podindexy, velmi brzy se dá zjistit, jak to funguje. |
Takhle už to vypadá v reálu, čtení parametru ze snímače IO-Link Master modulu. V praxi bude důležité celou komunikaci řádně ošetřit, například nasetovat požadavek na čtení, počkat na signál přečteno nebo porucha a resetovat požadavek. Vyhodnotit všechny stavy funkčního bloku a zajistit správnou posloupnost signálů. Klikněte si na obrázek pro zvětšení. |
Funkční blok použijeme ještě jednou, ale tentokrát s jiným datovým blokem na RECORD_IOL_DATA s DB112. |
Na začátek datového bloku pro zápis si připravíme hodnoty offsetu skutečné vzdálenosti, tedy nula nebo 10000, což bude znamenat, že údaj bude buď správný, nebo zvětšený o 1000mm, jak uvidíme dále. Tento parametr jsme vybrali proto, abychom ihned viděli, jak se projeví jeho změna třeba na analogovém výstupu hodnoty vzdálenosti. |
Všechno je vidět ve VAT tabulce, například hodnota čtení. Každý parametr, který přečtete, je vhodné si okamžitě uložit někam, třeba do dalšího datového bloku, který už bude sestaven přesně podle jednotlivých indexů a s komentáři. Každé čtení ukládá data vždy od začátku DB, takže minulé hodnoty jsou přepsány a tím ztraceny. Klikněte si na obrázek pro zvětšení. |
Zápis pak probíhá obdobně, stačí změnit řídící bit pro čtení/zápis. Každý si může v PLC programu vytvořit a ošetřit IO-Link komunikaci po svém, není jen jedno řešení, je taky možné číst více indexů po sobě a podobně. Klikněte si na obrázek pro zvětšení. |
Prázdné CPU a doby cyklu. Ty nejdelší cykly 6ms byly vždy při spuštění funkčního bloku. Zcela jistě nás ale bude zajímat, jak dlouho taková komunikace trvá. |
Využili jsme proto stavové signály z funkčního bloku a ty zavěsili na běžné digitální výstupy snímané osciloskopem. Samozřejmě že přesnost není ideální (cyklus pro zápis do výstupů, zpoždění), ale vzhledem k naměřeným hodnotám se to ukázalo jako nepodstatné. |
Jeden signál je požadavek a ukončení komunikace, druhý pak chod funkčního bloku. Časová základna 40ms/dílek, délka tři dílky, tedy 120ms. |
Tady to máme, čtení 2x po sobě, časovka 100ms/dílek, tedy stejné hodnoty. Ovšem pozor, tyhle údaje jsou velmi rozdílné pro jiné snímače a zařízení na IO-Link, doba vykonání bloku může být klidně i větší. Proto je u každého snímače možné číst (pokud to má význam i zapisovat) základní hodnoty cyklicky přes PIW oblast PLC, jak uvidíme dále. |
V každém popisu komunikace zařízení je na začátku tabulka procesních dat, která jdou číst cyklicky, tedy v každém cyklu. Je to rozdílné pro každý snímač, u našeho P+F VDM28-8 máme k dispozici více procesních hodnot. Jak se čtou, si ukážeme dále. |
V parametrizaci IO-Link modulu SM1278 je možnost vybrat a nastavit právě I/O oblast. Přes tyto adresy budeme procesní hodnoty číst, podobně jako by to byl třeba analogový vstup. Můžeme nastavit také další parametry čtení PIW oblasti. |
V software S7-PCT najdeme tuto oblast ve vlastnosti IO-Link modulu v uvedené záložce. V dolní tabulce pak máme název procesní hodnoty. Je vidět, že interně si modul začíná číslovat oblast od nuly. Klikněte si na obrázek pro zvětšení. |
Pro porozumění stačí přepnout zobrazení na absolutní a nyní je vidět, že se jedná o stejnou oblast, kterou jsme nastavili v HW konfiguraci SM1278. |
A je to, v %IW10 máme procesní hodnotu vzdálenosti hezky online čtenou v každém cyklu. |
Každý snímač má tohle trochu jiné, jednodušší má v procesních datech v šestnácti bitech jednu, dvě hodnoty, tento VDM28 může přes interní parametr nastavit co bude v této oblasti k dispozici. Například změníme snímači interně rozlišení na 10mm. Klikněte si na obrázek pro zvětšení. |
Asi takhle pak vypadá čtení procesní hodnoty přes %IW10. Všimněte si, že hodnota vzdálenosti v %MD100 dostupná přes acyklickou komunikaci FB bloku Siemens je stále stejná, toto nastavení nemá vliv na komunikaci přes FB blok. |
Nejlepší nakonec. Pokud blok Siemens (FB50001) pro acyklickou kompletní komunikaci zablokujeme, procesní hodnoty dostupné přes PIW oblast jsou samozřejmě stále funkční. |
Náš PLC Simatic S7-1200 and IO-Link.
|
Závěr:
Je důležité vědět jak taková komunikace funguje, jak nastavit a číst data ze snímačů také acyklicky, neboť všechny parametry nejsou dostupné přes procesní data. Ovšem můžete také nastavit snímač ručně přes "Teach" funkci a jen cyklicky číst hlavní hodnotu, nebo upravit parametry zařízení s pomocí S7-PCT software, a opět jen číst hodnoty v PIW oblasti. Tohle řešení je rychlé, jednoduché a bude je asi preferovat většina uživatelů.
Jaroslav Blažek
Doplňující odkazy k článku:
Popis funkčního bloku IO_LINK_CALL pro PLC Simatic V13: http://support.automation.siemens.com/WW/view/en/82981502
Software S7 Port Configuration Tool: http://support.automation.siemens.com/WW/view/en/32469496