Koble et Modbus TCP-system til gjennom SB1000

Koble et Modbus TCP-system til gjennom SB1000

Velg riktig gatewayport, bygg en gyldig forespørsel, dekod verdien og kontroller polling og skriving.

Hva veiledningen hjelper deg med

Bruk denne veiledningen når et SD-anlegg, en PLS, et SCADA-system eller en annen Modbus TCP-klient skal lese eller skrive til en Modbus RTU-enhet på en RS485-port på SB1000. Etabler først én korrekt lesing. Legg deretter til flere punkter, velg passende polling og test nødvendig skriving.

Kommunikasjonsveien er: Modbus TCP-klient → SB1000s IP-adresse og TCP-port → valgt RS485-buss → feltenhet.

Klienten starter forespørslene. SB1000 videresender dem mellom TCP og RTU. Feltenheten bestemmer hvilke registre som finnes og hva innholdet betyr. I denne videresendingsmodusen konverterer ikke SB1000 automatisk svarbytene til temperaturer, energitellere, verdier med fortegn eller flyttall for klienten.

Bruk egne veiledninger for en RTU-kontroller som skal nå en TCP-server, MQTT, BACnet eller virtuell COM/rå TCP. Disse bruker andre roller eller protokoller selv om de fysiske kontaktene er de samme.

1. Samle opplysningene for ett punkt

Bruk registerkartet for feltenhetens nøyaktige modell og fastvare. Velg en dokumentert, skrivebeskyttet verdi du kan sammenligne med et display eller en annen pålitelig måling. Det finnes ikke ett universelt testregister som alle feltenheter støtter.

Noter følgende:

  • SB1000-fastvare og versjon på klientprogram/driver.
  • SB1000s IP-adresse og nettverksgrensesnittet du vil bruke.
  • RS485 Port 1 eller Port 2, driftsmodus og konfigurert TCP-port.
  • Feltenhetens Modbus-adresse, også kalt Unit ID, enhetsadresse, server-ID eller slaveadresse.
  • Baudrate, paritet, databiter og stoppbiter som feltenheten bruker.
  • Registertabell: coil, diskret inngang, holdingregister eller inputregister.
  • Registernummer nøyaktig som i manualen og manualens nummereringskonvensjon.
  • Faktisk nullbasert adresse i forespørselen og antall biter eller 16-bitsregistre som skal leses.
  • Datatype, fortegn, bredde, byte-/ordrekkefølge, skalering, offset og måleenhet.
  • Eventuelle spesialverdier for utilgjengelig, ugyldig, utenfor område eller ikke montert.

Samle disse opplysningene for å unngå å blande IP-adresse, TCP-port, Unit ID og registeradresse. De identifiserer ulike deler av samme forespørsel.

2. Velg riktig SB1000-tjeneste

Åpne webgrensesnittet på aktuell SB1000 og kontroller porten som utstyret faktisk er koblet til. Velg TCP → RTU for denne arbeidsflyten og lagre nødvendige innstillinger. Nøyaktig navn på modusen kan variere mellom fastvareversjoner.

Standardkonfigurasjonen bruker:

  • Gateway for RS485 Port 1: TCP-port 4001.
  • Gateway for RS485 Port 2: TCP-port 4002.
  • SB1000s Modbus-administrasjonsgrensesnitt: TCP-port 502 når det er aktivert. Dette er en egen tjeneste for SB1000-innstillinger.

Bruk alltid den faktisk konfigurerte porten. Tallene kan endres. Fabrikkinnstillingene deaktiverer serieportmodusene og administrasjonsgrensesnittet, så et standardportnummer beviser ikke at en tjeneste lytter.

Ikke bruk administrasjonsregisterkartet når du vil lese en måler eller aktuator på RS485. Bruk feltenhetens eget registerkart via gatewayporten.

Hvis den eksterne klienten bare støtter 502, kontroller først hvilken SB1000-tjeneste som eventuelt bruker porten. Sett gatewayen til en ledig port klienten støtter, og flytt eller deaktiver en administrasjonstjeneste som er i konflikt. To lyttetjenester kan ikke bruke samme adresse og TCP-port. Dokumenter endringen for andre brukere.

