Modbus-osoitteet: 40001, 0-pohjainen ja 1-pohjainen

Julkaistu 2026-08-22 · kirjoittanut Henry Forsström · Päivitetty 2026-09-05

Harva Modbus-yksityiskohta aiheuttaa yhtä paljon turhaa käyttöönottoaikaa kuin rekisterinumerointi. Valmistaja voi kirjoittaa 40001, yksi PLC pyytää osoitetta 0 ja toinen ohjelma näyttää rekisterin 1. Kaikki kolme voivat tarkoittaa samaa holding-rekisterin paikkaa.

Oleellista on, että nämä ovat saman osoitteen eri esitystapoja, eivät kolme eri rekisteriä.

Sama Modbus register location zero-based ja one-based indexingillä

Protokollapyyntö käyttää osoitekenttää

Modbus-protokollassa rekisteripyynnön aloitusosoite on 16-bittinen arvo. Datalohkon ensimmäisen rekisterin protokollaosoite on tavallisesti 0.

Ensimmäisen holding-rekisterin luku voi sisältää esimerkiksi:

Aloitusosoite = 0x0000
Määrä = 1

Pyynnössä ei lähetetä desimaalilukua 40001 aloitusosoitteena.

Yhdelle Modbus serverille osoitettu request ja vastaava response

Mistä 40001 tulee

4xxxx-merkintä on historiallinen ihmistä varten tehty rekisteriviite. Se kertoo, että arvo kuuluu Holding Register -datamalliin ja antaa sille viitenumeron.

Tavallisessa esitystavassa:

Sama looginen paikkaEsitystapa
Protokolla-offset0
Yksipohjainen rekisterinumero1
Holding-rekisteriviite40001

Seuraava paikka voidaan esittää näin:

Sama looginen paikkaEsitystapa
Protokolla-offset1
Yksipohjainen rekisterinumero2
Holding-rekisteriviite40002

Tästä syystä “vähennä yksi” korjaa joskus integraation. Se ei ole yleispätevä Modbus-ohje. Se toimii vain silloin, kun dokumentti ja client käyttävät eri indeksipohjaa samalle rekisterialueelle.

Sama numero syötetään eri ohjelmiin eri tavalla

Pelkkä kentän nimi Address ei kerro tarpeeksi.

Yksi client voi odottaa raakaa protokolla-offsetia:

0

Toinen näyttää yksipohjaisen rekisterinumeron:

1

Kolmas hyväksyy koko viitteen:

40001

Selvitä ennen numeron muuttamista, mitä ohjelma odottaa. Hyvä ohjelmisto kertoo tämän käyttöliittymässä tai ohjeessa. Jos se jää epäselväksi, katso todellinen Modbus-pyyntö tai testaa rekisterillä, jonka arvo tunnetaan varmasti.

Onnistunut luku voi silti olla yhden rekisterin pielessä

Osoitevirhe on vaarallisempi silloin, kun viereinen rekisteri sisältää myös täysin kelvollisen arvon.

Oletetaan, että valmistaja tarkoittaa:

Protokolla-offsetKuvaus
100Tuloilman lämpötila
101Tuloilman asetusarvo

Jos integraattori tulkitsee dokumentin osoitteen yksipohjaiseksi vaikka se on nollapohjainen, pyyntö voi osua offsetiin 101. Laite vastaa normaalisti, mutta arvo on asetusarvo eikä mittaus.

Täydellinen timeout huomataan heti. Uskottava arvo väärästä rekisteristä voi jäädä järjestelmään pitkäksi aikaa.

Rekisterityyppi kuuluu osoitteeseen

Modbus-osoite on merkityksellinen yhdessä datamallin tai Function Coden kanssa. Holding Register -alueen offset 0 ei ole sama datapiste kuin Input Register -alueen offset 0.

Modbus data model: Coil, Discrete Input, Input Register ja Holding Register

Tyypilliset lukufunktiot ovat:

DatamalliTavallinen lukufunktio
Coils01
Discrete Inputs02
Holding Registers03
Input Registers04

Rekisterikartassa ei siis pitäisi julkaista pelkkää numeroa, jos rekisterityyppi ei muuten ole täysin selvä.

Näin dokumentoisin uuden laitteen osoitteet

Teknisessä dokumentaatiossa tekisin protokolla-offsetin näkyväksi ja lisäisin 4xxxx-viitteen vain, jos siitä on kohderyhmälle hyötyä.

Esimerkiksi:

Protokolla-offsetViiteFCKuvaus
04000103Huonelämpötila
14000203CO2-pitoisuus
24000303Suhteellinen kosteus

Taulukon yhteyteen yksi yksiselitteinen lause:

Tämän dokumentin osoitteet ovat nollapohjaisia Modbus-protokollaosoitteita. Offset 0 vastaa holding-rekisteriviitettä 40001.

Myös yksipohjainen dokumentointi voi toimia. Tärkeintä on, että käytäntö kerrotaan suoraan ja sitä käytetään samalla tavalla taulukossa, esimerkeissä ja kuvakaappauksissa.

Älä sekoita osoitetapoja saman dokumentin sisällä

Tyypillinen dokumentaatiovirhe on näyttää taulukossa 40001, ohjelmiston kuvakaappauksessa 0 ja käyttöönottoesimerkissä 1 selittämättä, että kaikki tarkoittavat samaa paikkaa.

Firmware-kehittäjälle suhde voi olla itsestään selvä. Asiakas näkee kolme ristiriitaista osoitetta.

Valitse yksi pääasiallinen esitystapa. Jos vaihtoehtoinen esitystapa on hyödyllinen, nimeä se aina protokolla-offsetiksi, yksipohjaiseksi rekisterinumeroksi tai 4xxxx-viitteeksi. Älä kutsu kaikkia vain osoitteeksi.

Pikatarkistus offset-epäilyyn

  1. Tunnista datamalli ja Function Code.
  2. Etsi valmistajan taulukosta ensimmäinen tunnettu rekisteri.
  3. Selvitä käyttääkö taulukko protokolla-offsetia, yksipohjaista numeroa vai 4xxxx-viitettä.
  4. Selvitä mitä Modbus clientin osoitekenttä odottaa.
  5. Pura yksi todellinen pyyntö, jos epäselvyys jatkuu.
  6. Varmista tulos tunnetulla fyysisellä arvolla tai laitteen tilalla.

Älä kokeile vierekkäisiä osoitteita kunnes jokin luku näyttää uskottavalta. Se voi peittää järjestelmällisen yhden rekisterin offset-virheen.

Raakakehyksen voit tarkistaa Modbus-dekooderilla. Laajempi tausta löytyy Modbus RTU ja TCP -oppaasta.