MODBUS

TÖÖVÄLJAVÕRGU MODBUS PROTOKOLLI KIRJELDUS

Tööväljavõrgu Modbus sideprotokoll põhineb klient-server-arhitektuuril. See leiab laialdast kasutust tööstuses kontrolleritevahelise andmeside loomiseks. Andmete edastamiseks kasutatakse jadakanalied nagu RS-485, RS-422, RS-232 (pilt 1), või Ethernet võrku TCP/IP (Modbus TCP) (pilt 2).

Pilt 1.RS-485, RS-422, RS-232

Pilt 2. Ethernet võrk TCP/IP

Modbus on seotud OSI võrgumudeli rakendustasandi protokollidega. Kontrollerid, mis töötavad Modbusi võrgus, kasutavad klient-server-mudelit, mis baseerub päringutest ja vastustest koosnevatest andmeedastustest.

Tavaliselt on võrgus ainult üks ülemseade (server) ja mitu alluvseadet (klienti). Ülemseade algatab andmeedastused (sidepäringud),  pöördudes individuaalselt iga alluvseadme poole või alluvseadmete grupi poole (pilt 3). Alluvseade omakorda moodustab sõnumi ülemseadmele poolt nõutud informatsioonist ja saadab selle ülemseadmele tagasi. Grupipäringu saamisel ei moodustata vastust.

Pilt 3. Serveri ja kliendi pöördumised

KAADRI (ANDMEPAKETI) FORMAAT

Modbusi spetsifikatsioon kirjeldab päringute ja vastuste kaadrite formaat. Elementaarse paketijuhtimise tasandil nimetatakse neid kaadreid ka protokolliandmeüksusteks (Protocol Data Unit, PDU). Protokolliandmeüksuse formaat ei sõltu ühendusliini tüübist. See sisaldab juhtinfot ning andmevälja . Juhtinfo on kodeeritud ühe baidi pikkusesse välja ja võib vastu võtta väärtusi vahemikus 1..127. Vahemik 128..255 on reserveeritud veakoodile. Andmeväli on muutuva pikkusega ja selle pikkuse piirab protokolliandmeüksuse andmepaketi suuruse piirang, milleks on 253 baiti (pilt 4).

Modbus PDU
Funktsiooni-koodAndmed
1 baitN < 253 (baiti)

Protokolliandmeüksus paneb lisaväljade sisu teise andmepaketti, et võimaldada paketi edastamist üle ühenduse füüsilise liini. Seda andmepaketti nimetatakse rakendusandmeüksuseks (Application Data Unit, ADU). Selle formaat sõltub ühendusliini tüübist.

Pilt 4 Üldine MODBUS kaader

Tööväljavõrgu Modbus protokollil on kolm põhilist rakendust. Kaks andmete edastamiseks mööda jadaliidest, modem EIA/TIA-232-E (RS-232), EIA-422, EIA/TIA-485-A (RS-485), optline ja raadioühendus:

  • Modbus RTU;
  • Modbus ASCII;

Kolmas rakendus on andmete edastamiseks mööda Etherneti TCP/IP võrku:

  • Modbus TCP.

Modbus RTU informatsiooni kaardi rakendusandmeüksuse üldine struktuur on kirjeldatud pildil 5:

Pilt 5. MODBUS RTU kaader

See koosneb järgmistest osadest:

  • Tööjaama aadress – see on alluvseadme aadress, millele kirje (sõnum) on suunatud. Iga seade vastab ainult kirjele, mis sisaldab seadme enda aadressi võiseadmepaketi aadressi kuhu antud seade kuulub. Vastus algab samamoodi alluvseadme aadressiga. Seadmete aadressid on vahemikust 1 kuni 247. Aadressi 0 kasutatakse seadmetepaketi adresseerimiseks ja seda tunnevad kõik seadmed; aadressid vahemikus 248..255 on reserveeritud;
  • Juhtinfo – ühe baidine väli, milles hoitakse täitmiskäsku (funktsiooni number);
  • Andmed – sisaldab infot, mida seade vajab ülemseadme käsu täitmiseks või infot, mis on vajalik vastamiseks. Selle välja pikkus sõltub funktsiooni numbrist ja on vahemikus 0..252 baiti;
  • Veakontroll (tsükkelkoodkontroll, CRC) – kontrollsumma kaadrisiseseks veakontrolliks. Liini sõnumi ülekande ajal kirjutatakse esimesena madalama järgu kontrollsumma bait.

Rakendusandmeüksuse maksimaalne suurus jadavõrgus RS232/RS485 on 256 baiti ja Ethernet TCP võrgus on see 260 baiti.

Modbus ASCII informatsiooni kaadri formaat on kirjeldatud pildil 6:

Pilt 6. Modbus ASCII informatsiooni kaader

Modbus ASCII kaadri individuaalsete väljade tähendused on esitatud tabelis 1.

Tabel 1

