Promotic
WikipediaLinkedInYoutubeTwitterFacebook

PmModbusMr - Ovladač pro komunikaci protokolem Modbus Master

Před použitím tohoto ovladače v aplikaci PROMOTIC je vhodné přečíst kapitolu: Komunikace pomocí PROMOTIC ovladačů.
 
Základní vlastnosti ovladače:
- Použití tohoto ovladače je vázáno na zakoupení licence: PmModbusMr. S freeeware verzí PmFree nebo při vývoji aplikace (s vývojovou licencí pro testovací účely) je tato komponenta funkční vždy.
- Komunikace je přes Ethernet nebo přes standardní sériovou linku (COM1, COM2 ...).
- Aplikace PROMOTIC je z hlediska této komunikace vždy MASTER (tzn. že dává podnět k přenosu dat). Pro SLAVE komunikaci lze použít: PmModbusSl - Ovladač pro komunikaci protokolem Modbus Slave.
- Ovladač je začleněn do systému PROMOTIC pomocí objektu PmComm.

Ovladač podporuje používání objektů PmCommMsg a PmCommData. Pro běžné případy přenosu dat je výhodnější použít objekt PmCommData.

Pro snadné přidání tohoto ovladače do aplikace je vhodné použít: Předkonfigurace ve skupině "Modbus protokol"

- Komunikace je síťová, tzn. že jedním objektem PmComm lze komunikovat s více zařízeními (protokol umožňuje adresaci více zařízení).
- Ovladač podporuje TCP, RTU a ASCII přenosový mód.
- Lze přenášet standardní 1-bitové (bits) a 16-bitové (registers) hodnoty i méně standardní 32-bitové hodnoty (float a long) a 64-bitové hodnoty (float double precision).
- Ovladač lze také použít pro protokol JBUS. Protokol JBUS je podmnožinou protokolu Modbus RTU. Všechny zprávy implementované v tomto ovladači (viz níže) podporuje i protokol JBUS.
 
Jsou podporovány následující Modbus datové typy:
- b = Bit (1Bit): v PLC reprezentován 1 bitem. V aplikaci PROMOTIC jako datový typ Boolean.
- W = Word (2Byte Unsigned Integer): v PLC reprezentován 16 bity (hodnota od 0 do 65535). V aplikaci PROMOTIC jako datový typ Long.
- I = Int (2Byte Signed Integer): v PLC reprezentován 16 bity (hodnota od -32767 do +32767). V aplikaci PROMOTIC jako datový typ Integer.
- L1 = Long type 1 (4Byte Signed Integer): v PLC reprezentován 32 bity. V aplikaci PROMOTIC jako datový typ Long. Pouze pro zprávy typu 03, 04, 16. Binární formát tohoto typu je stejný jak v PC, pouze byty jsou přehozeny (pořadí bytů v PC:1234 a v PLC:2143). Používá například PLC Modicon, Wago, atd.
- L2 = Long type 2 (4Byte Signed Integer): Stejný jako předchozí datový typ, jen byty jsou přehozeny jinak (pořadí bytů v PC:1234 a v PLC:4321). Používá například PLC JUMO.
- L3 = Long type 3 (4Byte Signed Integer): Stejný jako předchozí datový typ, jen pořadí bytů se nemění - je stejné jako v PC (pořadí bytů v PC:1234 a v PLC:1234).
- R = Float type 1 (4Byte - IEEE 754): v PLC reprezentován 32 bity. V aplikaci PROMOTIC jako datový typ Single. Pouze pro zprávy typu 03, 04, 16. Binární formát tohoto typu je dle normy IEEE-754, tedy stejná jak v PC, pouze byty jsou přehozeny (pořadí bytů v PC:1234 a v PLC:2143).
- R2 = Float type 2 (4Byte - IEEE 754): Stejný jako předchozí datový typ, jen byty jsou přehozeny jinak (pořadí bytů v PC:1234 a v PLC:4321). Používá například PLC ABB AC500.
- R3 = Float type 3 (4Byte - IEEE 754): Stejný jako předchozí datový typ, jen pořadí bytů se nemění - je stejné jako v PC (pořadí bytů v PC:1234 a v PLC:1234).
- D1 = Float Double-precision type 1 (8Byte - IEEE 754): v PLC reprezentován 64 bity. V aplikaci PROMOTIC jako datový typ Double. Pouze pro zprávy typu 03, 04, 16. Binární formát tohoto typu je dle normy IEEE-754, tedy stejná jak v PC, pouze byty jsou přehozeny (pořadí bytů v PC:12345678 a v PLC:21436587).
- D2 = Float Double-precision type 2 (8Byte - IEEE 754): Stejný jako předchozí datový typ, jen byty jsou přehozeny jinak (pořadí bytů v PC:12345678 a v PLC:87654321).
- D3 = Float Double-precision type 3 (8Byte - IEEE 754): Stejný jako předchozí datový typ, jen pořadí bytů se nemění - je stejné jako v PC (pořadí bytů v PC:12345678 a v PLC:12345678).
 