Port 1 og Port 2 er separate busser. To enheter kan bruke samme Unit ID på hver sin buss fordi TCP-endepunktet skiller dem. To enheter på samme buss må ikke dele vanlig unicast-adresse.

Standard tjenestenummer for Modbus TCP er 502, og Unit Identifier brukes til å nå enheter bak en gateway. Det konfigurerte SB1000-endepunktet avgjør likevel hvilken tjeneste og buss du når.

3. Kontroller nettverkstilgang fra den faktiske klienten

Kontroller at SD-anleggets eller PLS-ens datamaskin når SB1000 på ønsket nettverk. En vellykket forbindelse fra telefonen eller den bærbare datamaskinen beviser ikke samme rute fra en kontroller på et annet VLAN.

Kontroller mål-IP, nettmaske/ruting og brannmurregel for faktisk TCP-port. Ved statisk IP undersøker du dupliserte adresser. Ved DHCP bør installasjonen ha en egnet løsning for stabil adresse. Bruk adressen enheten faktisk viser.

At websiden åpnes, viser at webtjenesten er tilgjengelig fra nettleseren. Modbus bruker en separat forbindelse som fortsatt kan være deaktivert, blokkert eller rettet mot feil port. Mislykket ping alene beviser heller ikke at TCP er utilgjengelig.

Ved avvist TCP-forbindelse kontrollerer du tjenestens modus/port og klientkapasitet. Hvis tilkoblingen får tidsavbrudd, kontroller også nettverksvei og filtrering. Ingen av resultatene forteller ennå om registeradressen er korrekt.

4. Kontroller RS485-siden

Tilpass serieinnstillingene til feltenhetens dokumenterte konfigurasjon. Kontroller strøm og at enhetsadressen samsvarer med Unit ID du vil bruke.

Kontroller kablingen mot begge produsentenes dokumentasjon. A/B-merking brukes ikke konsekvent av alle utstyrsleverandører. Hold dataparene sammen, bruk riktig busstopologi med korte avgreninger, og følg instruksjonene for signalreferanse, skjerm og jording. Endeterminering og bias har ulike oppgaver. Ikke aktiver terminering på hver enhet eller legg til bias ukritisk.

Det må være en bevisst løsning for hvem som styrer bussen. En eksisterende RTU-master og SB1000 må ikke sende uavhengig på samme buss uten en støttet arkitektur. Hvis idriftsettingssøket melder en annen aktiv master, undersøk trafikken før du søker.

Bruk SB1000s webverktøy, der fastvaren tilbyr dem, til å undersøke om feltenheten svarer og om ønsket punkt kan leses. Sanntidssøk og selvtest kjøres på den aktuelle SB1000. Å lese en hjelpeartikkel i appen starter ikke verktøyene.

Idriftsettingsmodus overtar serieportene midlertidig. Etter testen avslutter du idriftsetting, kontrollerer normal gatewaymodus og serieinnstillinger og kobler den eksterne klienten til igjen. Et treff på en annen baudrate/paritet beviser ikke at normal drift bruker de oppdagede innstillingene.

5. Angi Unit ID

For en feltenhet bak denne gatewayen angir du RTU-adressen i klientens felt for Unit ID/slaveadresse. Vanlige Modbus RTU-unicast-adresser er 1–247. Bruk utstyrets konfigurerte adresse, ikke et anslag basert på fysisk plassering.

Ikke bruk SB1000s serienummer, siste del av IP-adressen, TCP-porten eller registernummeret som Unit ID. Råd om å ignorere Unit ID på en direkte TCP-enhet gjelder ikke nødvendigvis en TCP-til-RTU-gateway.

Adresse 0 er broadcast og er ikke en måte å lese alle enheter på. Ikke bruk den til første lesetest eller utforskende skriving. Broadcast-skriving kan påvirke flere enheter og gir ikke individuelle svar.

