Modbus

Allikas: Vikipeedia

Modbus on jadaside protokoll, mille töötas 1979. aastal välja Modicon (nüüd Schneider Electric), kasutamaks seda oma programmeeritavas loogikakontrolleris (PLC). Aja jooksul on sellest oma lihtsuse tõttu saanud sideprotokollide tunnustatud standard ja on nüüdseks tavapäraselt saadaval võimalus tööstuslike elektroonikaseadmete ühendamiseks. [1]

Modbus logo

Ajalugu[muuda | redigeeri lähteteksti]

Aasta oli 1979, kui PLC tootja Modicon avalikustas Modbus kommunikatsiooni liidese multidrop võrgu jaoks baseerudes ülem/alam (inglise keeles Master/slave) võrguarhitektuuril. Informatsiooni vahetamine Modbus võrguharude ühenduspunktide vahel saavutati sõnumitega. Tegu oli avatud standardiga, mis kirjeldas sõnumite edastamise struktuuri. Modbus'i liidese füüsiline kiht oli vabalt valitav. Originaalne Modbus liides kasutas RS-232 standardit, aga enamus hilisematest Modbus teostustest kasutasid RS-485, sellel põhjusel, et RS-485 võimaldas pikemaid vahemaid ja suuremaid kiiruseid. Lühikese aja jooksul kogus Modbusi protokoll palju kuulsust, marginaalselt väikse ajavahemiku jooksul peale protokolli väljatöötamist võttis suur arv tarnijaid oma seadmetes selle süsteemi kasutusele. [2]

Modbusi protokollide arendamine ja uuendamine on toimunud alates 2004 Aprillist Modbus organization [3] poolt, kui Schneider Electric andis õigused üle sellele organisatsioonile.

Seadmed ja kommunikatsioon[muuda | redigeeri lähteteksti]

Igale seadmele, mis jagab informatsiooni Modbus kaudu, antakse unikaalne aadress. Seade, mis küsib informatsiooni, on Modbus'i ülem (ingl k. Modbus master) ja seadmed, mis jagavad informatsiooni on Modbus'i alamad (ingl k. Modbus slaves). Standardses Modbus võrgus on üks ülem ja kuni 247 alamat, mille juures iga alam on määratud oma unikaalse alam-aadressiga, mis varieerub 1st kuni 247ni. Tavaliselt on ühes võrgus seadmeid umbes 240. Ülemal on samuti olemas volitused kirjutamaks informatsiooni alamatele. [4]

Eksisteerib palju modemeid ja võrguväravaid mis toetavad Modbus’i, kuna see on väga lihtne protokoll ja tihtipeale seda ka kopeeritakse. Marginaalne osa neist on spetsiifiliselt valmistatud selle protokolli jaoks. Erinevad teostused kasutavad kas wireline kaablitehnoloogiat, traadita infoedastust, nagu näiteks ISM band ja isegi lühisõnumite teenust (SMS) või üldist raadio-pakettandmeside teenust (GPRS). Tihti esinevad tüüpprobleemid on näiteks kõrge latentsusaeg ja sünkronisatsiooniga seonduvad probleemid.

Sõnumistruktuur[muuda | redigeeri lähteteksti]

Modbusi teabevahetuse liides on ehitatud tuginedes teadetele (sõnumitele). Nende sõnumite vorming on eraldiseisev kasutatud füüsilisest liideset. RS232 standardiga kasutatakse samu sõnumeid, mis ka Mobdus/TCP etherneti kaudu. Ühte ja sama protokolli saab kasutada sõltumata ühenduse tüübist. Tänu sellele tagab Modbus võimaluse uuendada tööstuslike võrkude riistvara struktuuri nõudmata selleks suuri muudatusi tarkvaras. Seade saab suhelda mitme erineva Modbus võrguharude ühenduspunktiga isegi juhul, kui nad on ühendatud erinevate liidesetüüpidega, ilma vajaduseta kasutada iga ühenduse jaoks erinevat protokolli.

