Modbus-osoitteet: 40001, 0-pohjainen ja 1-pohjainen
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ä.
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.
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 paikka | Esitystapa |
|---|---|
| Protokolla-offset | 0 |
| Yksipohjainen rekisterinumero | 1 |
| Holding-rekisteriviite | 40001 |
Seuraava paikka voidaan esittää näin:
| Sama looginen paikka | Esitystapa |
|---|---|
| Protokolla-offset | 1 |
| Yksipohjainen rekisterinumero | 2 |
| Holding-rekisteriviite | 40002 |
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-offset | Kuvaus |
|---|---|
| 100 | Tuloilman lämpötila |
| 101 | Tuloilman 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.
Tyypilliset lukufunktiot ovat:
| Datamalli | Tavallinen lukufunktio |
|---|---|
| Coils | 01 |
| Discrete Inputs | 02 |
| Holding Registers | 03 |
| Input Registers | 04 |
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-offset | Viite | FC | Kuvaus |
|---|---|---|---|
| 0 | 40001 | 03 | Huonelämpötila |
| 1 | 40002 | 03 | CO2-pitoisuus |
| 2 | 40003 | 03 | Suhteellinen 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
- Tunnista datamalli ja Function Code.
- Etsi valmistajan taulukosta ensimmäinen tunnettu rekisteri.
- Selvitä käyttääkö taulukko protokolla-offsetia, yksipohjaista numeroa vai 4xxxx-viitettä.
- Selvitä mitä Modbus clientin osoitekenttä odottaa.
- Pura yksi todellinen pyyntö, jos epäselvyys jatkuu.
- 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.