6. Gjør registerkartet om til en forespørsel

Funksjon og adresse identifiserer data sammen. Samme talloffset kan finnes uavhengig i flere tabeller.

  • Coiler: leses normalt med FC01.
  • Diskrete innganger: leses normalt med FC02.
  • Holdingregistre: leses med FC03.
  • Inputregistre: leses med FC04.

Adressen i forespørselen er nullbasert. En manual eller klient kan i stedet bruke ettbasert nummerering eller en tradisjonell referanse som inkluderer tabellen. Når manualen uttrykkelig bruker vanlig 4xxxx-notasjon, betyr 40001 FC03 med offset 0, og 40011 betyr FC03 med offset 10. En ettbasert klient kan spørre etter register 11 for samme offset 10.

Bruk dette eksemplet til å kontrollere konvensjonen, ikke som en antakelse om at ditt utstyr har samme punkt:

  • Manualen angir vanlig holdingregister 40011.
  • Klient med rå nullbasert adresse: velg holdingregistre og angi 10.
  • Klient med ettbasert registernummer: velg holdingregistre og angi 11.
  • Klient med tradisjonell referanse: angi 40011 etter driverens dokumenterte metode.
  • Selve forespørselen skal inneholde startadresse 10, som er heksadesimalt 0x000A.

Ikke trekk fra én eller 40001 uten å kjenne kildekonvensjonen. En manual som allerede oppgir «protokolladresse 10», har gitt offseten. Tallet 40001 kan også være en gyldig rå offset når produsenten uttrykkelig definerer det slik. Sekssifret referansenotasjon må også tolkes etter driver/manual, ikke ved å fjerne første siffer mekanisk.

Kontroller desimal mot heksadesimal. Desimal 10 er 0x000A. Heksadesimal 0x0010 er desimal 16.

Antallet i forespørselen er biter for FC01/02 og 16-bitsregistre for FC03/04. Det er ikke antall byte eller ferdige måleverdier. Én float32 bruker to registre, og ett 64-bits heltall bruker fire. Start på verdiens første register og les hele bredden samlet.

7. Bevis én lesing før du legger til punktlisten

Følgende er et illustrerende registerkart, ikke en SB1000-definisjon eller et universelt målerregister:

  • SB1000-IP: 192.168.10.50, brukt bare som eksempel.
  • Gateway: Port 1 med konfigurert TCP-port 4001.
  • Feltenhet: Unit ID 7.
  • Punkt: temperatur i vanlig holdingregister 40011.
  • Koding: 16-bits heltall med fortegn, faktor 0,1, offset 0 og måleenhet °C.
  • Forventet verdi i eksemplet: 21,5 °C.

Konfigurer klienten for Modbus TCP, adresse 192.168.10.50, port 4001, Unit ID 7, FC03, nullbasert offset 10 og antall 1. Start med én utestående lesing og et rolig intervall, for eksempel to sekunder i denne manuelle testen. Intervallet er et startpunkt for feilsøking, ikke en produksjonsinnstilling for alle enheter.

Det riktige dataordet er 0x00D7, som er desimal 215. Dekoding med fortegn gir 215, og 215 × 0,1 gir 21,5 °C.

Et eksempel på rå TCP-forespørsel er «00 01 00 00 00 06 07 03 00 0A 00 01». Et samsvarende svar er «00 01 00 00 00 05 07 03 02 00 D7». Transaksjonsidentifikatoren kan være annerledes i en virkelig klient. Dette er Modbus TCP-rammer med MBAP-header. Ikke legg til RTU-CRC eller send dem til en rå seriebro som om det var samme tjeneste.

Sammenlign råord og ferdig måleverdi hver for seg. Hvis råordet er riktig, men temperaturen feil, undersøk klientens dekoding og skalering. Hvis forespørselen avvises eller data mangler, avklar først kommunikasjonsfeilen.

Kontroller mer enn én driftsverdi. Én tilfeldig plausibel verdi gir svakt grunnlag for å fastslå riktig adresse eller koding.