NimiPikkusFunktsioon
Algus1 märkKaardi algust tähistatakse kooloniga (;: , ASCII on selle väärtuseks 3A hex)
Aadress2 märkiTööjaama aadress
Juhtinfo2 märkiViitab juhtinfole (funktsiooni koodile) nagu näiteks loe keerde/sisendite väärtusi
Andmedn märkiAndmed – pikkus valitakse sõltuvalt sõnumi tüübist ja edastatavast andmemahust
LRC kontroll2 märkiVeakontroll
Lõpp2 märkiKaardi lõppu tähistatakse reavahetuse märgipaariga (CRLF, ASCII on selle väärtuseks 0D& 0A hex)

Modbus TCP informatsiooni kaadri struktuur on järgmine:

Pilt 7. Modbus TCP informatsiooni kaader
Pilt 8. Modbus TCP andmepaketi koostamine

Modbus TCP kaader koosneb järgmistest osadest:

  • Tehingu ID – kahebaidine tehingu identifitseerimisnumber;
  • Protokolli ID – kahebaidine protokolli identifitseerimisnumber;
  • Pikkus – edastatavate andmete pikkus salvestatud kahes baidis;
  • Üksuse ID – selle seadme aadress, millele päring on adresseeritud. Tavaliselt ignoreeritakse seda, kui side toimub ainult ühe seadmega.

Modbus TCP kaadril puudub kontrollsumma välja.

Pilt 9. Modbus TCP kaader

JUHTINFO KATEGOORIAD

Modbusis kasutatavates protokollides on kolm juhtinfo (juhtfunktsioonide) kategooriat: Standardiseeritud käsud; kasutajakäsud ja reserveeritud käsud (pilt 6.19).

Pilt 10

STANDARDISEERITUD KÄSUD

Nende kirjeldus tuleb avaldada ja selle kinnitab Modbus-IDA. See kategooria hõlmab nii jaotatud kui ka vabu koode.

Tabel 2

Funktsiooni nrVastused
1 (0x01)
Loe diskreetne väärtus
(Read Coil Status)
A1A0Q1Q0 
ND (N baiti)
2 (0x02)
Loe diskreetsed sisendid
(Read Discrete Inputs)
A1A0Q1Q0 
ND (N baiti)
3 (0x03)
Loe ooteregistrid
(Read Holding Registers)
A1A0Q1Q0 
ND (N baiti)
4 (0x04)
Loe sisendregistrid
(Read Input Registers)
A1A0Q1Q0 
ND (N baiti)
5 (0x05)
Kasuta üksik diskreetne väärtus
(Force Single Coil)
A1A0D1D0 
A1A0D1D0 
6 (0x06)
Töötle üksik register
(Preset Single Register)
A1A0D1D0 
A1A0D1D0 
15 (0x0F)
Kasuta mitu diskreetset väärtust
(Force Multiple Coils)
A1A0Q1Q0ND (N baiti)
A1A0Q1Q0 
16 (0x10)
Töötle mitu registrit
(Preset Multiple Registers)
A1A0Q1Q0ND (N baiti)
A1A0Q1Q0 
A1 ja A0 — elementide aadressQ1 ja Q0 — elementide arvN — andmebaitide arvD — andmed

Andmete lugemine

Väärtuste lugemiseks kasutatakse käskusid väärtustega 1 kuni 4.

  • 1 (0x01) (Read Coil Status);– tagastab väärtuse mitmele olekuregistrile;
  • 2 (0x02) (Read Discrete Inputs) – tagastab väärtuse mitmele diskreetsele sisendile;
  • 3 (0x03) (Read Holding Registers);– tagastab väärtuse ooteregistritele;
  • 4 (0x04) (Read Input Registers);– tagastab väärtuse mõnedele sisendregistritele;’

Päring koosneb esimesest elemendi aadressist, elemendi suurusest, ja loetavate elementide arvust. Nii aadress kui suurus omistatakse 16-bitise numbrina. Päritud andmed saadakse vastusega. Andmetele järgneb bait, mis sisaldab edastatud andmete suurust.

Tabel 3

Alamfunktsiooni koodNimi
HexDec
0000Tagasta päringu andmed
(Return Query Data)
0101Taaskäivita kommunikatsioon
(Restart Communications Option)
0202Tagasta diagnostika register
(Return Diagnostic Register)
0303Muuda ASCII sisenderaldaja
(Change ASCII Input Delimiter)
0404Juuruta ainult kuulamise reziim
(Force Listen Only Mode)
J05..09Reserveeritud
0A10Nulli loendurid ja diagnostika register
(Clear Counters and Diagnostic Register)
0B11Tagasta siini sõnumiteloenduri väärtus
(Return Bus Message Count)
0C12Tagasta siini sidevigade loenduri väärtus
(Return Bus Communication Error Count)
0D13Tagasta siini erandolukordade loenduri väärtus
(Return Bus Exception Error Count)
0E14Tagasta alluvseadme sõnumiloenduri väärtus
(Return Slave Message Count)
0F15Tagasta alluvseadme puuduvate vastuste loenduri väärtus
(Return Slave No Response Count)
1016Tagasta alluvseadme eituste loenduri väärtus
(Return Slave NAK Count)
1117Tagasta alluvseadme hõivatud staatuse loenduri väärtus
(Return Slave Busy Count)
1218Tagasta siini märkide ülejooksu loenduri väärtus
(Return Bus Character Overrun Count)
13
14N.A
19
2021…65535
Reserveeritud
Nulli ülejooksu loendur ja lipp
(Clear Overrun Counter and Flag)
Reserveeritud