Doporučené hodnoty parametrů:

Doporučené hodnoty pro Parametry sériové linky:
Počet datových bitů8 pro RTU mod, 7 pro ASCII mod
Počet stopbitů1 pokud je použita parita, 2 pokud je parita NO (žádná)
Doporučené hodnoty pro Parametry Ethernet:
Číslo TCP/UDP portu502 (pro typ dat MODBUS TCP/IP)
Typ Ethernet přenosuTCP (pro typ dat MODBUS TCP/IP)
Popis a doporučené hodnoty pro Parametry protokolu:
Typ dat protokoluJen pro Ethernet. Upřesňuje tvar dat protokolu. Lze zvolit:
MODBUS TCP/IP - Standardní Ethernet MODBUS komunikace. Proti datům určeným pro sériovou linku se liší speciální hlavičkou a přenáší se přes Ethernet TCP na portu 502.
Stejná data jak pro sériovou linku - Tuto volbu lze zvolit například když má zařízení sériovou linku a převodníkem RS232/Ethernet je zapojeno do Ethernetu. Pokud převodník nemění přenášená data, pak lze takto jednoduše komunikovat přes Ethernet se zařízením, který nemá Ethernet výstup.
Timeout příjmu odpovědiJen pro seriovou linku. Vhodná volba je například 2000 ms. Čas (v milisekundách) po který bude ovladač čekat na odpověď při vyslání zprávy. Pokud do této doby nepřijde vyžádaná odpověď, přenos zprávy se ukončí (vyvolá se událost onEndOfTransfer s chybou 24 nebo 66).
Přenosový módProtokol MODBUS má dvě možnosti přenosu.

V parametrech zprávy objektu PmCommMsg lze tento režim případně změnit (pro speciální případ kdy se komunikuje s více PLC v různých režimech).

RTU - Nejběžnější přenosový mód, kdy se data přenášejí v binárním tvaru.
ASCII - Přenosový mód, kdy se data přenášejí v ASCII tvaru. Tento mód není podporován pro MODBUS TCP/IP.

Popis komunikace pomocí objektů PmCommData

Pro tento ovladač lze používat objekty PmCommData. Pro běžné případy přenosů dat je to výhodnější než použít objekt PmCommMsg.

Proměnné v objektu PmCommData (nebo ještě lépe proměnné v objektu PmData s datovým rozšířením ExtComm) mohou být v libovolném množství, libovolného typu v libovolném pořadí. Ovladač sám optimálním způsobem vnitřně vytvořenými komunikačními zprávami vyčítá data ze zařízení.

Proměnné se vyčítají všechny (pokud je povolen konfigurátor Obnovování dat povoleno). Při zápisu do proměnné se posílá do zařízení jen tato jedna proměnná (pokud je povolen konfigurátor Automaticky zasílat při zápisu do položky).

 
Popis konfigurátoru ItemID:

