Vzorové programy IoT, Mosaic, io-link, projekt, projektování 16.04.2026 09:36 16.04.2026 09:40

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í:

  1. Nastavit požadavek na čtení přes rqGetData.
  2. Předat IP adresu modulu AL1352 v parametru ipIfm.
  3. Nastavit počet aktivně používaných IO-Link portů v usedIfmPorts.
  4. Počkat, až blok nastaví done := TRUE.
  5. Pokud je současně err := FALSE, projít jednotlivé porty v poli response.
  6. U každého portu ověřit, že response[i].code = 200.
  7. Teprve potom předat response[i].data.bin do 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

  • rqGetData Hrana požadavku na načtení dat z IO-Link masteru.
  • ipIfm IP adresa IO-Link masteru ifm AL1352.
  • usedIfmPorts Poč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.
  • busy Probíhá komunikace s modulem.
  • err Při čtení došlo k chybě.
  • response Pole odpovědí pro jednotlivé porty. Každá položka obsahuje:
    • cid identifikátor komunikace,
    • data.value data vrácená modulem ve formátu ASCII HEX,
    • data.bin stejná data převedená do binární podoby,
    • code HTTP návratový kód.
  • infoTx Textová 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:

  1. Zjistit z IODD strukturu vstupních procesních dat konkrétního senzoru.
  2. Navrhnout vlastní datový typ STRUCT, který bude odpovídat požadovaným hodnotám v aplikaci.
  3. Vytvořit funkci, která načtená binární data z response[i].data.bin rozebere na jednotlivé položky této struktury.
  4. Tuto funkci zavolat v prgMain.ST po ú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.ST Hlavní ukázka použití čtení dat a volání dekódovacích funkcí.
  • fbRead_IO_Link_Data.ST Funkční blok pro načtení procesních vstupních dat z ifm AL1352.
  • DecodeKte101ProcessDataIn.ST Příklad jednoduchého dekódování vstupních dat senzoru.
  • DecodeVvb001ProcessDataIn.ST Pří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