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).
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.
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-kood | Andmed |
1 bait | N < 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.
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:
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:
Modbus ASCII kaadri individuaalsete väljade tähendused on esitatud tabelis 1.
Tabel 1
Nimi | Pikkus | Funktsioon |
Algus | 1 märk | Kaardi algust tähistatakse kooloniga (;: , ASCII on selle väärtuseks 3A hex) |
Aadress | 2 märki | Tööjaama aadress |
Juhtinfo | 2 märki | Viitab juhtinfole (funktsiooni koodile) nagu näiteks loe keerde/sisendite väärtusi |
Andmed | n märki | Andmed – pikkus valitakse sõltuvalt sõnumi tüübist ja edastatavast andmemahust |
LRC kontroll | 2 märki | Veakontroll |
Lõpp | 2 märki | Kaardi lõppu tähistatakse reavahetuse märgipaariga (CRLF, ASCII on selle väärtuseks 0D& 0A hex) |
Modbus TCP informatsiooni kaadri struktuur on järgmine:
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.
JUHTINFO KATEGOORIAD
Modbusis kasutatavates protokollides on kolm juhtinfo (juhtfunktsioonide) kategooriat: Standardiseeritud käsud; kasutajakäsud ja reserveeritud käsud (pilt 6.19).
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 nr | Vastused | |||||
1 (0x01) Loe diskreetne väärtus (Read Coil Status) | A1 | A0 | Q1 | Q0 | ||
N | D (N baiti) | |||||
2 (0x02) Loe diskreetsed sisendid (Read Discrete Inputs) | A1 | A0 | Q1 | Q0 | ||
N | D (N baiti) | |||||
3 (0x03) Loe ooteregistrid (Read Holding Registers) | A1 | A0 | Q1 | Q0 | ||
N | D (N baiti) | |||||
4 (0x04) Loe sisendregistrid (Read Input Registers) | A1 | A0 | Q1 | Q0 | ||
N | D (N baiti) | |||||
5 (0x05) Kasuta üksik diskreetne väärtus (Force Single Coil) | A1 | A0 | D1 | D0 | ||
A1 | A0 | D1 | D0 | |||
6 (0x06) Töötle üksik register (Preset Single Register) | A1 | A0 | D1 | D0 | ||
A1 | A0 | D1 | D0 | |||
15 (0x0F) Kasuta mitu diskreetset väärtust (Force Multiple Coils) | A1 | A0 | Q1 | Q0 | N | D (N baiti) |
A1 | A0 | Q1 | Q0 | |||
16 (0x10) Töötle mitu registrit (Preset Multiple Registers) | A1 | A0 | Q1 | Q0 | N | D (N baiti) |
A1 | A0 | Q1 | Q0 | |||
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 kood | Nimi | |
Hex | Dec | |
00 | 00 | Tagasta päringu andmed (Return Query Data) |
01 | 01 | Taaskäivita kommunikatsioon (Restart Communications Option) |
02 | 02 | Tagasta diagnostika register (Return Diagnostic Register) |
03 | 03 | Muuda ASCII sisenderaldaja (Change ASCII Input Delimiter) |
04 | 04 | Juuruta ainult kuulamise reziim (Force Listen Only Mode) |
J | 05..09 | Reserveeritud |
0A | 10 | Nulli loendurid ja diagnostika register (Clear Counters and Diagnostic Register) |
0B | 11 | Tagasta siini sõnumiteloenduri väärtus (Return Bus Message Count) |
0C | 12 | Tagasta siini sidevigade loenduri väärtus (Return Bus Communication Error Count) |
0D | 13 | Tagasta siini erandolukordade loenduri väärtus (Return Bus Exception Error Count) |
0E | 14 | Tagasta alluvseadme sõnumiloenduri väärtus (Return Slave Message Count) |
0F | 15 | Tagasta alluvseadme puuduvate vastuste loenduri väärtus (Return Slave No Response Count) |
10 | 16 | Tagasta alluvseadme eituste loenduri väärtus (Return Slave NAK Count) |
11 | 17 | Tagasta alluvseadme hõivatud staatuse loenduri väärtus (Return Slave Busy Count) |
12 | 18 | Tagasta 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 tabelid | Objekti tüüp | Tüüp | Kommentaarid |
Diskreetne sisend | Üksik bitt | Kirjutuskaitsega (read-only) | Seda tüüpi andmed annab sisend/väljund süsteem. |
Diskreetne väärtus | Üksik bitt | Lugemine-kirjutamine | Seda tüüpi andmeid saavad muuta kõik rakendusprogrammid. |
Sisendregistrid | 16-bitine sõna | Kirjutuskaitsega (read-only) | Seda tüüpi andmed annab sisend/väljund süsteem. |
Ooteregistrid | 16-bitine sõna | Lugemine-kirjutamine | Seda 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 suund | Alluvseadme aadress | Funktsiooni number | Andmed (või veakood) | CRC |
Järjekord (Ülem→Alluv) | 0x01 | 0x77 | 0xDD | 0xC7 0xA9 |
Päring (Alluv→Ülem) | 0x01 | 0xF7 | 0xEE | 0xE6 0x7C |
Tabel 6
Viga # | Veateade |
0 | Ei ole vigu |
1 | Keelatud toiming |
2 | Keelatud andmeaadress |
3 | Keelatud andmeväärtus |
4 | Ülemseade aegumine – – timeout |
5 | Side puudub |
6 | Sobimatu üksuse ID |
7 | Sobimatu käsk |
8 | Sõnumi pikkus |
9 | Funktsioon ei ole toetatud |
10 | Keelatud formaat |
11 | Sobimatud vastuvõetud andmed |