Igal Modbus sõnumil on identne struktuur. Igas sõnumis eksisteerib neli erinevat baaselementi. Nende osade järgnevus on ühtne kõikide sõnumite puhul, et lihtsustada vastava Modbus teate sisu sõelumist. Vestlus alustatakse Modbusi võrgus alati ülema poolt. Ülem saadab sõnumi ja seejärel - olenevalt sõnumi sisust - alam aktiviseerub ja tegutseb vastavalt saadud teatele. Sõnumi aadresseerimist kasutatakse selgitamaks, milline seade peab vastama saadetud sõnumile. Ülejäänud võrguharude ühenduspunktid, mis asuvad ka Mobus võrgus, eiravad saadetud sõnumit juhul, kui aadressiväli ei vasta nende endi aadressile. [5]

Modbus sõnumistruktuur [5]
Väli Kirjeldus
Seadme aadress Adressaadi aadress
Funktsiooni kood Kood, mis määrab sõnumitüübi
Andmed Andmejagu lisainformatsiooniga
Veakontroll Numbriline kontrollväärtus testimaks teabevahetusvigade olemasolu

Jadaedastuse režiimid[muuda | redigeeri lähteteksti]

Modbus jadaühendused saavad kasutada kahte põhilist jadaedastuse režiimi, milleks on vastavalt ASCII ja RTU (Remote terminal unit). Jadaedastuse režiim jadasides määrab viisi, kuidas Modbus sõnumeid kodeeritakse. Modbus/ASCII puhul on kõik sõnumid loetavas ASCII vormingus. Modbus/RTU vorming kasutab binaarkodeerimist, mis muudab sõnumid vaatlejale loetamatuks, kuid vähendab iga teate mahukust, lubades sellega suurema hulga andmete vahetuse sama ajaühiku jooksul. Kõik ühe Modbus võrgu segmendi võrguharude ühenduspunktid peavad kasutama sama jadaestastuse režiimi. Seade, mis on seadistatud kasutamaks Modbus/ASCII režiimi ei suuda mõista sõnumeid Modbus/RTU režiimis ja ka vastupidiselt.

Modbus/ASCII puhul on kõik sõnumid kodeeritud kuueteistkümendarvude väärtustena, esindatuna loetavate ASCII märkidena. Kodeerimises on kasutusel vaid karakterid 0-9 ja A-F. Iga baidi informatsiooni jaoks läheb vaja kahte side-baiti, kuna iga side-bait suudab määratleda kuueteistkümnendarvu süsteemis vaid 4 bitti. Modbus/RTU puhul vahendatakse andmeid binaarses formaadis ja iga bait informatsiooni on kodeeritud ühe side-baidiga.

Jadaühendustes ei saadeta Modbus sõnumeid lihtvormingus. Need raamitakse, andmaks päringu vastuvõtjale lihtsa võimaluse sõnumi alguse ja lõpu tuvastamiseks. Kasutades Modbus/ASCII'd, võetakse kasutusele karakterid, et määratleda raami algus ja lõpp. Koolonit (:) kasutatakse märgendamaks sõnumi algust. Modbus/RTU kasutab aga hoopis ajalisi vaikushetki sidevahetuse real, raamistamaks sõnumit. [6]

Modbus/ASCII ja Modbus/RTU atribuudid [6]
Modbus/ASCII Modbus/RTU
Karakterid ASCII 0-9 ja A-F Kahendsüsteem 0-255
Veakontroll LRC(Longitudinal Redundancy Check) CRC (Cyclic Redundancy Check)
Raami algus Karakter (:) 3,5 karakterit vaikust
Raami lõpp Karakterid CR/LF 3,5 karakterit vaikust
Tühimikud sõnumis 1 sekund 1,5 korda karakteri pikkust
Algusbitt 1 1
Andmebitt 7 8

Adresseerimine[muuda | redigeeri lähteteksti]

Esmane informatsioonikild igas Modbus sõnumis on adresseeritava aadress. See parameeter sisaldab ühe baidi jagu informatsiooni. Modbus/ASCII puhul on see kodeeritud kahe kuueteistkümnendarvu karakteriga, Modbus/RTU puhul on kasutusel vaid üks bait. Kehtivad aadressid jäävad vahemikku 0-247. Väärtused 1-247 määratakse individuaalsetele Modbus seadmetele ja väärtust 0 kasutatakse leviaadressina (broadcast address). Sõnumid, mis saadetakse viimasele aadressile aksepteeritakse kõigi alamate poolt. Alam vastab alati Modbus sõnumile. Sõnumile vastamise ajal kasutab alam sama aadressi, mida ülem kasutas päringu sooritamisel. Niimoodi saab ülem kindlaks teha, et seade reaalselt vastab päringule.

