**Modbus** on Modiconin vuonna 1979 julkaisema sarjaliikenneprotokolla, joka oli alkujaan tarkoitettu käytettäväksi Modiconin ohjelmoitavien logiikkojen (PLC) kanssa. Protokollasta on sittemmin muodostunut "de facto" -standardi teollisuudessa, ja on nyt yleisesti käytössä monien elektroniikkalaitteiden välisessä kommunikoinnissa.

Modbus perustuu asiakas-palvelin-arkkitehtuuriin (*aikaisemmin nimityksenä isäntä/orja, nykyään poistettu käytöstä*).

Pääasialliset syyt Modbusin laajalle käytölle muihin protokolliin verrattuna:

1. Suunniteltu teollisuuden tarpeisiin (luotettava)
2. Avoin, lisenssimaksuton standardi
3. Verraten helposti käyttöönotettava ja ylläpidettävä verkkoratkaisu
4. Siirtää raakadataa ilman laitevalmistajien asettamia rajoituksia eli ongelmitta myös eri laitevalmistajien välillä

Modbus mahdollistaa monien samaan verkkoon kytkettyjen laitteiden välisen kommunikoinnin, esimerkiksi järjestelmän, joka mittaa lämpötilaa sekä kosteutta, ja toimittaa tulokset tietokoneelle.

Modbus-protokollaa käytetään usein yhdistämään valvontatietokone kenttälaitteeseen (RTU) keskitetyn hallinnan järjestelmissä.

Protokolla-versiot
------------------

Modbus-protokollasta on olemassa sekä sarjaportti- (Modbus Serial) että ethernet-versiot (Modbus TCP). 

Sarjamuotoiselle liikenteelle on olemassa kaksi muunnelmaa eli kehysformaattiversiota erilaisilla numeerisen datan esitysmuodolla ja hieman erilaisilla protokollan yksityiskohdilla. 

* Modbus RTU:ssa datanesitysmuoto on kompakti binäärinen
* Modbus ASCII:n dataformaatti on tekstipohjainen, mikä on usein ihmisille helpommin ymmärrettävissä

Molemmat muunnelmat käyttävät asynkronista sarjamuotoista RS232C pohjaista tiedonsiirtoa. RTU-formaatissa käytetään tiedon eheyden tarkistukseen CRC-tarkistussummaa, kun taas ASCII-formaatissa käytössä on longitudinal redundancy check -tarkistussummaa. Ne väylän solmut, jotka ovat määritetty käyttämään RTU-muunnelmaa, eivät kommunikoi ASCII-muunnelmaa käyttävien solmujen kanssa, ja päinvastoin.

TCP/IP-yhteyksille (esimerkiksi ethernet) on olemassa uudempi muunnelma, Modbus/TCP. Se on helpompi toteuttaa, kuin Modbus/ASCII tai Modbus/RTU, koska se ei tarvitse tarkistussumman laskentaa — olettaen, että TCP/IP-protokollapinon toteutus saadaan valmiina.

Tietomalli ja toimintokutsut ovat samanlaisia kaikille kolmelle yhteysprotokollalle; vain kapselointi on erilainen.

Modbus Plus
-----------

On olemassa myös laajennettu versio, Modbus Plus (Modbus+ or MB+), mutta Modbusin ollessa avoin standardi, Modbus Plus on Modicon:n hallinnoima. Siinä missä Modbus on vain sarjaliikenneprotokolla, Modbus Plus määrittelee järjestelmän sekä protokolla- että fyysisellä tasolla. Modbus Plus:n protokolla on käytännössä sama kuin Modbusissa. Fyysinen taso on RS485 mukainen käyttäen kierrettyä parikaapelia 1 Mbps tiedonsiirtonopeudella. Jokainen kenttälaite on galvaanisesti eristetty, mikä tekee siitä muutos/reuna-liipaistavan jännite/taso-liipaisun sijasta. Modbus Plus:n liittäminen tietokoneeseen vaatii erityisliitännän, tyypillisesti laajennuskortin (PCI tai PC-Card). Perinteisesti se tarvitsee dedikoidun prosessorin käsittelemään nopeaa HDLC-tyyppistä token-kiertoa.

