Modbus opas
Yleiskatsaus
Modbus on yksinkertainen ja lisenssimaksuton sovelluskerroksen protokolla. Client (asiakas) lähettää pyynnön ja server (palvelin) vastaa – palvelin ei lähetä viestejä oma-aloitteisesti. Terminologia on päivitetty master/slave → client/server.
1.1 Heksadesimaali
Modbus-viestit kulkevat biteissä (0/1). Neljä bittiä muodostaa helposti luettavan heksaluvun (0–F), joten binäärinen data esitetään lähes aina heksana. Heksadesimaalijärjestelmä on järjestelmä, jonka kantaluku on 16. Modbus-viestit tyypillisesti käännetään binäärisestä muodosta heksadesimaali muotoon, millä helpotetaan lukemista. Heksadesimaalien tulkitsemista tarvitaan käyttöönotto ja vianselvitystilanteissa. Bitti = pienin tieto-yksikkö (0 tai 1)
- Heksamerkki vastaa neljää bittiä
- Tavu = 8-bittiä = 2 heksamerkkiä
- 16-bittinen rekisteri = 2 tavua = 4 heksamerkkiä.
Bittijono 0001 0010 1011 1100 on heksadesimaalimuodossa 0x12BC
N1 | N2 | N3 | N4 | |
---|---|---|---|---|
BIN | 0001 | 0010 | 1011 | 1100 |
HEX | 1 | 2 | B | C |
Heksadesimaalijärjestelmä on järjestelmä, jonka kantaluku on 16. Modbus-viestit tyypillisesti käännetään binäärisestä muodosta heksadesimaali muotoon, millä helpotetaan lukemista. Heksadesimaalien tulkitsemista tarvitaan käyttöönotto ja vianselvitystilanteissa.
0000 = 0 | 0100 = 4 | 1000 = 8 | 1100 = C |
0001 = 1 | 0101 = 5 | 1001 = 9 | 1101 = D |
0010 = 2 | 0110 = 6 | 1010 = A | 1110 = E |
0011 = 3 | 0111 = 7 | 1011 = B | 1111 = F |
1.2 Modbus RTU väylän kytkentä ja jännitetasot
Modbus RTU viesti kulkee sarjaväylää pitkin. Sarjaväylässä tulisi välttää haaroja, sillä haarat aiheuttavat ongelmia. Väylä terminoidaan molemmista päistä yleensä 120Ω vastuksella. Tämän vastuksen tarkoitus on estää heijastumia ja siten häiriöitä väylän tiedonsiirrossa.
Modbus RTU viesteissä (RS-485) väylän jännite taso vaihtelee +5 ja -5 voltin välillä. Jännite -5V tarkoittaa bitti arvoa 1 ja jännite +5V tarkoittaa bitti arvoa 0. Jännite 0V tarkoittaa, että viestinnässä on tauko.
1.3 Modbus RTU väylän kaapeli
Kaapelina RS-485 -väylissä tulisi käyttää parikierrettyä mahdollisimman suojattua kaapelia. Mitä parempi häiriösuojaus, sitä vähemmän häiriöitä väylässä.
RS-485-väylä perustuu differentiaaliseen signaalinsiirtoon, jossa kaapelin johtimet muodostavat kierretyn parin. Tällainen rakenne vähentää tehokkaasti ulkopuolisista lähteistä tulevia sähkömagneettisia häiriöitä, kuten taajuusmuuttajien, releiden ja muiden suurta virtaa käyttävien laitteiden aiheuttamia pulsseja. Lisäksi suojavaippa auttaa estämään häiriöiden kytkeytymistä väylään ja vähentää vuorostaan väylästä ympäristöön säteileviä häiriöitä.
Väylän maadoitukseen ja suojavaipan liittämiseen tulee kiinnittää huomiota. Yleisesti suositellaan, että kaapelin suojavaippa maadoitetaan vain toisesta päästä välttämään potentiaalieroista johtuvia maasilmukoita.
1.4 Modbus RTU väylän nopeus ja maksimipituus
Modbus RTU -väylän toimivuuteen vaikuttavat merkittävästi tiedonsiirtonopeus (baud rate) ja käytetty kaapelipituus. Mitä korkeampi nopeus, sitä lyhyempi väylän maksimipituus:
- 9600 bps → jopa noin 1200 m
- 19200 bps → noin 600 m
- 38400 bps → noin 300 m
- 115200 bps → noin 100 m
Yllä olevat arvot ovat ohjearvoja, ja todelliset maksimipituudet riippuvat kaapelityypistä, asennusolosuhteista ja häiriöympäristöstä. Häiriöalttiissa ympäristöissä kannattaa käyttää alhaisempaa nopeutta ja huolehtia kaapeloinnin sekä maadoituksen laadusta.
1.5 Heijastukset kaapelissa
Heijastuksen tapahtuessa sähkö ikään kuin kimpoaa takaisinpäin ja sotkee väylän jännitetasoja. Jännitetasojen sotkeentuminen johtaa viestien virheellisyyteen.
Heijastusten estämiseksi mahdollisimman tehokkaasti, tulee terminointivastus mitoittaa siten, että se vastaa käytettävän kaapelin ominaisimpedanssia. Esimerkiksi Suomessa tyypillisesti käytetyn Nomak-kaapelin ominaisimpedanssi on 75Ω, jolloin päätevastusten koko tulisi olla 75Ω. Mikäli käytetään johdinta ominaisimpedanssilla 75Ω ja tämän päissä on 120Ω vastukset, muodostuu heijastumia kertoimella |Γ| ≈ 0,23. **Tämänkaltainen väylä on yleensä toimiva impedanssiepäsuhdasta huolimatta. **
1.6 Terminoinnin periaate
Terminointivastuksen tehtävänä on sitoa kaapelin loppupää niin, ettei signaali pääse heijastumaan takaisin linjaan. Jos väylä on pitkä ja nopeus korkea, ilman terminointia signaalit vääristyvät helposti ja viestien luettavuus heikkenee. Terminointivastus sijoitetaan aina väylän molempiin päihin.
1.7 Biasointi ja lepotila
Pelkkä terminointi ei riitä, jos väylä jää lepotilassa kellumaan. Tällöin vastaanottimien tulot voivat jäädä epäselvään tilaan ja synnyttää virheellisiä bittitulkintoja. Tätä varten käytetään biasointivastuksia, joilla väylän A- ja B-johtimille asetetaan pieni tasajännite-ero. Tyypillisesti biasointi toteutetaan yhdellä vastusparilla yhdessä pisteessä väylää, useimmiten pääväylän master-laitteen yhteydessä.
1.8 Käytännön huomioita
- Vain yksi pari terminointivastuksia: Terminointi tehdään vain väylän kahteen päähän. Jos terminointeja on useampia, signaali vaimenee liikaa ja kommunikointi voi häiriintyä.
- Kaapelin pituus ja nopeus: Mitä pidempi väylä ja suurempi baudinopeus, sitä kriittisempää terminoinnin oikea mitoitus on. Lyhyillä kaapeleilla ja matalilla nopeuksilla väylä voi usein toimia ilman terminointia.
- Impedanssiepäsuhta: Käytännössä väylät toimivat usein melko luotettavasti myös pienellä impedanssiepäsuhdalla, mutta mitä tarkemmin terminointi vastaa kaapelin ominaisimpedanssia, sitä vähemmän virheitä esiintyy.
1.9 Client ja server
Modbuslaitteita on 2 eri tyyppiä. Client(Master) ja Server(Slave). Modbus RTU verkossa, voi clienttejä olla 1 ja servereitä 255. Jokainen Serverille asetetaan yksilöllinen Modbus-osoite väliltä 1-255. Vältä osoitteen 1 käyttämistä, sillä se on oletusosoite ja aiheuttaa helposti päällekkäisyyksiä käytännön toteutuksissa.
- Client lukee tai kirjoittaa rekistereitä. Yleensä PLC.
- Server palauttaa arvot tai tallentaa ne pyydettäessä. Yleensä kenttälaite.
- Server ei lähetä viestejä ilman pyyntöä.
1.10 Rekisterit
Modbus rekistereitä on neljää tyyppiä (Coil, Discrete Input, Input Register, Holding Register). Ne eroavat koon (1 bitti / 16 bittiä) ja käyttöoikeuden (R/W) mukaan. Valmistajien dokumenteissa esiintyy sekä rekisteriavaruus 1…49999” että ”0…65535”. Rekistereillä voi olla standardista poiketen myös valmistajan määrittämiä rajoituksia, kuten kirjoitus rajoitus Coil-rekistereissä tai rajoitus, kuinka monta rekisteriä kerralla voi lukea.
Register type | Access | Size | Address |
---|---|---|---|
Coil | Read/write | 1-bit | 1–9999 (0–65535) |
Discrete input | Read only | 1-bit | 10001–19999 (0–65535) |
Input register | Read only | 16-bit | 30001–39999 (0–65535) |
Holding register | Read/write | 16-bit | 40001–49999 (0–65535) |
Huomaa myös 0‑ vs 1‑pohjainen laskenta aloitusrekisterissä; tarkista aina laitteen datasheet.
1.11 Funktiokoodit
Funktiokoodit ovat yhden tavun komentoja, joilla luetaan/kirjoitetaan tiettyä rekisterityyppiä yhdelle tai usealle osoitteelle. Standardikoodien lisäksi joissain laitteissa voi olla valmistajakohtaisia koodeja, eikä kaikkia koodeja välttämättä tueta jokaisella laitteella. Alla listaus virallisista funktiokoodeista modbus.org sivulta.
1.12 CRC (Cyclic Redundancy Check)
Jokaisen RTU kehyksen lopussa on 16 bittinen CRC. Lähettäjä ja vastaanottaja laskevat CRC:n viestin tavuista ja vertaavat tuloksia; yhdenkin bitin muutos johtaa virheeseen.
1.13 Pariteetti
Pariteetti voi olla N (ei pariteettia), E (parillinen) tai O (pariton). Pariteettibitin täytyy täsmätä molemmissa päissä, muuten syntyy virheitä. Pariteetti bitti huolehtii, että viestissä on määritelty parillisuus arvon 1 saaneita bittejä. Mikäli bittejä olisi pariton määrä ja pariteetiksi valittu E, vaihtaisi pariteetti bitti tilakseen yksi (1).
1.14 Tavu- ja sanajärjestys (endianness)
Modbus käyttää oletuksena Big Endian tavujärjestystä. Osa laitteista voi käyttää Little Endian järjestystä tai vaihtaa myös sanajärjestyksen 32 bittisissä arvoissa – tarkista aina manuaali. Little endian muodossa vähiten merkitevä tavu ja vähiten merkitsevä sana ovat ensin. Big endianissa taas merkitsevin tavu ja merkitsevin sana tulee ensin. Esimerkiksi väylää pitkin voidaan lähettää desimaaliluku 4037755681 heksadesimaali- ja Big Endian -muodoissa, jolloin luvuksi muodostuu F0 AB 43 21. Little Endian -muotoon käännettynä luku on 21 43 AB F0.
1.15 Datatyypit
Modbusissa välitetään laitteiden sisäisiä muuttujia (esim. lämpötilat, tilat, hälytykset) rekistereissä ja bittimuuttujina. Yleisiä tietotyyppejä ovat etumerkillinen kokonaisluku (INT), etumerkitön kokonaisluku (UINT) ja Liuku luku (FLOAT).
Modbus-rekisteri on 16-bittinen. 32- ja 64-bittiset arvot muodostetaan useista peräkkäisistä 16-bittisistä rekistereistä.
16-bittiset esimerkit (heksa 0x9ABC)
Hex | Type | Value |
---|---|---|
0x9ABC | int16 | −25924 |
0x9ABC | uint16 | 39612 |
0x9ABC | float16 | ≈ −0.00328827 |
32-bittiset arvot kahdesta rekisteristä
Oletus: [HI, LO] = merkittävämpi sana ensin.
Kokonaisluvut
Rekisterit [HI,LO] | Yhdistetty heksa | Tyyppi | Arvo |
---|---|---|---|
[0x89AB,0xCDEF] | 0x89ABCDEF | int32 | -1985229329 |
[0x89AB,0xCDEF] | 0x89ABCDEF | uint32 | 2309737967 |
Liukuluku (IEEE-754 float32)
Rekisterit [HI,LO] | Yhdistetty heksa | float32 |
---|---|---|
[0xC120,0x0000] | 0xC1200000 | -10.0 |
Sanajärjestys: Jotkin laitteet käyttävät “word swapia” → sama 32-bittinen arvo voi esiintyä rekistereinä [LO, HI]. Tarkista laitekohtainen dokumentaatio. 64-bittiset arvot 64-bittiset kokonaisluvut (int64/uint64) ja kelluvat (float64/double) muodostetaan neljästä peräkkäisestä rekisteristä; myös näissä sanajärjestys voi vaihdella.
1.16 Esimerkkiviestit
Read Coils: Function Code 01
Kysely: 01 01 00 05 00 03 6C 0A
Tavut | Tietue | Arvo |
---|---|---|
01 | Modbus-osoite | 0x01 (1) |
01 | Function code | 0x01 (1) - Read Coils |
00 05 | Aloitusrekisterin osoite | Base-0: 0x0005 (5) Base-1: 0x0006 (6) |
00 03 | Rekisterien määrä | 0x0003 (3) |
6C 0A | CRC | 0x6C0A (27658) |
Vastaus: 01 01 01 02 D0 49
Tavut | Tietue | Arvo |
---|---|---|
01 | Modbus-osoite | 0x01 (1) |
01 | Function code | 0x01 (1) - Read Coils |
01 | Datan tavu määrä | 0x01 (1) |
02 | Rekisterien 5,6 ja 7 data | 0x02 |
Bits (bN=Arvo, LSB→MSB per tavu) | b0=0, b1=1, b2=0, b3=0, b4=0, b5=0, b6=0, b7=0 | |
D0 49 | CRC | 0xD049 (53321) |
Read Discrete inputs: Function Code 02
Kysely: 01 02 00 02 00 02 58 0B
Tavut | Tietue | Arvo |
---|---|---|
01 | Modbus-osoite | 0x01 (1) |
02 | Function code | 0x02 (2) - Read Discrete Inputs |
00 02 | Aloitusrekisterin osoite | Base-0: 0x0002 (2) Base-1: 0x0003 (3) |
00 02 | Rekisterien määrä | 0x0002 (2) |
58 0B | CRC | 0x580B (22539) |
Vastaus: 01 02 01 00 A1 88
Tavut | Tietue | Arvo |
---|---|---|
01 | Modbus-osoite | 0x01 (1) |
02 | Function code | 0x02 (2) - Read Discrete Inputs |
01 | Datan tavu määrä | 0x01 (1) |
00 | Rekisterien 2 ja 3 data | 0x00 |
Bits (bN=Arvo, LSB→MSB per byte) | b0=0, b1=0, b2=0, b3=0, b4=0, b5=0, b6=0, b7=0 | |
A1 88 | CRC | 0xA188 (41352) |
Read Holding Registers: Function Code 03
Kysely: 01 03 00 07 00 02 75 CA
Tavut | Tietue | Arvo |
---|---|---|
01 | Modbus-osoite | 0x01 (1) |
03 | Function code | 0x03 (3) - Read Holding Registers |
00 07 | Aloitusrekisterin osoite | Base-0: 0x0007 (7) Base-1: 0x0008 (8) |
00 02 | Rekisterien määrä | 0x0002 (2) |
75 CA | CRC | 0x75CA (30154) |
Vastaus: 01 03 04 00 01 00 06 2B F1
Tavut | Tietue | Arvo |
---|---|---|
01 | Modbus-osoite | 0x01 (1) |
03 | Function code | 0x03 (3) - Read Holding Registers |
04 | Datan tavu määrä | 0x04 (4) |
00 01 00 06 | Rekisterien 7 ja 8 data | 0x0001 (1), 0x0006 (6) |
2B F1 | CRC | 0x2BF1 (11249) |
Read Input Register: Function Code 04
Kysely: 01 04 00 00 00 02 71 CB
Tavut | Tietue | Arvo |
---|---|---|
01 | Modbus-osoite | 0x01 (1) |
04 | Function code | 0x04 (4) - Read Input Registers |
00 00 | Aloitusrekisterin osoite | Base-0: 0x0000 (0) Base-1: 0x0001 (1) |
00 02 | Rekisterien määrä | 0x0002 (2) |
71 CB | CRC | 0x71CB (29131) |
Vastaus: 01 04 04 00 01 00 0B EB 83
Tavut | Tietue | Arvo |
---|---|---|
01 | Modbus-osoite | 0x01 (1) |
04 | Function code | 0x04 (4) - Read Input Registers |
04 | Tavu määrä | 0x04 (4) |
00 01 00 0B | Rekisterien 0 ja 1 data | 0x0001 (1), 0x000B (11) |
EB 83 | CRC | 0xEB83 (60291) |
Write Single Coil: Function Code 05
Kysely: 16 05 00 09 00 00 1E EF
Tavut | Tietue | Arvo |
---|---|---|
16 | Modbus-osoite | 0x16 (22) |
05 | Function code | 0x05 (5) - Write Single Coil |
00 09 | Aloitusrekisterin osoite | Base-0: 0x0009 (9) Base-1: 0x000A (10) |
00 00 | Rekisterin 9 data | B1:1 |
1E EF | CRC | 0x1EEF (7919) |
Vastaus: 16 05 00 09 FF 00 5F 1F
Tavut | Tietue | Arvo |
---|---|---|
16 | Modbus-osoite | 0x16 (22) |
05 | Function code | 0x05 (5) - Write Single Coil |
00 09 | Aloitusrekisterin osoite | Base-0: 0x0009 (9) Base-1: 0x000A (10) |
FF 00 | Rekisterin 9 data | B0:1 |
5F 1F | CRC | 0x5F1F (24351) |
Write Single Register: Function code 06
Kysely: 16 06 00 09 00 01 9B 2F
Tavut | Tietue | Arvo |
---|---|---|
16 | Modbus-osoite | 0x16 (22) |
06 | Function code | 0x06 (6) - Write Single Register |
00 09 | Aloitusrekisterin osoite | Base-0: 0x0009 (9) Base-1: 0x000A (10) |
00 01 | Rekisterin 9 data | 0x0001 (1) |
9B 2F | CRC | 0x9B2F (39727) |
Vastaus: 16 06 00 09 00 01 9B 2F
Tavut | Tietue | Arvo |
---|---|---|
16 | Modbus-osoite | 0x16 (22) |
06 | Function code | 0x06 (6) - Write Single Register |
00 09 | Aloitusrekisterin osoite | Base-0: 0x0009 (9) Base-1: 0x000A (10) |
00 01 | Rekisterin 9 data | 0x0001 (1) |
9B 2F | CRC | 0x9B2F (39727) |
Write Multiple Coils: Function code 15
Kysely: 16 0F 00 09 00 05 01 0D 32 78
Tavut | Tietue | Arvo |
---|---|---|
16 | Modbus-osoite | 0x16 (22) |
0F | Function code | 0x0F (15) - Write Multiple Coils |
00 09 | Aloitusrekisterin osoite | Base-0: 0x0009 (9) Base-1: 0x000A (10) |
00 05 | Rekisterien määrä | 0x0005 (5) |
01 | Tavu määrä | 0x01 (1) |
0D | Rekisterien 9-13 data | 0x0D |
Bits (bN=Arvo, LSB→MSB per byte) | b0=1, b1=0, b2=1, b3=1, b4=0, b5=0 | |
32 78 | CRC | 0x3278 (12920) |
Vastaus: 16 0F 00 09 00 05 46 ED
Tavut | Tietue | Arvo |
---|---|---|
16 | Modbus-osoite | 0x16 (22) |
0F | Function code | 0x0F (15) - Write Multiple Coils |
00 09 | Aloitusrekisterin osoite | Base-0: 0x0009 (9) Base-1: 0x000A (10) |
00 05 | Rekisterien määrä | 0x0005 (5) |
46 ED | CRC | 0x46ED (18157) |
Write Multiple Registers: Function code 16
Kysely: 16 10 00 09 00 05 0A 00 09 00 02 00 4D 00 00 00 01 13 5B
Tavut | Tietue | Arvo |
---|---|---|
16 | Modbus-osoite | 0x16 (22) |
10 | Function code | 0x10 (16) - Write Multiple Registers |
00 09 | Aloitusrekisterin osoite | Base-0: 0x0009 (9) Base-1: 0x000A (10) |
00 05 | Rekisterien määrä | 0x0005 (5) |
0A | Tavu määrä | 0x0A (10) |
00 09 00 02 00 4D 00 00 00 01 | Rekisterien 9-13 data | 0x0009 (9), 0x0002 (2), 0x004D (77), 0x0000 (0), 0x0001 (1) |
13 5B | CRC | 0x135B (4955) |
Vastaus: 16 10 00 09 00 05 D3 2F
Tavut | Tietue | Arvo |
---|---|---|
16 | Modbus-osoite | 0x16 (22) |
10 | Function code | 0x10 (16) - Write Multiple Registers |
00 09 | Aloitusrekisterin osoite | Base-0: 0x0009 (9) Base-1: 0x000A (10) |
00 05 | Rekisterien määrä | 0x0005 (5) |
D3 2F | CRC | 0xD32F (54063) |
1.17 Virhekoodit
Modbus kyselyä voi seurata.
- Server laite käsittelee kyselyn ja lähettää vastauksen.
- Server laite saa kyselyn, mutta siinä on CRC/pariteetti virhe, milloin kysely jätetään huomiotta.
- Server ei saa kyselyä perille, jolloin siihen ei voida vastata.
- Server ei pysty syystä tai toisesta käsittelemään kyselyä ja vastaa virheellä.
Huomioi laitekohtaiset rajoitukset, esim. Rekisterikartassa olevat tyhjät kohdat tulisi jättää kyselemättä.
Virhekoodeissa palautetaan funktiokoodin sijaan virhekoodi, jonka arvo on funktio koodi + 0x80. Eli esim:
Request — Function code | Response — Exception code |
---|---|
01 (0x01) | 129 (0x81) |
02 (0x02) | 130 (0x82) |
03 (0x03) | 131 (0x83) |
04 (0x04) | 132 (0x84) |
05 (0x05) | 133 (0x85) |
06 (0x06) | 134 (0x86) |
15 (0x0F) | 143 (0x8F) |
16 (0x10) | 144 (0x90) |
Exception esimerkki viestintä:
Kysely: 01 01 00 42 00 03 DC 1F
Tavut | Tietue | Arvo |
---|---|---|
01 | Modbus-osoite | 0x01 (1) |
01 | Function code | 0x01 (1) - Read Coils |
00 42 | Aloitusrekisterin osoite | Base-0: 0x0042 (66) Base-1: 0x0043 (67) |
00 03 | Määrä | 0x0003 (3) |
DC 1F | CRC | 0xDC1F (56351) |
Vastaus: 01 81 01 81 90
Tavut | Tietue | Arvo |
---|---|---|
01 | Modbus-osoite | 0x01 (1) |
81 | Error code | 0x80 + 0x01 (1) - Read Coils |
01 | Exception code | Illegal Function — Function code not supported or not allowed for this state. |
81 90 | CRC | 0x8190 (33168) |
Modbus virhekoodeja ovat
Code | Name | Meaning |
---|---|---|
1 (0x01) | ILLEGAL FUNCTION | The function code received in the query is not an allowable action for the server. This may be because the function code is only applicable to newer devices and was not implemented in the unit selected. It could also indicate that the server is in the wrong state to process a request of this type, for example because it is unconfigured and is being asked to return register values. |
2 (0x02) | ILLEGAL DATA ADDRESS | The data address received in the query is not an allowable address for the server. More specifically, the combination of reference number and transfer length is invalid. For a controller with 100 registers, the PDU addresses the first register as 0, and the last one as 99. If a request is submitted with a starting register address of 96 and a quantity of registers of 4, then this request will successfully operate (address-wise at least) on registers 96, 97, 98, 99. If a request is submitted with a starting register address of 96 and a quantity of registers of 5, then this request will fail with Exception Code 0x02 “Illegal Data Address” since it attempts to operate on registers 96, 97, 98, 99 and 100, and there is no register with address 100. |
3 (0x03) | ILLEGAL DATA VALUE | A value contained in the query data field is not an allowable value for the server. This indicates a fault in the structure of the remainder of a complex request, such as that the implied length is incorrect. It specifically does not mean that a data item submitted for storage in a register has a value outside the expectation of the application program, since the Modbus protocol is unaware of the significance of any particular value of any particular register. |
4 (0x04) | SERVER DEVICE FAILURE | An unrecoverable error occurred while the server was attempting to perform the requested action. |
5 (0x05) | ACKNOWLEDGE | Specialized use in conjunction with programming commands. The server has accepted the request and is processing it, but a long duration of time will be required to do so. This response is returned to prevent a timeout error from occurring in the client. The client can next issue a Poll Program Complete message to determine if processing is completed. |
6 (0x06) | SERVER DEVICE BUSY | Specialized use in conjunction with programming commands. The server is engaged in processing a long-duration program command. The client should retransmit the message later when the server is free. |
8 (0x08) | MEMORY PARITY ERROR | Specialized use in conjunction with function codes 20 and 21 and reference type 6, to indicate that the extended file area failed to pass a consistency check. The server attempted to read record file, but detected a parity error in the memory. The client can retry the request, but service may be required on the server device. |
10 (0x0A) | GATEWAY PATH UNAVAILABLE | Specialized use in conjunction with gateways, indicates that the gateway was unable to allocate an internal communication path from the input port to the output port for processing the request. Usually means that the gateway is misconfigured or overloaded. |
11 (0x0B) | GATEWAY TARGET DEVICE FAILED TO RESPOND | Specialized use in conjunction with gateways, indicates that no response was obtained from the target device. Usually means that the device is not present on the network. |
1.18 RX ja TX ledit
Kenttälaitteiden muuntimissa/antureissa TX vilkkuu lähetyksessä ja RX vastaanotossa – hyvä perusdiagnostiikka asennuksen aikana. Client-laitteessa lähetystä tulisi seurata vastaus ja Server-laitteessa vastaanottoa tulisi seurata lähetys.
Käytännön vinkkejä
- Älä käytä oletusosoitetta 1 ja dokumentoi osoitteet I/O listaan.
- Tarkista 0/1 pohjainen laskenta ja datatyypit; älä sekoita INT/UINT/DINT samaan lukuun.
- RTU väylällä varmista terminointi ja yksinkertainen sarjarakenne; väärä topologia lisää virheitä.