Yleisimmät Modbus RTU -ongelmat ja niiden vianhaku
Modbus RTU -vianhaku helpottuu, kun ongelma jaetaan kerroksiin. Selvitä ensin, lähteekö pyyntö todella liikkeelle ja vastaako server siihen. Jos vastaus tulee, tarkista onko kyse normaalista vastauksesta vai Modbus-poikkeuksesta. Vasta tämän jälkeen kannattaa alkaa tulkita rekisteridataa lämpötilaksi, paineeksi tai muuksi prosessiarvoksi.
Järjestys on tärkeä, koska johdotusvika, virheellinen pyyntö ja väärä datan tulkinta voivat kaikki näyttää ohjausjärjestelmässä samalta: “Modbus ei toimi”. Korjaustapa on kuitenkin täysin eri.
| Oire | Tarkista ensin | Tyypillisiä syitä |
|---|---|---|
| Ei vastausta | TX/RX ja sarjaliikenneasetukset | Väärä laiteosoite, baud/pariteetti, johdotus, virransyöttö |
| Timeout | Pyyntö, vastausaika ja laitteen tila | Väärä osoite, hidas vastaus, tukematon pyyntö, väylävika |
| Poikkeusvastaus | Function Code, osoite ja määrä | Tukematon funktio, virheellinen osoite, virheellinen kirjoitus |
| Vastaus tulee, arvo väärä | Raakarekisterit ja tulkinta | Väärä osoite, tietotyyppi, etumerkki, skaalaus, sanajärjestys |
| Toimii yhdellä työkalulla | Työkalujen lähettämät pyynnöt | Osoitetapa, Function Code, rekisterimäärä, ajoitus |
| Toimii välillä | RS-485-asennus ja pollaus | Topologia, terminointi, häiriöt, liitokset, liian tiheä pollaus |
Modbus server ei vastaa
Aloita asioista, joiden täytyy toimia ennen kuin rekisteriosoitteella on mitään merkitystä. Tarkista laitteen virransyöttö, oikea sarjaportti ja se, että client todella lähettää pyyntöjä. Jos ohjelmassa tai laitteessa näkyy TX/RX-ledit tai liikennelaskurit, katso niitä ennen sovellustason asetusten muuttamista.
Vertaa sen jälkeen molempien päiden sarjaliikenneasetuksia. Baudinopeuden, pariteetin ja stop-bittien pitää vastata laitteen määrityksiä. Tarkista myös Modbus serverin laiteosoite. Kahdella samalla osoitteella olevalla laitteella voi syntyä hyvin sekavaa käyttäytymistä.
Jos asetukset täsmäävät, siirry fyysiseen kerrokseen. Tarkista johtimet molempien laitteiden liitinmerkintöjen perusteella. A- ja B-merkintöjen napaisuutta ei pidä olettaa samanlaiseksi kaikilla valmistajilla. Tarkista runkoväylä, haarat, terminointi, referenssijohdin sekä suojaus ja maadoitus kyseisten laitteiden ja suunnitelman mukaan.
Yksi hyvä kysymys on yksinkertainen: tuleeko väylältä mitään takaisin? Jos vastaanotettuja tavuja ei ole, skaalaus tai sanajärjestys ei voi ratkaista ongelmaa.
Laite vastaa Modbus-poikkeuksella
Poikkeusvastaus on hyödyllinen havainto. Se kertoo, että server vastaanotti pyynnön riittävän hyvin voidakseen tulkita sen. Ongelma on siis siirtynyt perusyhteydestä itse pyyntöön.
Tarkista:
- Function Code
- protokollaosoite
- pyydetty rekisterimäärä
- kuuluuko osoite laitteen tukemaan alueeseen
- onko rekisteri kirjoitettavissa
- onko kirjoitettu arvo sallitulla alueella
Esimerkiksi osoitteen 100 lukeminen Function Codella 03 tarkoittaa Holding Register -aluetta. Sama osoite Function Codella 04 tarkoittaa Input Register -aluetta. Numero voi olla sama, mutta Modbusin datamalli on eri.
Älä myöskään oleta, että rekisterikartan tyhjän kohdan yli voidaan aina tehdä lohkoluku. Osa laitteista palauttaa poikkeuksen, jos pyyntö osuu tukemattomaan osoitteeseen. Jos tällä on merkitystä, valmistajan pitäisi dokumentoida tuetut lukualueet ja rajat.
CRC error tai vioittunut RTU frame
CRC error on eri asia kuin Modbus exception. Exception responsessa server ymmärsi pyynnön riittävän hyvin palauttaakseen protocol-level errorin. CRC mismatchissa vastaanotettu RTU frame ei ole sellaisenaan valid.
Jos CRC erroreita esiintyy toistuvasti, tarkista koko serial-polku: baud rate, parity, stop bits, johdotus, häiriöt, grounding/reference conditions sekä mahdolliset converterit tai gatewayt välissä. Älä laske CRC:tä uudelleen ja päättele heti field devicen olevan väärässä ennen kuin olet varmistanut, että kaapatut tavut ovat täydelliset ja oikeassa järjestyksessä.
Yhteys toimii, mutta arvo on väärä
Kelvollinen Modbus-vastaus ei todista, että prosessiarvo on tulkittu oikein. Tässä vaiheessa ongelma ei yleensä enää ole RS-485-yhteydessä.
Katso ensin raakarekisterit ilman muunnoksia. Tarkista rekisteriosoite, rekisterityyppi, tietotyyppi, etumerkillisyys, rekisterien määrä, tavu- ja sanajärjestys, skaalaus, offset ja yksikkö. Etumerkillinen INT16 tulkittuna UINT16-arvoksi voi näyttää valtavalta positiiviselta luvulta. Kahden rekisterin FLOAT32 väärässä sanajärjestyksessä voi puolestaan tuottaa täysin järjettömän mutta teknisesti kelvollisen luvun.
Katso tarkempi menetelmä sivulta Miksi Modbus-arvoni on väärä?.
Testiohjelma toimii, mutta PLC tai BMS ei
Kun yksi Modbus client toimii ja toinen ei, vertaa todellisia lähetettyjä pyyntöjä pelkkien asetuskenttien sijaan.
Ero voi olla esimerkiksi:
- nollapohjainen protokollaosoite verrattuna yksipohjaiseen rekisterinumeroon
- 40001-tyyppisen viitteen syöttäminen suoraan ohjelmaan
- Function Code 03 verrattuna Function Codein 04
- eri rekisterimäärä
- eri timeout tai pyyntöjen välinen viive
- lohkoluku, joka ylittää tukemattoman osoitteen
Osoitetavat aiheuttavat paljon sekaannusta, koska ensimmäinen holding-rekisteri voidaan esittää protokollaosoitteena 0, rekisterinumerona 1 tai viitteenä 40001. Ne voivat tarkoittaa samaa paikkaa, mutta ohjelma voi odottaa vain yhtä näistä esitystavoista.
Katso Modbus-osoitteet: 40001, 0-pohjainen ja 1-pohjainen.
Yhteys toimii välillä ja välillä ei
Katkonainen vika kannattaa erottaa tilanteesta, jossa vastausta ei tule koskaan. Jos väylä toimii minuutteja ja lakkaa sitten toimimasta, perusosoite ja sarjaliikenneasetukset voivat jo olla oikein.
Tarkista liittyykö vika esimerkiksi siihen, että:
- väylään liitetään uusi laite
- taajuusmuuttaja, kontaktori tai muu häiriölähde kytkeytyy
- kaapelipituus tai haarojen määrä kasvaa
- kaappia tai kenttäjohtoja liikutetaan
- pollausnopeutta kasvatetaan
- yhden hitaan vastauksen jälkeen alkaa jatkuva uudelleenyritys
- liitin on löysä tai hapettunut
RS-485-väylässä topologia ja terminointi pitää tarkistaa käytettävien laitteiden mukaan. Terminointia ei pidä lisätä jokaiseen laitteeseen varmuuden vuoksi. Samoin yleistä kaapelipituus- tai laitemäärärajaa ei kannata käyttää, jos todellisten transceivereiden ja laitevalmistajan rajat ovat tiedossa.
Myös pollaus voi paljastaa ongelman, jota käsin tehty testi ei näytä. Osa laitteista tarvitsee enemmän käsittely- tai vastausaikaa kuin aggressiivinen BMS-pollaus sallii. Mahdollinen vaadittu viive, suurin lohkokoko tai muu laitekohtainen raja pitää ottaa laitteen dokumentaatiosta.
Katso fyysisen kerroksen tarkistuslista sivulta RS-485-johdotus Modbus RTU -väylässä.
Timeout voi jättää vanhan vastauksen liikenteeseen
Timeoutin käsittely on tärkeää myös clientissa. Tavallinen Function Code 03 -vastaus sisältää serverin osoitteen, Function Coden, tavumäärän ja datan, mutta ei pyynnön aloitusosoitetta. Jos client timeoutin jälkeen lähettää uuden samanpituisen pyynnön ja hyväksyy myöhästyneen vanhan vastauksen uutena vastauksena, väärä data voi yhdistyä väärään pyyntöön.
Oikein toimivan Modbus RTU clientin pitää hallita vanhat framet ja transaktioiden ajoitus. Laitteen puolella järkevät, yhtenäiset rekisterilohkot ja dokumentoidut pollausohjeet vähentävät turhia pyyntöjä, mutta niitä ei pidä käyttää rikkinäisen client-logiikan kiertotienä.
Käytännön vianhakujärjestys
Käytä samaa järjestystä joka kerta:
- Tarkista virransyöttö ja oikea tiedonsiirtoportti.
- Varmista, että client lähettää pyynnön.
- Tarkista laiteosoite, baudinopeus, pariteetti ja stop-bitit.
- Tarkista tuleeko vastaustavuja lainkaan.
- Pura todellinen pyyntö ja vastaus.
- Jos tulee poikkeus, selvitä pyynnön parametrit.
- Jos vastaus on normaali mutta arvo väärä, selvitä datan tulkinta.
- Jos vika on katkonainen, tutki RS-485-asennus ja pollaus.
- Vertaa toiseen Modbus clientiin vasta kun tiedät, mitä kumpikin todella lähettää.
Voit liittää pyynnön tai vastauksen Modbus-dekooderiin ja tarkistaa kehyksen ennen raakadatasta tehtäviä muunnoksia.
Milloin vika on todennäköisesti laitteessa
Kaikki kenttäongelmat eivät kuulu integraattorille. Laitteen pitäisi käsitellä tukemattomat pyynnöt turvallisesti. Dokumentoitujen tiedonsiirtoasetusten pitäisi toimia. Muutetun osoitteen tai pariteetin pitäisi aktivoitua ja säilyä käynnistyksen yli juuri niin kuin ohjeessa sanotaan. Anturivika ei saisi jättää uskottavaa vanhaa mittausarvoa ilman minkäänlaista laatu- tai vikailmaisua, jos BMS:n odotetaan käyttävän arvoa ohjaukseen.
Jos laite kaatuu virheelliseen lohkolukuun, unohtaa asetukset sähkökatkon jälkeen tai käyttäytyy eri tavalla kuin julkaistu rekisterikartta, kyse on tuotteen rajapinnasta eikä normaalista käyttöönotosta.
Valmistajan näkökulmasta tehtävä testaus on kuvattu artikkelissa Miten Modbus-laite testataan ennen julkaisua.