Přiložený projekt ukazuje, jak v prostředí Mosaic načítat procesní vstupní data z IO-Link zařízení připojených k IO-Link masteru ifm electronic AL1352 přes REST API. Ukázka je zaměřena hlavně na praktické použití v aplikaci: vyvolání čtení dat v prgMain, kontrolu výsledku a následné dekódování načtených binárních dat pro konkrétní senzor.
Přiložený funkční blok řeší pouze načtení vstupních procesních dat z IO-Link masteru. Převod načtených binárních dat na smysluplnou strukturu konkrétního zařízení je potřeba implementovat samostatně podle IODD daného IO-Link senzoru.
Jak se projekt používá
Hlavní aplikační logika je v souboru prgMain.ST. Zde se funkční blok zavolá s IP adresou masteru a počtem použitých portů:
Read_IO_Link( rqGetData := rqGet,
ipIfm := '10.1.1.251',
usedIfmPorts := 3);
Doporučený postup použití je následující:
- Nastavit požadavek na čtení přes
rqGetData. - Předat IP adresu modulu AL1352 v parametru
ipIfm. - Nastavit počet aktivně používaných IO-Link portů v
usedIfmPorts. - Počkat, až blok nastaví
done := TRUE. - Pokud je současně
err := FALSE, projít jednotlivé porty v poliresponse. - U každého portu ověřit, že
response[i].code = 200. - Teprve potom předat
response[i].data.bindo vlastní dekódovací funkce pro konkrétní senzor.
V prgMain.ST je tento postup ukázaný přímo v aplikaci. Program po úspěšném načtení dat prochází použité porty a podle čísla portu volá odpovídající dekódovací funkci:
IF Read_IO_Link.done THEN
IF Read_IO_Link.err THEN
lastErr := Read_IO_Link.infoTx;
ELSE
lastErr := '';
FOR i := 1 TO Read_IO_Link.usedIfmPorts DO
IF Read_IO_Link.response[i].code = 200 THEN
CASE i OF
1 : VVB001 := DecodeVvb001ProcessDataIn( raw := void( Read_IO_Link.response[i].data.bin[1]));
2 : KTE101 := DecodeKte101ProcessDataIn( data := Read_IO_Link.response[i].data.bin[1]);
END_CASE;
ELSE
lastErr := 'IFM port ' + USINT_TO_STRING( i) + ' (cid=' + Read_IO_Link.response[i].cid +
'): response error: ' + UINT_TO_STRING( Read_IO_Link.response[i].code);
END_IF;
END_FOR;
Read_IO_Link( rqGetData := 0);
END_IF;
END_IF;
Rozhraní funkčního bloku
Zdrojový kód bloku je v fbRead_IO_Link_Data.ST. Pro běžné použití není nutné řešit jeho vnitřní implementaci, důležité jsou hlavně vstupy, výstupy a význam vrácených dat.
Vstupy
rqGetDataHrana požadavku na načtení dat z IO-Link masteru.ipIfmIP adresa IO-Link masteru ifm AL1352.usedIfmPortsPočet portů, které se mají číst. Blok pracuje maximálně s 8 porty.
Výstupy
doneČtení všech požadovaných portů bylo dokončeno.busyProbíhá komunikace s modulem.errPři čtení došlo k chybě.responsePole odpovědí pro jednotlivé porty. Každá položka obsahuje:cididentifikátor komunikace,data.valuedata vrácená modulem ve formátu ASCII HEX,data.binstejná data převedená do binární podoby,codeHTTP návratový kód.
infoTxTextová informace o stavu nebo chybě.
Blok čte procesní vstupní data přes endpoint:
http://<IP adresa>/iolinkmaster/port[n]/iolinkdevice/pdin/getdata
Pro další zpracování jsou nejdůležitější response[i].code a response[i].data.bin.
Vlastní dekódování dat senzoru
Každý IO-Link senzor může mít jinou strukturu procesních dat. Funkční blok proto neprovádí obecný převod načtených dat na aplikační strukturu zařízení. Po načtení dat je potřeba vytvořit vlastní dekódovací funkci, která z pole bajtů sestaví datový typ odpovídající konkrétnímu senzoru.
Tato dekódovací funkce musí být navržena podle IODD daného zařízení. IODD určuje význam jednotlivých bitů a bajtů procesních dat, jejich pořadí i případné škálování hodnot.
Praktický postup je typicky tento:
- Zjistit z IODD strukturu vstupních procesních dat konkrétního senzoru.
- Navrhnout vlastní datový typ
STRUCT, který bude odpovídat požadovaným hodnotám v aplikaci. - Vytvořit funkci, která načtená binární data z
response[i].data.binrozebere na jednotlivé položky této struktury. - Tuto funkci zavolat v
prgMain.STpo úspěšném načtení dat.
Ukázkové dekódovací funkce
Soubor DecodeKte101ProcessDataIn.ST ukazuje jednoduchý příklad dekódování jednoho bajtu procesních dat senzoru KTE101. Funkce z jednoho vstupního bajtu skládá strukturu se stavem zařízení a binárními příznaky vstupů a výstupu.
Soubor DecodeVvb001ProcessDataIn.ST ukazuje složitější příklad pro senzor VVB001, kde je potřeba z více bajtů sestavit několik číselných hodnot, teplotu a stavové bity.
Tyto dvě funkce slouží jako vzor, jak navázat na výstup response[i].data.bin. Nejde o obecné řešení pro všechny IO-Link senzory.
Důležité omezení
- Funkční blok zajišťuje pouze čtení vstupních procesních dat.
- Blok neřeší zápis dat do IO-Link zařízení.
- Blok neřeší parametrizaci senzoru.
- Blok neprovádí automatické generické dekódování podle IODD.
- Převod načtených dat na strukturu konkrétního modulu je nutné implementovat samostatně dle IODD použitého IO-Link senzoru.
Hlavní soubory projektu
prgMain.STHlavní ukázka použití čtení dat a volání dekódovacích funkcí.fbRead_IO_Link_Data.STFunkční blok pro načtení procesních vstupních dat z ifm AL1352.DecodeKte101ProcessDataIn.STPříklad jednoduchého dekódování vstupních dat senzoru.DecodeVvb001ProcessDataIn.STPříklad dekódování rozsáhlejších procesních dat senzoru.
Archiv projektové skupiny s příkladem ke stažení _PG_Example_IO_Link_2026-04-16_09-19-10.piz