Kommunikaatio ja laitteet
-------------------------

Jokaiselle Modbus-väylään liitettävälle laitteelle annetaan yksilöllinen osoite. Jokainen laite voi lähettää Modbus-komennon, vaikkakin yleensä vain yksi master-laite tekee sitä. Modbus-komento sisältää sen laitteen modbus-osoitteen, jolle komento on tarkoitettu. Vain tämä laite suorittaa komennon, vaikka kaikki laitteet voivat sen vastaanottaa. Kaikki Modbus-komennot sisältävät tarkisteen, jolla varmistetaan tiedon kulkeminen virheettömänä. Perus Modbus-komennot voivat käskeä kenttälaitetta vaihtamaan jonkin rekisterin arvoa, tai yhtä hyvin komentaa laite lähettämään takaisin yhden tai useamman arvon sen rekistereistä.

Monet modeemit tukevat Modbusia, ja jotkut niistä ovat erityisesti suunniteltu tälle protokollalle. Yhteys voi olla langallinen tai langaton (esimerkiksi SMS tai GPRS). Tyypillisimmät haasteet järjestelmän suunnittelussa ovat pitkät viiveet ja ajastukseen liittyvät ongelmat.

Modbus RTU:n kehysformaatti
---------------------------

Modbus RTU:n kehysformaatti| Nimi | Engl. nimi | Pituus (bittiä) | Toiminto |
| --- | --- | --- | --- |
| Aloitus | Start | 28 | Vähintään ​3 1⁄2 merkkiä kestävä tauko (mark condition) |
| Osoite | Address | 8 | Laitteen osoite |
| Toiminto | Function | 8 | Toimintokoodi, kuten rekisterin luku |
| Data | Data | *n* × 8 | Data + viestin tyypistä riippuva pidennys |
| Tarkiste | CRC | 16 | Tarkistussumma (CRC, Cyclic redundancy check) |
| Lopetus | End | 28 | Vähintään ​3 1⁄2 merkkiä kestävä tauko kehysten välillä |

Muunnelmat
----------

Lähes kaikki toteutukset sisältävät muunnelmia virallisista standardeista. Eri muunnokset eivät välttämättä kommunikoi oikein eri toimittajien laitteiden välillä. Muutama yleisin muunnos:

* Datan tyypit
	+ Liukuluku IEEE (Floating Point IEEE)
	+ 32-bittinen luku (32 bit integer)
	+ 8-bittinen data (8 bit data)
	+ yhdistettyjä datan tyyppejä (mixed data types)
	+ bit fields in integers
	+ multipliers to change data to/from integer. 10, 100, 1000, 256 ...

* Protokollan laajennukset
	+ 16-bittinen laiteosoite
	+ 32-bittinen datan koko (1 osoite = 32 bittiä dataa palautetaan)
	+ word swapped data

Rajoitukset
-----------

Modbus suunniteltiin 1970-luvun lopulla ja vain tiettyyn käyttötarkoitukseen. Tietotyyppien määrä on rajoitettu tuolloin käytössä olleisiin. Suuret binaariobjektit eivät ole tuettuja. Kenttälaitteelle ei ole standardoitua tapaa löytää tieto-objektin kuvausta, esimerkiksi määrittelemään että rekisteriarvo merkitsee lämpötilaa 30 ja 175 asteen välillä. Modbus on client/server-protokolla, joten kenttälaitteen ei itse ole mahdollista raportoida poikkeustilanteesta. Client-laitteen täytyy säännöllisesti kysellä jokaiselta kenttälaitteelta tietoja. Tämä vie verkon kapasiteettia sovelluksissa, joissa datan siirto on rajallista, kuten hitaissa radiolinkeissä. Modbusin osoitteisto on rajoitettu 254 laitteeseen yhdessä väylässä. Modbus-tiedonsiirron täytyy olla jatkuvaa, joka rajoittaa etäyhteyksien tyypin sellaisiin, jotka voivat puskuroida dataa katkosten välttämiseksi.

Lähteet
-------

* 

### Viitteet

1. ↑