Modbus seadme piires määratakse hoidvatele registritele, sisenditele ja väljunditele number vahemikus 1-10000. Modbus sõnumites kasutatakse aadresse väärtusega vahemikus 0-9999. Kui on vaja näiteks lugeda väljundi väärtust (ehk coil)18, siis on vaja täpsustada väärtust 17 Mobus päringusõnumis. Järgnev tabel näitab aadressivahemikke coildele, sisenditele ja hoidvatele registritele ja aadressi kalkuleerimise viisi Modbus sõnumis, kui on antud ühiku reaalne aadres alamseadmes. [7]

Seadme ja Modbus'i aadresside vahemikud [7]
Seadme aadress Modbus aadress Kirjeldus
1-10000* aadress - 1 Coils(väljundid)
10001-20000* aadress - 10001 Sisendid
40001-50000* aadress - 40001 Hoidvad registrid
  • Maksimaalne väärtus sõltub kasutatavast seadmest

Funktsioonikoodid[muuda | redigeeri lähteteksti]

Teine parameeter, mis sisaldub igas Modbus sõnumis on funktsioonikood. See määrab ära sõnumitüübi ja vastava tegevuse, mida nõutakse alama (slave) poolt. Vastav parameeter sisaldab ühte baiti informatsiooni. Modbus/ASCII juures on see kodeeritud kahe kuueteistkümnendarvuga, Modbus/RTU (Remote Terminal Unit) juures on kasutuses vaid üks bait. Kehtivad funktsioonikoodid jäävad vahemikku 1-255. Kõik Modbus seadmed ei tunnusta sama komplekti funktsioonikoode, need varieeruvad. [8] Järgnevas tabelis on ära toodud enimlevinumad funktsioonikoodid.

Levinud funktsioonikoodid [8]
Kood Kirjeldus
01 Read coil status
02 Read input status
03 Read holding registers
04 Read input registers
05 Force single coil
06 Preset single register
07 Read exception status
15 Force multiple coils
16 Preset multiple registers
17 Report Slave ID

Rakendused[muuda | redigeeri lähteteksti]

Peaaegu kõikidel rakendustel on erinevaid variatsioone võrreldes originaalse standardiga. Erinevad variandid ei pruugi ühilduda, olles tegu teistsuguse tehnikaga või erinevate tarnijaga. Mõningad enimlevinumatest variatsioonidest on:

Andmetüübid[muuda | redigeeri lähteteksti]

  • Ujukomaarv IEEE
  • 32-bitised täisarvud
  • 8-bitised andmed
  • Erinevatest elementidest koosnevad andmetüübid
  • Bittide väljad täisarvudes
  • Kordajad vahetamaks andmeid täisarvudeks/täisarvudest. 256, 10, 100, 1000, 10000 jne

Protokolli laiendused[muuda | redigeeri lähteteksti]

  • 16-bitised alam-aadressid
  • 32-bitine andmepaketi suurus (1 aadress = 32 bitti andmeid tagastatud.)
  • Sõnaga ära vahetatud andmed

Välislingid[muuda | redigeeri lähteteksti]

Viited[muuda | redigeeri lähteteksti]

  1. Bill Drury. Control Techniques Drives and Controls Handbook. 2nd edition, 2009. 508-: Institution of Engineering and Technology. (pdf) (inglise)
  2. w3.usa.siemens.com. Modbus Information. lk 2 (pdf) (inglise)
  3. Modbus Organization, Inc. Modbus home page. (inglise)
  4. www.simplymodbus.ca. Simply Modbus. 2013. (inglise)
  5. 5,0 5,1 w3.usa.siemens.com. Modbus Information. lk 7 (pdf) (inglise)
  6. 6,0 6,1 w3.usa.siemens.com. Modbus Information. lk 6 (pdf) (inglise)
  7. 7,0 7,1 w3.usa.siemens.com. Modbus Information. lk 5 (pdf) (inglise)
  8. 8,0 8,1 w3.usa.siemens.com. Modbus Information. lk 8 (pdf) (inglise)