ItemId je textový identifikátor položky, který slouží k adresaci veličiny v zařízení. Z konfigurátoru ItemID ovladač pozná, jak se má hodnota položky přijímat nebo vysílat. Text lze buď napsat ručně, nebo sestavit pomocí okna, které se otevře tlačítkem vpravo od konfigurátoru. Pro zadání lze použít Makro výraz (vyhodnocuje se při spouštění aplikace).

Text může mít podobu například "dev2.Ri33.W" s významem:

dev2 = položka je v PLC (device) s adresou 2. Místo čísla lze zadat devD (=default adresa) a PLC adresa bude určena podle konfigurátoru "Přednastavená adresa PLC".
Ri33 = je z datové oblasti "Input registers na relativní adrese 33. Adresa 33 je jen relativní, při komunikaci se k této hodnotě ještě připočte hodnota zadaná v konfigurátoru "Bázové adresy oblastí".

Seznam datových oblastí:

- Bo = oblast "Coil status / Output bits".
Pro příjem dat je použita Modbus funkce: FN01 (Read Coil Status, Read Output Bits).
Pro zápis dat je použita Modbus funkce: FN05 (Force Single Coil, Write 1 Bit).
- BoM = oblast "Coil status / Output bits".
Pro příjem dat je použita Modbus funkce: FN01 (Read Coil Status, Read Output Bits).
Pro zápis dat je použita Modbus funkce: FN15 (Force Multiple Coils, Write n Bits).

Od oblasti Bo se liší pouze způsobem zápisu (místo FN05 je FN15). Používají například moduly firmy Papouch.

- Bi = oblast "Input status / Input bits".
Pro příjem dat je použita Modbus funkce: FN02 (Read Input Status, Read Input Bits).
Zápis dat není umožněn..
- Ro = oblast "Holding/Output registers".
Pro příjem dat je použita Modbus funkce: FN03 (Read Holding/Output Registers).
Pro zápis dat je použita Modbus funkce: FN16 (Preset Multiple Registers, Write n Registers).
- RoS = oblast "Holding/Output registers".
Pro příjem dat je použita Modbus funkce: FN03 (Read Holding/Output Registers).
Pro zápis dat je použita Modbus funkce: FN06 (Preset Single Register, Write 1 Register).

Od oblasti Ro se liší pouze způsobem zápisu (místo FN16 je FN06).

Upozornění: Funkce FN06 neumí zapisovat 4 a více bajtové hodnoty (například datové typy Long a Float).

- RoB = oblast "Holding/Output registers". Přenos jednotlivých bitů.
Pro příjem dat je použita Modbus funkce: FN03 (Read Holding/Output Registers).
Pro zápis dat je použita Modbus funkce: FN22 (22-Mask Write Register).

Příklad: RoB38.0 je čtení/zápis 0.bitu v registru 38.

- Ri = oblast "Input registers.
Pro příjem dat je použita Modbus funkce: FN04 (Read Input Registers).
Pro zápis dat je použita Modbus funkce: FN16 (Preset Multiple Registers, Write n Registers).
- RiS = oblast "Input registers.
Pro příjem dat je použita Modbus funkce: FN04 (Read Input Registers).
Pro zápis dat je použita Modbus funkce: FN06 (Preset Single Register, Write 1 Register).

Od oblasti Ri se liší pouze způsobem zápisu (místo FN16 je FN06).

Upozornění: Funkce FN06 neumí zapisovat 4 a více bajtové hodnoty (například datové typy Long a Float).

W = PLC má datový typ Word
 
