Szerkesztő:Maneszkaa/Modbus
A Modbus egy soros kommunikációs protokoll, melyet eredetileg a Modicon (ma Schneider Electric) vállalat publikált 1979-ben, hogy az általuk gyártott programozható logikai vezérlőkkel (PLC) használják. Egyszerűsége és robusztussága miatt de facto standarddá vált a kommunikációs protokollok között. Gyakran rendelkezésre áll, és előszeretettel használják az elektronikus ipari eszközök csatlakoztatására.[1] A modbus protokoll ipari környezetben való használatának fő okai:
- Fejlesztésekor az ipari alkalmazást tartották szem előtt
- Nyíltan közzétett, jogdíj mentes
- Beüzemelése és karbantartása egyszerű
- Nyers bitekkel vagy szavakkal kommunikál anélkül, hogy különösebb megkötéseket támasztana az eszközök gyártóival szemben.
Modbus protokollal megvalósítható a kommunikáció számos (kb. 254) eszköz között egy hálózaton. Például mikor egy rendszer hőmérsékletet és páratartalmat mér, majd közli az eredményeket egy központi számítógéppel.
Az adattípusok többségének elnevezésében közrejátszott, hogy főleg relékkel használták: az egy bites fizika kimenetet coil-nak (tekercs), az egy bites fizikai bemenetet pedig discrete input-nak (diszkrét bemenet) vagy contact-nak (kapcsoló) nevezik. A Modbus protokoll fejlesztését és frissítését 2004 áprilisától a Modbus Organisation[2] kezeli, miután a Schneider Electric átadta a jogokat a szervezetnek.[3] A Modbus Organisation a gyártók és a felhasználók számára létrejött szervezet, amely többek között segít a protokoll továbbfejlesztésében.[4]
Eszközök és kommunikáció
[szerkesztés]Minden eszköz, amely kapcsolatot akar teremteni Modbus-on keresztül, kap egy egyedi azonosítót. Soros hálózatokban csak a mesterhez kapcsolódó csomópont indíthat parancsot. Etherneten keresztül bármely eszköz küldhet Modbus parancsot, de általában csak egy mester eszköz teszi ezt. A Modbus parancs tartalmazza az egyedi azonósítót, amely az üzenet címzettjéhez tartozik. Csak a címzett fogja végrehajtani a parancsot annak ellenére, hogy akár több eszköz is megkaphatta (kivételt képeznek azok a speciális broadcast parancsok, amelyeket a 0 csomópontnak címeznek, majd végrehajtódnak, de nem történik nyugtázás). Minden Modbus parancs tartalmaz ellenőrző összegre való információt, hogy a címzett detektálhassa a továbbítás során keletkező hibákat. Az alap Modbus parancs utasíthatja az RTU-t, hogy változtassa meg egyik regiszterében az értéket, írjon vagy olvasson ki egy I/O portot és utasítást adhat arra vonatkozólag, hogy az eszköz küldjön vissza a mesternek egy vagy több értéket a regisztereiben tároltak küzöl.
Manapság rengeteg modem és átjáró támogatja a Modbus protokollt, mivel nagyon egyszerű és gyakran másolják. Néhányat ezek közül kifejezetten a Modbus számára terveztek. Különböző típusai léteznek, vezetékes és vezeték nélküli megvalósításban. Tipikus problémáit a tervezés során figyelembe kell venni és áthidalni, például az időzítési gondok, és a magas reakcióidő.
Keret formátum
[szerkesztés]Minden Modbus altípus az alábbi keret formátumok valamelyikét használja.[1]
Megnevezés | Hosszúság (bitek) | Funkció |
---|---|---|
Start | 28 | Minimum 31⁄2 karakter hosszú alacsony jelszint |
Cím | 8 | Eszköz címe |
Funkció | 8 | A funkciókódot jelöli, például bemenet vagy regiszter olvasása |
Adat | n × 8 | Adat + ki lesz töltve a rendelkezésre áll hossz az üzenet típusának megfelelően |
CRC | 16 bit | Ellenőrző összeg |
Vége | 28 | Minimum 31⁄2 karakter hosszan alacsony jelszint a keretek között |
Név | Hosszúság (karakter) | Funkció |
---|---|---|
Start | 1 | Kettősponttal kezdődik ( : ) (ASCII hexadecimális értéke 0x3A )
|
Cím | 2 | Eszköz címe |
Funkció | 2 | A funkciókódot jelöli, például bemenet vagy regiszter olvasása |
Adat | n | Adat + ki lesz töltve a rendelkezésre áll hossz az üzenet típusának megfelelően |
LRC | 2 | Ellenőrző összeg |
Vége | 2 | Carriage return – line feed (CR/LF) pair (ASCII values of 0x0D & 0x0A) |
Név | Hosszúság (byte) | Funkció |
---|---|---|
Tranzakció azonosító | 2 | A szerver és kliens közötti üzenet szinkronizálásához szükséges |
Protokoll azonosító | 2 | Modbus/TCP esetében 0 |
Hosszúság | 2 | Szabad byte-ok száma a keretben |
Eszköz azonosító | 1 | Szolga címe (255 ha nincsen használatban) |
Funkció | 1 | A funkciókódot jelöli, például bemenet vagy regiszter olvasása |
Adat byte-ok | n | Válaszként kapott adatok vagy parancs |
Unit identifier is used with Modbus/TCP devices that are composites of several Modbus devices, e.g. on Modbus/TCP to Modbus RTU gateways. In such case, the unit identifier tells the Slave Address of the device behind the gateway. Natively Modbus/TCP-capable devices usually ignore the Unit Identifier.
The byte order is Big-Endian (first byte contains MSB).
Supported function codes
[szerkesztés]The various reading, writing and other operations are categorised as follows.[5] The most primitive reads and writes are shown in bold. A number of sources use alternative terminology, for example Force Single Coil where the standard uses Write Single Coil.[6]
Function type | Function name | Function code | ||
---|---|---|---|---|
Data Access | Bit access | Physical Discrete Inputs | Read Discrete Inputs | 2 |
Internal Bits or Physical Coils | Read Coils | 1 | ||
Write Single Coil | 5 | |||
Write Multiple Coils | 15 | |||
16-bit access | Physical Input Registers | Read Input Registers | 4 | |
Internal Registers or Physical Output Registers | Read Holding Registers | 3 | ||
Write Single Register | 6 | |||
Write Multiple Registers | 16 | |||
Read/Write Multiple Registers | 23 | |||
Mask Write Register | 22 | |||
Read FIFO Queue | 24 | |||
File Record Access | Read File Record | 20 | ||
Write File Record | 21 | |||
Diagnostics | Read Exception Status | 7 | ||
Diagnostic | 8 | |||
Get Com Event Counter | 11 | |||
Get Com Event Log | 12 | |||
Report Slave ID | 17 | |||
Read Device Identification | 43 | |||
Other | Encapsulated Interface Transport | 43 |
Implementations
[szerkesztés]Almost all implementations have variations from the official standard. Different varieties might not communicate correctly between equipment of different suppliers. Some of the most common variations are:
- Data types
- Floating point IEEE
- 32-bit integer
- 8-bit data
- Mixed data types
- Bit fields in integers
- Multipliers to change data to/from integer. 10, 100, 1000, 256 ...
- Protocol extensions
- 16-bit slave addresses
- 32-bit data size (1 address = 32 bits of data returned.)
- Word swapped data
Limitations
[szerkesztés]- Since Modbus was designed in the late 1970s to communicate to programmable logic controllers, the number of data types is limited to those understood by PLCs at the time. Large binary objects are not supported.
- No standard way exists for a node to find the description of a data object, for example, to determine if a register value represents a temperature between 30 and 175 degrees.
- Since Modbus is a master/slave protocol, there is no way for a field device to "report by exception" (except over Ethernet TCP/IP, called open-mbus)- the master node must routinely poll each field device, and look for changes in the data. This consumes bandwidth and network time in applications where bandwidth may be expensive, such as over a low-bit-rate radio link.
- Modbus is restricted to addressing 247 devices on one data link, which limits the number of field devices that may be connected to a master station (once again Ethernet TCP/IP proving the exception).
- Modbus transmissions must be contiguous which limits the types of remote communications devices to those that can buffer data to avoid gaps in the transmission.
- Modbus protocol itself provides no security against unauthorized commands or interception of data.[7]
Trade group
[szerkesztés]Modbus Organization, Inc. is a trade association for the promotion and development of Modbus protocol.[2]
Modbus Plus
[szerkesztés]Despite the name, Modbus Plus[8] is not a variant of Modbus. It is a different protocol, involving token passing.
It is a proprietary specification of Schneider Electric, though it is unpublished rather than patented. It is normally implemented using a custom chipset available only to partners of Schneider.
References
[szerkesztés]- ↑ a b Drury, Bill. Control Techniques Drives and Controls Handbook (PDF), 2nd, Institution of Engineering and Technology, 508–. o. (2009. december 2.)
- ↑ a b Modbus home page. Modbus . Modbus Organization, Inc.. (Hozzáférés: 2013. augusztus 2.)
- ↑ Modbus FAQ. Modbus . Modbus Organization, Inc.. (Hozzáférés: 2012. november 1.)
- ↑ About Modbus Organization. Modbus . Modbus Organization, Inc.. (Hozzáférés: 2012. november 8.)
- ↑ Modbus Application Protocol V1.1b3 (PDF). Modbus . Modbus Organization, Inc.. (Hozzáférés: 2013. augusztus 2.)
- ↑ Clarke, Gordon. Practical Modern Scada Protocols: Dnp3, 60870.5 and Related Systems. Newnes, 47–51. o. (2004. december 2.). ISBN 0-7506-5799-5
- ↑ (Hiba: Érvénytelen idő.) „Critical Infrastructure Protection III”. Third IFIP WG 11. 10 International Conference, Hanover, New Hampshire: Springer.
- ↑ Modbus Plus - Modbus Plus Network - Products overview - Schneider Electric United States. Schneider-electric.com. (Hozzáférés: 2014. január 3.)
Further reading
[szerkesztés]- Modbus Protocol; Modicon; 74 pages; 2000.
External links
[szerkesztés]- Modbus Organization with protocol specifications
- ShortBus Modbus Scanner, RTU and TCP/IP master testing freeware for Visual Studio .NET
- Cost free Modbus RTU Device Testing Software
- Free Modbus RTU source code on Protocessor website (requires signing up)
- Free Modbus Guide for Field Technician
- Perl module for Modbus/TCP
- Android based Modbus TCP Master
- Pymodbus: Full Modbus protocol implementation in Python, free software
- MinimalModbus: Light RTU only Modbus implementation in Python
- modbus-tk: Fast Modbus Implementation in Python
- Interesting Performance comparison of the 3 above mentioned python modules
- Tcl based Modbus RTU driver
- Open Source C library of Modbus protocol for Linux, Mac OS X, FreeBSD, QNX and Win32
- Freeware Modbus Slave Simulator Application
- Free PeakHMI RTU, TCP/IP and ACSII slave simulators
- Jamod - Java library of Modbus protocol
- Modemu - Modbus TCP Emulator and Simulator written in Python, Free Software