8. Velg riktig datatype

Et register inneholder biter. Registeretiketten eller desimaltegnet på utstyrets display identifiserer ikke kodingen.

  • uint16: ett register, 0 til 65 535.
  • int16: ett register, −32 768 til 32 767.
  • uint32 eller int32: to registre. Varianten med fortegn tolker øverste bit som del av en verdi i toerkomplement.
  • float32: to registre med IEEE 754-flyttallskoding. Tolket som heltall gir de samme bitene et annet tall.
  • uint64 eller int64: fire registre. Kontroller at mottakersystemet bevarer tilstrekkelig presisjon.
  • Status, enum eller bitfelt: tolk angitte biter/tilstander etter kartet. Et statusord som ikke er null, betyr ikke nødvendigvis bare PÅ.

Råverdi 0xFF9C er for eksempel 65 436 som uint16, men −100 som int16. Med faktor 0,1 er riktig verdi med fortegn −10,0. Dekoding uten fortegn gir 6 543,6. Endring av kabling eller pollingintervall kan ikke rette denne tolkningsfeilen.

Ikke behandle automatisk 0xFFFF, 0x8000, negative tall eller NaN som sensorfeil. Produsenten kan definere mønsteret som ugyldigkode, vanlig verdi eller spesialtilstand. Bruk denne definisjonen før skalering og før punktet markeres med god kvalitet.

Noen produkter bruker BCD, tekst, dato, egne eksponentregistre eller modulo-10 000-koding. Disse krever dokumentert tolkning. Det er ikke tilstrekkelig å velge heltallstypen som ser nærmest ut. Produsenteksempler, som Schneider I/O Smart Link og EVlink, gjelder disse produktene og er ikke universelle kart for enheter bak SB1000.

Store tellere krever ekstra kontroll. Et mottakersystem som konverterer alle tall til binary64-flyttall, kan ikke representere alle heltall over 2^53 nøyaktig. Ny lesing av samme råord gjenoppretter ikke presisjon som gikk tapt i konverteringen. Behold en eksakt heltallsrepresentasjon der bruken krever det.

9. Kontroller byte- og ordrekkefølge

For flerregisterverdier må du finne hvordan byte og ord er ordnet. Betegnelser som «big endian», «little endian» og «swap» er ikke alltid entydige mellom klienter. Sammenlign den faktiske bytesekvensen.

I et 32-bits eksempel kaller vi mest signifikante byte A, deretter B og C og minst signifikante byte D. Vanlige rekkefølger i verktøy er ABCD, CDAB, BADC og DCBA. Disse tilsvarer ingen bytting, bytte av de to 16-bitsordene, bytte av byte i hvert ord og reversering av alle fire byte.

I SB1000s punktdekoding betyr 32-bitsvalgene:

  • 3210: tolk byte på bussen som ABCD.
  • 1032: tolk byte på bussen som CDAB.
  • 2301: tolk byte på bussen som BADC.
  • 0123: tolk byte på bussen som DCBA.

Denne koblingen gjelder SB1000-etikettene. Ikke kopier sifrene til et annet program uten at det definerer dem likt. SB1000-verktøyene bruker ikke denne 32-bits byteomordningen på 16-bitsverdier, og 64-bitsbehandlingen omordner hele registre. Et bestemt 64-bits feltpunkt trenger derfor sitt eget eksempel.

Float32-verdien 23,5 kodes som 0x41BC0000. Med høyord først kommer registrene 0x41BC og 0x0000. Med byttede ord kommer 0x0000 og 0x41BC. Begge kan representere 23,5 med riktig dekoder.

Endret visningsrekkefølge i idriftsettingsverktøyet endrer hvordan det verktøyet tolker svaret. Det endrer ikke gatewayens rådata og konfigurerer ikke den eksterne klienten. Still inn den eksterne dekoderen separat.

10. Bruk skalering, offset og måleenhet én gang

