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 vyžaduje zakoupení licence PmModbus. 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 pro Ethernet (aplikace PROMOTIC je klient) nebo pro 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 PmaComm.

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

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

- Komunikace je síťová, tzn. že jedním objektem PmaComm 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 typu float a long a 64-bitové hodnoty (float double precision).
- Ovladač lze použít také 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 automatu: 1bit. V aplikaci PROMOTIC: datový typ Boolean.

- W = Word (2Byte Unsigned Integer):

V PLC automatu: 16 bitů (hodnota od 0 do 65535). V aplikaci PROMOTIC: datový typ Long.

- I = Int (2Byte Signed Integer):

V PLC automatu: 16 bitů (hodnota od -32767 do +32767). V aplikaci PROMOTIC: datový typ Integer.

- L1 = Long type 1 (4Byte Signed Integer):

V PLC automatu: 32 bitů. V aplikaci PROMOTIC: datový typ Long.

Pouze pro zprávy typu 03, 04, 16.

Binární formát tohoto typu je stejný jak v PC, pouze bajty jsou přehozeny (pořadí bajtů PC:1234, PLC:2143).

Používá například: Modicon, Wago, atd.

- L2 = Long type 2 (4Byte Signed Integer):

Stejný jako předchozí datový typ, jen bajty jsou přehozeny jinak (pořadí bajtů PC:1234, PLC:4321).

Používá například: JUMO.

- L3 = Long type 3 (4Byte Signed Integer):

Stejný jako předchozí datový typ, jen pořadí bajtů se nemění - je stejné jako v PC (pořadí bajtů PC:1234, PLC:1234).

- UL1 = ULong type 1 (4Byte Unsigned Integer):

V PLC automatu: 32 bitů. V aplikaci PROMOTIC: datový typ Double.

Pouze pro zprávy typu 03, 04, 16.

Binární formát tohoto typu je stejný jak v PC, pouze bajty jsou přehozeny (pořadí bajtů PC:1234, PLC:2143).

- UL2 = ULong type 2 (4Byte Unsigned Integer):

Stejný jako předchozí datový typ, jen bajty jsou přehozeny jinak (pořadí bajtů PC:1234, PLC:4321).

- UL3 = ULong type 3 (4Byte Unsigned Integer):

Stejný jako předchozí datový typ, jen pořadí bajtů se nemění - je stejné jako v PC (pořadí bajtů PC:1234, PLC:1234).

- LL2 = LongLong type 2 (8Byte Signed Integer):

V PLC automatu: 64 bitů. V aplikaci PROMOTIC: datový typ Double. (pořadí bajtů PLC:87654321)

Pouze pro zprávy typu 03, 04, 16.

8-bajt celé číslo nemůže být s celou přesností uloženo do žádného datového typu. Zde se ukládá do hodnoty typu Double, ale pro velmi velká čísla pak dochází k nepřesnostem (maximálně +-2047).

Používá například: Měřič energie iEM3100(Schneider-Electric), Multimeter EPM-07S(ENTES) ...

- R = Float type 1 (4Byte - IEEE 754):

V PLC automatu: 32 bitů. V aplikaci PROMOTIC: 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 bajty jsou přehozeny (pořadí bajtů PC:1234, PLC:2143).

- R2 = Float type 2 (4Byte - IEEE 754):

Stejný jako předchozí datový typ, jen bajty jsou přehozeny jinak (pořadí bajtů PC:1234, PLC:4321).

Používá například: ABB AC500.

- R3 = Float type 3 (4Byte - IEEE 754):

Stejný jako předchozí datový typ, jen pořadí bajtů se nemění - je stejné jako v PC (pořadí bajtů PC:1234, PLC:1234).

- D1 = Float Double-precision type 1 (8Byte - IEEE 754):

V PLC automatu: 64 bitů V aplikaci PROMOTIC: 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 bajty jsou přehozeny (pořadí bajtů PC:12345678, PLC:21436587).

- D2 = Float Double-precision type 2 (8Byte - IEEE 754):

Stejný jako předchozí datový typ, jen bajty jsou přehozeny jinak (pořadí bajtů PC:12345678, PLC:87654321).

- D3 = Float Double-precision type 3 (8Byte - IEEE 754):

