Tento ovladač slouží pro komunikaci protokolem
Modbus. Viz
Komunikace protokolem Modbus.
Před použitím tohoto ovladače v aplikaci PROMOTIC je vhodné shlédnout "
PROMOTIC video kurz 4 - Komunikační ovladače".
Základní vlastnosti ovladače:
- Použití tohoto ovladače vyžaduje zakoupení
licence PmModbus. Při vývoji aplikace ve freeware módu
PmFree nebo s
vývojovou licencí a při jejím testování v runtime je tato komponenta vždy funkční.
- Komunikace je pro Ethernet (aplikace PROMOTIC je klient) nebo pro sériovou linku (COM1, COM2 ...).
- Komunikace je síťová, to znamená, že jeden objekt
PmaComm může komunikovat s více zařízeními (protokol podporuje adresování 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.
Ovladač podporuje následující Modbus datové typy:
- b = Bit (1 Bit):
V PLC automatu: 1bit. V aplikaci PROMOTIC: datový typ Boolean.
- W = Word (2Byte Unsigned Integer):
16 Bit Unsigned, Big-endian
V PLC automatu: 16 bitů (hodnota od 0 do 65535). V aplikaci PROMOTIC: datový typ Long.
Binární formát tohoto typu je stejný jak v aplikaci PROMOTIC, pouze bajty jsou přehozeny (pořadí bajtů PC:12, PLC:21).
-
W2 = Word (2Byte Unsigned Integer):
16 Bit Unsigned, Little-endian
Stejný jako předchozí datový typ, pouze pořadí bajtů se nemění - je stejné jako v aplikaci PROMOTIC (pořadí bajtů PC:12, PLC:12).
- I = Int (2Byte Signed Integer):
16 Bit Signed, Big-endian
V PLC automatu: 16 bitů (hodnota od -32767 do +32767). V aplikaci PROMOTIC: datový typ Integer.
Binární formát tohoto typu je stejný jak v aplikaci PROMOTIC, pouze bajty jsou přehozeny (pořadí bajtů PC:12, PLC:21).
-
I2 = Word (2Byte Signed Integer):
16 Bit Signed, Little-endian
Stejný jako předchozí datový typ, pouze pořadí bajtů se nemění - je stejné jako v aplikaci PROMOTIC (pořadí bajtů PC:12, PLC:12).
-
L1 = Long type 1 (4Byte Signed Integer):
32-bit Signed, Big-endian byte swap
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 aplikaci PROMOTIC, 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):
32-bit Signed, Big-endian
Stejný jako předchozí datový typ, pouze bajty jsou přehozeny (pořadí bajtů PC:1234, PLC:4321).
Používá například:
JUMO.
- L3 = Long type 3 (4Byte Signed Integer):
32-bit Signed, Little-endian
Stejný jako předchozí datový typ, pouze pořadí bajtů se nemění - je stejné jako v aplikaci PROMOTIC (pořadí bajtů PC:1234, PLC:1234).
-
L4 = Long type 4 (4Byte Signed Integer):
32-bit Signed, Little-endian byte swap
Stejný jako předchozí datový typ, pouze bajty jsou přehozeny (pořadí bajtů PC:1234, PLC:3412).
-
UL1 = ULong type 1 (4Byte Unsigned Integer):
32-bit Unsigned, Big-endian byte swap
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 aplikaci PROMOTIC, pouze bajty jsou přehozeny (pořadí bajtů PC:1234, PLC:2143).
-
UL2 = ULong type 2 (4Byte Unsigned Integer):
32-bit Unsigned, Big-endian
Stejný jako předchozí datový typ, pouze bajty jsou přehozeny (pořadí bajtů PC:1234, PLC:4321).
-
UL3 = ULong type 3 (4Byte Unsigned Integer):
32-bit Unsigned, Little-endian
Stejný jako předchozí datový typ, pouze pořadí bajtů se nemění - je stejné jako v aplikaci PROMOTIC (pořadí bajtů PC:1234, PLC:1234).
-
UL4 = ULong type 4 (4Byte Unsigned Integer):
32-bit Unsigned, Little-endian byte swap
Stejný jako předchozí datový typ, pouze bajty jsou přehozeny (pořadí bajtů PC:1234, PLC:3412).
-
LL2 = LongLong type 2 (8Byte Signed Integer):
64-bit Signed, Big-endian
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):
32-bit Float, Big-endian byte swap
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 podle normy
IEEE-754, tedy stejný jak v aplikaci PROMOTIC, pouze bajty jsou přehozeny (pořadí bajtů PC:1234, PLC:2143).
-
R2 = Float type 2 (4Byte - IEEE-754):
32-bit Float, Big-endian
Stejný jako předchozí datový typ, pouze bajty jsou přehozeny (pořadí bajtů PC:1234, PLC:4321).
Používá například:
ABB AC500.
- R3 = Float type 3 (4Byte - IEEE-754):
32-bit Float, Little-endian
Stejný jako předchozí datový typ, pouze pořadí bajtů se nemění - je stejné jako v aplikaci PROMOTIC (pořadí bajtů PC:1234, PLC:1234).
- D1 = Float Double-precision type 1 (8Byte - IEEE-754):
64-bit Float, Big-endian byte swap
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 podle normy IEEE-754, tedy stejný jak v aplikaci PROMOTIC, pouze bajty jsou přehozeny (pořadí bajtů PC:12345678, PLC:21436587).
- D2 = Float Double-precision type 2 (8Byte - IEEE-754):
64-bit Float, Big-endian
Stejný jako předchozí datový typ, pouze bajty jsou přehozeny (pořadí bajtů PC:12345678, PLC:87654321).
- D3 = Float Double-precision type 3 (8Byte - IEEE-754):
64-bit Float, Little-endian
Stejný jako předchozí datový typ, pouze pořadí bajtů se nemění - je stejné jako v aplikaci PROMOTIC (pořadí bajtů PC:12345678, PLC:12345678).
-
S1 = String type 1 (byte order: 214365..):
V PLC automatu: 2*N bajtů, kde
N je počet registrů na kterých je text uložen. V aplikaci PROMOTIC: datový typ
String.
Pouze pro zprávy typu
03, 04, 16.
V PLC automatu je textový řetězec uložen v jiném pořadí než v aplikaci PROMOTIC.
Používá například PLC automat
Modicon M340.
Pokud je uvnitř řetězce uložena binární nula, pak se v aplikaci PROMOTIC tento řetězec zkrátí (nula ukončuje textový řetězec).
Tento datový typ nelze použít v objektu
PmaCommMsg.
-
S3 = String type 3 (byte order: 123456..):
Stejný jako předchozí datový typ, pouze pořadí bajtů se nemění - je stejné jako v aplikaci PROMOTIC.
Tento datový typ nelze použít v objektu
PmaCommMsg.
Doporučené hodnoty parametrů objektu PmaComm:
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á) |
---|
Typ dat protokolu | Pouze 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 vybrat například pokud zařízení má 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ědi | Pouze pro sériovou linku. Vhodná hodnota 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ód | Protokol Modbus má dvě možnosti přenosu.
V parametrech zprávy objektu PmaCommMsg tento režim lze 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í objektu PmaCommGroup
Pro tento ovladač lze použít objekty
PmaCommGroup. Pro běžné případy přenosu 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í pouze 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ží pro adresování 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 v okně, 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 automatu (
device) s adresou
2. Místo čísla lze zadat
devD (=default adresa) a adresa zařízení bude určena podle konfigurátoru "
Přednastavená adresa zařízení".
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 bitu
0 v registru 38.
-
Ri = oblast
"Input registers.
Pro příjem dat je použita Modbus funkce: FN04 (Read Input Registers).
Zápis dat není umožněn.
W = PLC má datový typ Word
Přednastavená adresa zařízení | Zde zadanou adresu lze použít při zadávání v konfigurátoru "ItemId" v proměnných v tomto objektu (tzn. v proměnných v kartě "Data" nebo v datovém rozšíření 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 změnit v runtime 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 / Protokoly a jiné komunikace / Modbus). 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. |
Maximální 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é zprávě. Tyto hodnoty závisí na typu automatu, se kterým se komunikuje (některé PLC 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 / Protokoly a jiné komunikace / Modbus).
Přednastavené hodnoty jsou velmi nízké. Zvětšením těchto hodnot (pokud to zařízení umožňuje) lze docílit zrychlení komunikace, protože potřebná data mohou být přenášena v menším počtu komunikačních zpráv. |
---|
Popis komunikace pomocí objektu 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 ovladačem 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 kartě "
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 kartě "
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 přečte n stavů výstupů (1-bitové hodnoty) od zadané adresy
Addr.
02-Read Input Status (Read Input Bits):
Tato zpráva přečte n stavů vstupů (1-bitové hodnoty) od zadané adresy
Addr.
03-Read Holding Registers (Read Output Registers):
Tato zpráva přečte n výstupních registrů (16-bitové hodnoty) od zadané adresy
Addr.
04-Read Input Registers:
Tato zpráva přečte n vstupních registrů (16-bitové hodnoty) 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 kartě "
Data-zaslání" jsou proměnné:
Slave - Adresa zařízení, se kterým se má komunikovat.
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
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 (přijímané i vysílané), 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 kartě "
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 kartě. Hodnota -1 znamená, že se mají vyslat všechny proměnné DataX v této kartě.
RXLength - Maximální očekávaná velikost přijatý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 kartě "
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 kartě "
Data-příjem".
Pokud tato velikost se zadá menší než skutečně přijatá data, pak vznikne chyba a přijatá data se nezpracují.
Pokud tato velikost se 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 zařízení, se kterým se má komunikovat.
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ého kontrolního součtu). Těchto proměnných (i různých datových typů) může být v kartě více ale vyšlou se pouze ty, které se vejdou do vysílané zprávy (tzn. podle hodnoty v TxLength).
V kartě "
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 pouze části zprávy která je uložena v proměnných DataX v této kartě.
Function - Číslo (kód) Modbus funkce. Standardně by zde měla být stejná hodnota jako v kartě "
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 kartě více ale naplní se pouze ty, které byly v přijaté zprávě.