KASUTAJA KÄSUD

Need sisalduvad kahes koodivahemikus (65..72 ja 100..110), milles on võimalik realiseerida mitmeid erinevaid funktsioone kasutaja poolt. Siiski ei ole mingit kindlust, et need käsud ei ole kasutuses teistes seadmetes mingite funktsioonide realiseerimiseks.

RESERVEERITUD KÄSUD

See funktsioonide sisendkoodide kategooria ei ole standardiseeritud, siiski kasutatakse neid erinevate firmade poolt toodetud seadmetes. Need koodid on: 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 ja 127.

ANDMEMUDEL

Üks selle protokolli poolt teostatavaid standardiseeritud tegevusi on kontrollerite registrites andmete lugemine ja kirjutamine. Protokolli spetsifikatsioon määratleb neli andmetabelit, mis on toodud tabelis 4.

Tabel 4

Primaarsed tabelidObjekti tüüpTüüpKommentaarid
Diskreetne sisendÜksik bittKirjutuskaitsega (read-only)Seda tüüpi andmed annab sisend/väljund süsteem.
Diskreetne väärtusÜksik bittLugemine-kirjutamineSeda tüüpi andmeid saavad muuta kõik rakendusprogrammid.
Sisendregistrid16-bitine sõnaKirjutuskaitsega (read-only)Seda tüüpi andmed annab sisend/väljund süsteem.
Ooteregistrid16-bitine sõnaLugemine-kirjutamineSeda tüüpi andmeid saavad muuta kõik rakendusprogrammid.

Igas tabelis toimub elementidele ligipääs 16-bitise aadressiga; esimene asukoht vastab aadressile 0. Sel moel võib iga tabel sisaldada kuni 65536 elementi. Spetsifikatsioon ei määra tabelis asuvate elementide füüsilist pikkust ega sisemist aadressi, millele need vastavad. Näiteks on võimalik moodustada kattuvaid tabeleid. Sellisel juhul käsud, mis töötavad diskreetsete andmetega ja 16-bitised registritega võivad adresseerida tegelikult sarnaseid andmeid.

VEAKONTROLL MODBUS RTU PROTOKOLLIS

Andmevahetusel Tööväljavõrgus Modbus RTUs võib tekkida kahte tüüpi vigu:

  • Vead, mis on seotud informatsiooni moonutamisega andmete ülekandmisel;
  • Loogikavead.

Esimest tüüpi vead tuvastatakse kaadri sümboli, paarsuskontrolli ja tsükkelkoodkontroll summa CRC-16-IBM (kasutatakse numbrilist polünoomi = 0xA001 ) abil.

Teist tüüpi vigade tuvastamiseks eeldab Modbus RTU protokoll, et seade ei ole vastust kätte saanud või vastus ise sisaldas veakoodi (tabel 6).Seda et vastus võib sisaldada veasõnumit, näitab käsukoodi kõrgema järgu bitt. Tööjaam tööväljavõrgus Modbus töötab vastavalt allpool olevale skeemile:

  • Kui alluvseade on kätte saanud korrektse päringu ja on võimeline seda töötlema standardsel moel, saadab ta tagasi standardse vastuse;
  • Kui alluvseade ei ole saanud ühtegi väärtust, ei genereeri ta ühtegi vastust. Sellisel juhul diagnoosib ülemseade aegumise (timeout) vea.
  • Kui alluvseade on saanud päringu, kuid on ühtlasi tuvastanud ka vea (paarsus, LRC või CRC), siis ei genereeri ta ühtegi vastust. Sellisel juhul diagnoosib ülemseade aegumise (timeout) vea;
  • Kui alluvseade on saanud päringu, kuid mingil põhjusel ei suuda seda töödelda, genereerib ta vastuse, mis näitab tekkinud vea tüüpi.

Tabel 5

Andmeedastuse suundAlluvseadme aadressFunktsiooni numberAndmed (või veakood)CRC
Järjekord (Ülem→Alluv)0x010x770xDD0xC7 0xA9
Päring (Alluv→Ülem)0x010xF70xEE0xE6 0x7C

Tabel 6

Viga #Veateade
0Ei ole vigu
1Keelatud toiming
2Keelatud andmeaadress
3Keelatud andmeväärtus
4Ülemseade aegumine – – timeout
5Side puudub
6Sobimatu üksuse ID
7Sobimatu käsk
8Sõnumi pikkus
9Funktsioon ei ole toetatud
10Keelatud formaat
11Sobimatud vastuvõetud andmed