Stejný jako předchozí datový typ, jen pořadí bajtů se nemění - je stejné jako v PC (pořadí bajtů PC:12345678, 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-klient:
Čí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. Urč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 pokud 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 sériovou 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ěď, pak se přenos zprávy ukončí (je vyvolána událost onEndOfTransfer s chybou 24 nebo 66).
Přenosový módProtokol Modbus má dvě možnosti přenosu.

V parametrech zprávy objektu PmaCommMsg 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ů PmaCommGroup

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

Proměnné v objektu PmaCommGroup (nebo ještě lépe proměnné v objektu PmaData 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 konfigurátor "Obnovování dat povoleno" je zatržen). Při zápisu do proměnné se posílá do zařízení jen tato jedna proměnná (pokud konfigurátor "Automaticky zasílat při zápisu do položky" je zatržen).

 
Popis konfigurátoru "ItemID":

ItemId je textový identifikátor položky, který slouží k adresaci položky 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 po spuštění aplikace).

 
Identifikátor ItemId může mít podobu například "dev2.Ri33.W", kde:
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 "PmaCommGroup > Parametry > Speciální parametry":
Přednastavená adresa PLCZde zadanou adresu lze použít při zadávání v 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 automatu s adresou 1.
- nebo devD... - znak "D" zde znamená default (to znamená, že adresa se přebere z tohoto konfigurátoru).

Tento parametr lze za běhu aplikace změnit a přečíst ve skriptu 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 komunikační 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á maximální 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 komunikační 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ů PmaCommMsg

Objekt PmaCommMsg lze použít pro speciální komunikace, které nelze provést objektem PmaCommGroup. 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 (pokud je protokol Modbus použit na vyšší síťové vrstvě, pak nemusí být broadcast povolen). Ovladač tyto zprávy pouze zasílá a nečeká na odpověď - nemá tedy smysl nastavovat adresu 0 pro zprávy, které mají číst (např. zprávy 01 do 04).

 
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 nutno zadat hodnotu Addr 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á hodnota) 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žít pro typy zpráv, které nejsou jinak podporovány tímto ovladačem. Projektant 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, pak 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ě.

Historie:
Pm8.03.25: Opravená chyba: Zoptimalizováno rozdělení proměnných v objektu PmaCommGroup do jednotlivých komunikačních zpráv.
Pm8.03.24:
- Zobecnění o Modbus datový typ: LL2 = LongLong type 2 (8Byte Signed Integer)
- Opravená chyba: Při příjmu dat se netestovalo, zda odpověď přišla ze správného zařízení.
Pm8.03.19: Zobecnění o zaslání zprávy typu broadcast pomocí objektu PmaCommMsg, tzn. pokud zadaná slave adresa je 0, pak zprávu budou přijímat všechny stanice v síti.
Pm8.03.10: Zobecnění zápisu dat o Modbus funkci FN06 (oblast RoS a RiS).
Pm8.03.01: Opravená chyba: Čtení a zápis bitu v registru (tzn. čtení a zápis do oblasti RoB) nefungoval správně.
Pm8.02.11: ve zprávě typu XX-User defined opened function se do proměnné v záložce "Data-příjem" neukládal počet bajtů přijatých dat ale celková délka zprávy.
Pm8.02.03: Opravená chyba: Oprava přenosu zprávy typu XX-User defined opened function.
Pm8.02.00:
- Lze nyní přenášet zprávy pro uživatelsky definované funkce. V parametrech objektu PmaCommMsg lze nyní nastavit funkci: XX-User defined opened function.
- Lze nyní zapisovat jednotlivé bity (v objektu PmaCommGroup i PmaCommMsg) pomocí Modbus funkce 22-Mask Write Register (Modify Register Using both AND & OR Masks).
Pm8.00.05:
- do objektu PmaCommGroup přidán Nový konfigurátor Přednastavená adresa PLC. Pro některé případy usnadňuje zadávání a správu adres.
- Opravená chyba: někdy nefungovalo správně zasílání hodnot v objektu PmaCommGroup.
Pm8.00.03:
- Zobecnění o Modbus datový typ: R2 = Float type 2 (4Byte - IEEE 754)
- Opravená chyba: objekt PmaCommGroup někdy špatně přijímal bitové hodnoty.
Pm8.00.02: Opravená chyba: V objektu PmaCommGroup nešly číst/zapisovat 4-bajtové hodnoty (Long, Single).
Pm7.02.03: Opravená chyba: nefungovalo zasílání dat v modu ASCII.
Pm7.01.00: Implementace Ethernet komunikace
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice