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]

Ajalugu[muuda | muuda lähteteksti]

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

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

Seadmed ja kommunikatsioon[muuda | muuda lähteteksti]

Igale seadmele, mis jagab informatsiooni Modbusi kaudu, antakse unikaalne aadress. Seade, mis küsib informatsiooni, on Modbusi ülem (ingl k. Modbus master) ja seadmed, mis jagavad informatsiooni on Modbusi alamad (ingl k. Modbus slaves). Standardses Modbusi võrgus on üks ülem ja kuni 247 alamat, mille juures iga alam on määratud oma unikaalse alam-aadressiga, mis varieerub vahemikus 1–247. 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 Modbusi, 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ünkroonimisega seotud probleemid.

Sõnumistruktuur[muuda | muuda 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 Modbusi võrguharude ühenduspunktiga isegi juhul, kui nad on ühendatud erinevate liidesetüüpidega, ilma vajaduseta kasutada iga ühenduse jaoks erinevat protokolli.

Igal Modbusi 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. Vestlust 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 adresseerimist kasutatakse selgitamaks, milline seade peab vastama saadetud sõnumile. Ülejäänud võrguharude ühenduspunktid, mis asuvad ka Modbusi võrgus, eiravad saadetud sõnumit juhul, kui aadressiväli ei vasta nende endi aadressile. [5]

Modbusi sõnumi struktuur [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 | muuda lähteteksti]

Modbusi 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 Modbusi 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 Modbusi 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 binaarvormingus ja iga bait informatsiooni on kodeeritud ühe sidebaidiga.

Jadaühendustes ei saadeta Modbusi 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 | muuda lähteteksti]

Esmane informatsioonikild igas Modbusi 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 Modbusi seadmetele ja väärtust 0 kasutatakse leviaadressina (broadcast address). Sõnumid, mis saadetakse viimasele aadressile aktsepteeritakse kõigi alamate poolt. Alam vastab alati Modbusi 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.

Modbusi seadme piires määratakse hoidvatele registritele, sisenditele ja väljunditele number vahemikus 1–10000. Modbusi 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 Modbusi päringusõnumis. Järgnev tabel näitab aadressivahemikke coil'idele, sisenditele ja hoidvatele registritele ja aadressi kalkuleerimise viisi Modbusi sõnumis, kui on antud ühiku reaalne aadress alamseadmes. [7]

Seadme ja Modbusi 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 | muuda lähteteksti]

Teine parameeter, mis sisaldub igas Modbusi 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 Modbusi 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 | muuda 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 | muuda 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 | muuda lähteteksti]

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

Välislingid[muuda | muuda lähteteksti]

Viited[muuda | muuda lähteteksti]

  1. Bill Drury. "Control Techniques Drives and Controls Handbook". 2nd edition, 2009. 508-: Institution of Engineering and Technology. Failitüüp: pdf. inglise.
  2. w3.usa.siemens.com. "Modbus Information". lk 2. Failitüüp: 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. Failitüüp: pdf. inglise.
  6. 6,0 6,1 w3.usa.siemens.com. "Modbus Information". lk 6. Failitüüp: pdf. inglise.
  7. 7,0 7,1 w3.usa.siemens.com. "Modbus Information". lk 5. Failitüüp: pdf. inglise.
  8. 8,0 8,1 w3.usa.siemens.com. "Modbus Information". lk 8. Failitüüp: pdf. inglise.