Modbus

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 se 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ähttps://modbus.org/docs/Client-ServerPR-07-2020-final.docx.pdf).

Pääasialliset syyt Modbusin laajalle käytölle muihin protokolliin verrattuna:
 Suunniteltu teollisuuden tarpeisiin (luotettava)
Avoin, lisenssimaksuton standardi
 Verraten helposti käyttöönotettava ja ylläpidettävä verkkoratkaisu
 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 esitysmuodoilla ja hieman erilaisilla protokollan yksityiskohdilla. 

 Modbus RTU:ssa datan esitysmuoto 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 -tarkistussumma. Ne väylän solmut, jotka on 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 samat 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:n 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ä on 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 kehysformaattiNimiEngl. nimiPituus (bittiä)ToimintoAloitusStart28Vähintään ​3 1⁄2 merkkiä kestävä tauko (mark condition)OsoiteAddress8Laitteen osoiteToimintoFunction8Toimintokoodi, kuten rekisterin luku DataDatan × 8Data + viestin tyypistä riippuva pidennysTarkisteCRC16Tarkistussumma (CRC, Cyclic redundancy check)LopetusEnd28Vä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 binääriobjektit 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, mikä rajoittaa etäyhteyksien tyypin sellaisiin, jotka voivat puskuroida dataa katkosten välttämiseksi.

Lähteet
http://www.modbus.org

 Viitteet 

Luokka:Tietoliikenneprotokollat
Luokka:Teollisuusautomaatio