Popis konfigurátoru PmCommData > Parametry > Speciální parametry:
Přednastavená adresa PLCZde zadanou adresu lze využít při zadávání konfigurátoru ItemID u proměnných v tomto objektu (tzn. u proměnných v záložce Data nebo v datových rozšířeních ExtComm). Adresu lze zadat v ItemID:
- buď například dev1... - pak se hodnota proměnné bude načítat z PLC s adresou 1.
- nebo devD... - znak "D" zde znamená default, a znamená to, že adresa se přebere z tohoto konfigurátoru.

Tento parametr lze za běhu aplikace změnit a přečíst pomocí metod: SetSpecParam("SlaveAddr") a GetSpecParam("SlaveAddr").

Bázové adresy oblastíZde se zadávájí adresy začátku datových oblastí (Bo, Bi, Ro, Ri).

Adresy pro tyto oblasti jsou všechny přednastavené na 0 (pokud se nezvolí předkonfigurace pro určité zařízení - viz Předkonfigurace / Komunikace / Modbus protokol). Pro různé druhy PLC mohou být tyto adresy jiné (např. adresy nezačínají od 0 ale od 1 nebo 40001, atd.).

Při komunikaci se "Adresa datové položky" upraví jako součet relativní adresy položky (určeno v identifikátoru ItemID) a bázové adresy oblasti.

Max.počet proměnných přijatých v jedné zprávěPro každou oblast (Bo,Bi,Ro,Ri) se zde zadává max.počet proměnných, které mohou být přenášeny v jedné komunikační zprávě. Tyto hodnoty závisí na typu automatu, se kterým se komunikuje (některé automaty podporují přenos jen "málo" registrů v jedné zprávě, jiné automaty zase podporují více registrů) - toto je buď uvedeno v dokumentaci automatu nebo je to nutno zjistit experimentálně.

Přednastavené hodnoty jsou 64 pro Bo a Bi, 32 pro Ro a Ri (pokud se nezvolí předkonfigurace pro určité zařízení - viz Předkonfigurace / Komunikace / Modbus protokol).

Přednastavené hodnoty jsou velmi nízké. Zvětšením těchto hodnot (pokud to zařízení dovoluje) lze docílit zrychlení komunikace, protože potřebná data se mohou přenášen v menším počtu komunikačních zpráv.

Popis komunikace pomocí objektů PmCommMsg

Objekty PmCommMsg lze použít pro speciální komunikace, které nelze provést objektem PmCommData. Například pomocí zprávy typu "XX-User defined opened function" lze poskládat libovolné typy Modbus zpráv, které jinak nejsou v ovladači podporovány.
 
V každé zprávě musí být zadána adresa SLAVE stanice ze které se čte nebo na kterou se zapisuje. Tato adresa se zadává v záložce Data-zaslání dané zprávy v proměnné "Slave" (např. pro Modicon jsou platné Slave adresy v rozsahu 0-247). Adresa 0 je použita pro broadcast, tzn. pro zprávy, které přijímají všechny stanice (když je Modbus protokol použit na vyšší síťové vrstvě, pak nemusí být broadcast povolen).

Dále se v Data-zaslání v proměnné "Addr" zadává adresa proměnné v dané stanici. Hodnota adresy se implicitně předpokládá od 0. Některá zařízení (např. Modicon, GE-Fanuc) však adresují od 1, a proto u těchto stanic je potřeba hodnotu Addr zadat o 1 méně.

Maximální počet hodnot (stavů, registrů) v jedné zprávě se liší podle druhu PLC automatu. Může být například 32, 125, 128, 1024, atd.

 
Seznam a popis komunikačních zpráv:
01-Read Coil Status (Read Output Bits): Tato zpráva čte n stavů výstupů (1-bitové hodnoty) od zadané adresy Addr.
02-Read Input Status (Read Input Bits): Tato zpráva čte n stavů vstupů (1-bitové hodnoty) od zadané adresy Addr.
03-Read Holding Registers (Read Output Registers): Tato zpráva čte n výstupních registrů (16-bitových hodnot) od zadané adresy Addr.
04-Read Input Registers: Tato zpráva čte n vstupních registrů (16-bitových hodnot) od zadané adresy Addr.
05-Force Single Coil (Write 1 Bit): Tato zpráva zapíše do jednoho stavu (1-bitová hodnota) na zadané adrese Addr.
06-Preset Single Register (Write 1 Register): Tato zpráva zapíše do jednoho registru (16-bitová hodnota) na zadané adrese Addr.
15-Force Multiple Coils (Write n Bits): Tato zpráva zapíše do n stavů (1-bitové hodnoty) od zadané adresy Addr.
16-Preset Multiple Registers (Write n Registers): Tato zpráva zapíše do n registrů (16-bitové hodnoty) od zadané adresy Addr.
22-Mask Write Register (Modify Register Using both AND & OR Masks): Tato zpráva zapíše určené jednotlivé bity do jednoho registru (16-bitové hodnoty) pomocí AND a OR masky.
V záložce Data-zaslání jsou proměnné:
Slave - Adresa slave zařízení, tzn. PLC adresa.
Addr - adresa registru do kterého budou zapsány bity.
AND_Mask - maska bitů které mají být znulovány
OR_Mask - maska bitů které mají být nastaveny
V záložce Data-příjem není žádná proměnná.
XX-User defined opened function:

Uživatelsky definovaná Modbus zpráva. Lze používat pro typy zpráv, které nejsou jinak podporovány tímto ovladačem. Uživatel zde může definovat kompletní obsah zprávy (vysílané i přijímané), musí přitom dbát na pořadí a datový typ proměnných DataX.

Proměnné DataX (v Data-zaslání i v Data-příjem) představují data v Modbus protokolu od znaku Function (bez tohoto znaku) a do znaku CRC (pro serial RTU, bez tohoto znaku) nebo do konce zprávy (pro Modbus TCP/IP). Pro přenosový mód ASCII se zde data zadávají stejně jako pro mód RTU a ovladač sám pak tyto data převede do ASCII tvaru.

V záložce Data-zaslání jsou proměnné:
TXLength - Velikost vysílaných dat (v bajtech). Není to velikost celé vysílané zprávy ale jen části zprávy která je uložena v proměnných DataX v této záložce. Hodnota -1 znamená, že se mají vyslat všechny proměnné DataX v této záložce.
RXLength - Maximální očekávaná velikost přijímaných dat (v bajtech). Není to velikost celé přijímané zprávy ale jen části zprávy která se bude ukládát do proměnných DataX v záložce Data-příjem. Hodnota -1 znamená, že očekávaná velikost bude vypočtena jako celková délka všech proměnných DataX v záložce Data-příjem.

- pokud se tato velikost zadá menší než skutečně přijatá data, pak vznikne chyba a přijatá data se nezpracují.
- pokud se tato velikost zadá větší než skutečně přijatá data, tak přenos bude trvat déle (bude se čekat na timeout) ale přijatá data se zpracují.

Slave - Adresa slave zařízení, tzn. PLC adresa.
Function - Číslo (kód) Modbus funkce. Například 1 = Read Coil Status, 17 = Report Slave ID atd.
DataX - Uživatelsky definovaná data která mají ve zprávě následovat za číslem funkce (bez koncové kontrolní sumy). Těchto proměnných (i různých datových typů) může být v záložce více ale vyšlou se pouze ty, které se vejdou do vysílané zprávy (tzn. podle hodnoty v TxLength).
V záložce Data-příjem jsou proměnné:
Length - Velikost skutečně přijatých dat (v bajtech). Není to velikost celé přijaté zprávy ale jen části zprávy která je uložena v proměnných DataX v této záložce.
Function - Číslo (kód) Modbus funkce. Standardně by zde měla být stejná hodnota jako v záložce Data-zaslání.
DataX - Přijatá data. Těchto proměnných (i různých datových typů) může být v této záložce více ale naplní se jen ty, které byly v přijaté zprávě.
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice