Funkční kódy se píšou desítkově (FC 16) i hex (0x10), obojí znamená totéž. Kódy 65–72 a 100–110 jsou ponechány výrobcům pro vlastní funkce.
01 čtení coilů (Read Coils)
0x01 · Coily (0x)
Čte 1 až 2000 výstupních bitů (coilů). Požadavek nese počáteční adresu a počet, odpověď počet bajtů a bity po 8 v bajtu, první adresa v nejnižším bitu.
Coily jsou reléové výstupy nebo přepínatelné příznaky. Mnoho elektroměrů a střídačů coily vůbec nemá a stavové bity drží v holding registrech. Když 01 vrátí výjimku 01, hledejte registr, který bit nese.
02 čtení diskrétních vstupů (Read Discrete Inputs)
0x02 · Diskrétní vstupy (1x)
Čte 1 až 2000 vstupních bitů jen pro čtení (diskrétní vstupy), zabalených po 8 v bajtu jako coily.
Typické pro digitální vstupy I/O modulů a PLC. Elektroměry a střídače ho používají zřídka, stavy hlásí v registrech.
03 čtení holding registrů (Read Holding Registers)
0x03 · Holding registry (4x)
Čte 1 až 125 po sobě jdoucích 16bitových holding registrů. Požadavek nese počáteční adresu a počet, odpověď počet bajtů a dva bajty na registr, vyšší bajt první.
Zdaleka nejpoužívanější funkce. Většina elektroměrů, střídačů a měničů dává všechno do holding registrů, i měřené hodnoty jen pro čtení. Výjimka 02 obvykle znamená adresu posunutou o 1 nebo čtení přes mezeru v mapě registrů.
04 čtení input registrů (Read Input Registers)
0x04 · Input registry (3x)
Čte 1 až 125 16bitových input registrů jen pro čtení. Rámce vypadají přesně jako u funkce 03.
Některá zařízení drží měřené hodnoty v input registrech a nastavení v holding registrech. Když 03 vrátí výjimku 02 nebo samé nuly, zkuste 04 na stejné adrese, a naopak.
05 zápis jednoho coilu (Write Single Coil)
0x05 · Coily (0x)
Přepne jeden coil. Hodnota je FF 00 pro ZAP a 00 00 pro VYP, cokoli jiného je neplatné. Odpověď je přesná kopie požadavku.
Poslat 00 01 pro ZAP je častá chyba a končí výjimkou 03. Některá zařízení používají coil pro jednorázové akce, třeba vynulování čítačů energie.
06 zápis jednoho registru (Write Single Register)
0x06 · Holding registry (4x)
Zapíše jednu 16bitovou hodnotu do holding registru. Odpověď je přesná kopie požadavku.
Nehodí se pro 32bitové hodnoty, protože obě poloviny by se zapsaly v jiný okamžik. Některá zařízení přijmou 06 jen pro určité registry a pro ostatní vyžadují 16.
07 čtení stavu výjimky (Read Exception Status)
0x07 · jen sériová linka
Čte osm stavových bitů, jejichž význam si definuje každé zařízení samo.
Dnes se používá zřídka. Zda ho zařízení vůbec podporuje, zjistíte v návodu.
08 diagnostika (Diagnostics)
0x08 · jen sériová linka
Diagnostika vybraná podfunkcí. Podfunkce 0000 pošle data rovnou zpět (smyčka), ostatní čtou nebo nulují čítače sběrnice.
Podfunkce 0000 je rychlý test linky bez sahání na jakýkoli registr, pokud ji zařízení podporuje.
11 čítač komunikačních událostí (Get Comm Event Counter)
0x0B · jen sériová linka
Vrátí stavové slovo a čítač úspěšně zpracovaných zpráv.
Dvojí přečtení čítače ukáže, jestli zařízení vaše požadavky vůbec přijímá a zpracovává.
12 log komunikačních událostí (Get Comm Event Log)
0x0C · jen sériová linka
Vrátí stavové slovo, čítače událostí a zpráv a posledních 64 komunikačních událostí.
Podporuje ho málo zařízení. Hodí se hlavně při hledání občasných chyb.
15 zápis více coilů (Write Multiple Coils)
0x0F · Coily (0x)
Zapíše 1 až 1968 po sobě jdoucích coilů. Hodnoty jsou zabalené po 8 v bajtu jako u funkce 01, odpověď zopakuje počáteční adresu a počet.
Počet bajtů musí sedět s počtem coilů: 10 coilů potřebuje 2 bajty. Nesoulad končí výjimkou 03.
16 zápis více registrů (Write Multiple Registers)
0x10 · Holding registry (4x)
Zapíše 1 až 123 po sobě jdoucích holding registrů. Požadavek nese počáteční adresu, počet, počet bajtů a hodnoty, odpověď zopakuje počáteční adresu a počet.
Správná cesta pro zápis 32bitových hodnot, třeba float, protože obě poloviny se změní najednou. Některá zařízení odmítnou 16 pro jediný registr a chtějí 06, jiná odmítnou 06.
17 identifikace serveru (Report Server ID)
0x11 · jen sériová linka
Vrátí identifikační blok podle výrobce a příznak běh/stop.
Obsah se liší výrobce od výrobce. Strukturovanou náhradou je funkce 43/14.
20 čtení souborového záznamu (Read File Record)
0x14
Čte souborové záznamy: číslované skupiny registrů adresované číslem souboru a záznamu.
Některá zařízení tak zpřístupňují logy nebo konfiguraci. V praxi vzácné.
21 zápis souborového záznamu (Write File Record)
0x15
Zapisuje souborové záznamy: číslované skupiny registrů adresované číslem souboru a záznamu.
V praxi vzácné. Rozložení souborů popisuje návod k zařízení.
22 maskovaný zápis registru (Mask Write Register)
0x16 · Holding registry (4x)
Změní jednotlivé bity jednoho holding registru: výsledek = (obsah AND and_mask) OR (or_mask AND NOT and_mask).
Nastaví jeden bit řídicího slova bez předchozího čtení. Mnoho zařízení ji nepodporuje, pak čtěte funkcí 03, změňte bit a zapište zpět funkcí 06.
23 čtení a zápis více registrů (Read/Write Multiple Registers)
0x17 · Holding registry (4x)
Zapíše a přečte registry v jedné transakci, zápis proběhne první. Zapsat lze až 121 registrů a přečíst až 125.
Podporují ji hlavně PLC. Když zařízení odpoví výjimkou 01, použijte 16 a 03 po sobě.
24 čtení fronty FIFO (Read FIFO Queue)
0x18
Přečte až 31 registrů z fronty FIFO, před nimi jejich počet.
Podporuje se zřídka.
43 zapouzdřené rozhraní (Encapsulated Interface Transport)
0x2B
Obálka pro podprotokoly vybrané typem MEI. Typ MEI 0E, čtení identifikace zařízení, vrací textové objekty jako název výrobce, kód produktu a verzi firmwaru.
Šikovné, když potřebujete zjistit, co je na sběrnici, a nemáte návod. Podpora je volitelná a mnoho jednoduchých zařízení odpoví výjimkou 01.