For en lineær definisjon er måleverdi = dekodet råverdi × faktor + offset. Dekod type og rekkefølge før skalering.

Eksempel: råverdi 215 med faktor 0,1 og offset 0 blir 21,5. Et annet punkt med råverdi 200, faktor 0,1 og offset −10 blir 10,0.

Kontroller om dokumentasjonen sier «multipliser med 0,1», «del på 10» eller bruker en egen eksponent. Kontroller også måleenheten: 1 500 W er 1,5 kW, og effekt er ikke samme størrelse som akkumulert energi.

Bruk hver konvertering én gang. En skalert verdi fra en mapping eller driver kan allerede være i tekniske enheter. Den transparente TCP → RTU-veien sender fortsatt feltenhetens registerdata. Den bruker ikke MQTT-/BACnet-punktdefinisjonen på denne trafikken.

For et lineært skrivbart punkt er motsatt konvertering råverdi = (måleverdi − offset) / faktor. Bruk bare dokumentert skrivbart område og representerbare trinn. Kontroller om klientens skrivefunksjon forventer rådata eller ferdig skalerte verdier.

11. Legg til punkter uten å overbelaste bussen

Legg til noen få punkter om gangen etter første verifiserte lesing. Sammenlign feiltellere og oppdateringstid før du øker belastningen.

Grupper bare kompatible, sammenhengende registre som enheten støtter. En stor lesing kan feile hvis den krysser et hull eller en enhetsspesifikk blokkgrense. Noen enheter krever hele 32-bitspar. Maksimum for FC03/04 er 125 registre, men feltenheten kan akseptere færre. Protokollmaksimum er ikke et løfte om en bestemt enhet.

SB1000 behandler kommunikasjonen på en buss sekvensielt. Flere klienter, nye forsøk og manglende enheter bruker tid. Ethernet-hastighet får ikke RS485-enhetene til å svare raskere. Som planleggingseksempel bruker 20 sekvensielle forespørsler med gjennomsnittlig 50 ms hver allerede ett sekund før ekstra pauser og tidsavbrudd.

Bruk forsiktig polling og én utestående forespørsel under feilsøking. Klientens tidsavbrudd må gi tid til seriesvar, konfigurert SB1000-tidsavbrudd og kø ved ønsket belastning. En klient som prøver igjen før forrige forespørsel er ferdig, kan øke køen. Svært langt tidsavbrudd løser ikke feil adresse eller frakoblet buss.

Behold bare klientene som trengs til testen. Fastvaren deler en begrenset Modbus TCP-klientpool mellom lyttetjenestene, og andre nettverkstjenester bruker også ressurser. Kontroller kapasitetsinformasjon for installert versjon før du planlegger flere samtidige klienter.

12. Forstå cache og gamle verdier

Når registercache er aktiv, kan gjentatte lesinger besvares med et nylig svar uten ny bussforespørsel. Standard er cache av. Når funksjonen brukes i støttede moduser, er standard levetid 5 sekunder, konfigurerbar fra 1 til 60 sekunder.

Bruk cachediagnostikken der den finnes til å se alder, treff og bom. En enkelt Modbus-forespørsel fra Diagnostics går utenom denne cachen på fastvare med funksjonen. Gjør en kontrollert endring i feltverdien og sammenlign råsvaret med SD-anleggets visning.

Et vellykket TCP-svar beviser ikke at en ny feltmåling ble tatt akkurat da. Feltenheten har også sin egen oppdateringsfrekvens. Velg akseptabel alder for bruken og konfigurer kvalitet-/foreldelseshåndtering i mottakersystemet.

Ikke anta at enhver frosset verdi skyldes cache. Kontroller at klienten fortsatt poller, at bussen virker, om en enhet prøves på nytt, og om visningen bare viser siste vellykkede verdi.

13. Følg feilen du faktisk observerer

Hvis TCP ikke kobler til, undersøk IP-vei, målport, aktivert modus og klientkapasitet. Registerdekoding er ikke involvert ennå.

Hvis TCP kobler til uten svar, bruk diagnostikken til å se om en forespørsel sendes på riktig buss. Ingen forespørsel peker mot feil tjeneste/modus, idriftsetting, forespørselsformat eller cache. En sendt forespørsel uten gyldig svar peker mot Unit ID, strøm, serieinnstillinger, kabling, annen master eller enhetsspesifikk timing.

Hvis et Modbus-unntak returneres, noter hele koden og forespørselen. Unntak 01 betyr at operasjonen ikke støttes. 02 peker mot adresse/område. 03 peker mot ugyldige forespørselsdata. Kontroller kart og begrensninger. En CRC-feil er noe annet enn et gyldig Modbus-unntak.

Ved 04 eller 06 må du også undersøke SB1000s handling ved tidsavbrudd/CRC-feil og bussdiagnostikken. Gatewayen kan generere disse svarene når transaksjonen mot feltutstyret feiler. Klienttidsavbrudd kan også være forventet når policyen er å ikke sende unntak. Ikke utled den opprinnelige feilen bare fra klientmeldingen.

Hvis gyldig svar har feil verdi, sammenlign råbyte først. Kontroller deretter startadresse, bredde, datatype, rekkefølge, skalering, enheter, ugyldigkoder og alder. Ikke begynn med omkabling når bussen leverer forventet råverdi.

Ved varsel om byttet A/B retter du den identifiserte datakablingen og søker igjen med normal polaritet. Den valgfrie inverterte testen er eksperimentell og finner ikke alle tilfeller. Manglende varsel beviser ikke riktig polaritet, og midlertidig invertering er ikke en lagret reparasjon.

14. Test skriving separat

Start først når lesingen er bevist og den tilsiktede utstyrshandlingen er forstått. Bruk en dokumentert, reverserbar test i egnet installasjonstilstand. Noter tidligere verdi og hvordan den gjenopprettes.

Kontroller at punktet er skrivbart, riktig funksjon, full bredde, eventuelle krav om opplåsing/fjernstyring og tillatt område. FC05 skriver én coil, FC06 ett holdingregister og FC16 flere holdingregistre. Feltenheten avgjør hva som støttes. Plassering i holdingtabellen garanterer ikke skrivetilgang.

For flerregisterverdier bruker du produsentens metode for hele verdien i stedet for uavhengige enkeltregisterskrivinger. Bruk riktig koding og eventuell invers skalering.

Les tilbake dokumentert feedback eller settpunkt og kontroller faktisk oppførsel. En protokollkvittering beviser ikke at en aktuator beveget seg. Lokal overstyring, annen kontroller, forrigling eller driftsmodus kan hindre eller erstatte handlingen. Noen enheter krever separat aktivering/lagring. Følg dokumentasjonen.

Ikke bruk broadcast-skriving, tilfeldig registerutprøving eller gjentatt skriving av permanente innstillinger for å oppdage hva et punkt gjør.

15. Fullfør overleveringen

Kontroller normal driftsmodus etter idriftsetting og dokumenter én vellykket forespørsel med svar. Kontroller minst én negativ verdi eller grenseverdi når fortegn er relevant, og flere sanntidsverdier for å verifisere rekkefølge/skalering.

Noter faktisk IP-/tjenesteport, buss, Unit ID, registerkartversjon, funksjon, rå startadresse, bredde, type/rekkefølge, skalering/måleenhet, pollingintervall, tidsavbrudd og cacheinnstilling. Ta med fastvare- og klient-/driverversjoner. Behold egnet konfigurasjonsbackup og punktliste. En NFC-mal er et annet dokument med et smalere sett av støttede innstillinger.

Ved behov for hjelp, oppgi nøyaktig feilende forespørsel, råsvar eller feil, tidspunkt, topologi, serieinnstillinger og resultatet av en enkeltpunkttest både i SB1000-verktøyet og ekstern klient. Ta med feltenhetsmodell/registerkart og SB1000-versjon. Fjern passord fra skjermbilder, forbindelsesstrenger og eksport.