Modbus Master-Slave

Modbus is een van de meest gebruikte communicatieprotocollen. Het is erg eenvoudig, snel en veilig. Bij gebruik met een seriële poort wordt het Modbus RTU genoemd, en bij gebruik met Ethernet Modbus TCP/IP. Recent is ook Modbus UDP populair geworden. In het verleden bestond er ook Modbus ASCII, maar dat wordt niet meer veel gebruikt.

Klik hier voor de Modbus Master-code voor Fulmatic 7 PLC's.

Modbus-tabellen

Allereerst moeten we de structuur van de Modbus-tabel begrijpen. Het Modbus-protocol heeft vier tabellen. Twee van deze tabellen zijn analoog (16-bits) en de andere twee zijn bitgebaseerd. Elke tabel bevat 65536 variabelen. Met andere woorden, de Analog Holding-tabel bevat 65536 woorden en de Discrete Output Coil-tabel bevat 65536 bits.

AdresbereikLezen en schrijvenTabelnaamTip
0-65535Lezen en schrijvenDiscrete uitgangsspoelen1 Bit
0-65535Alleen-lezenDiscrete ingangscontacten1 Bit
0-65535Alleen-lezenAnaloge ingangsregisters16 bit
0-65535Lezen en schrijvenAnaloge holdingregisters16 Bit
Modbus-tabel

Hoewel de tabel er in feite als volgt uitziet, wordt het meest voorkomende gebruik weergegeven in de onderstaande tabel. In de bovenstaande tabel moeten gebruikers de tabelnaam en het variabele adres voor een waarde specificeren. Bijvoorbeeld: "Analog Holding 500. word". In de onderstaande tabel specificeren de adressen ook tot welke tabel de variabele behoort. Bijvoorbeeld: voor het adres "Analog Holding 500. word" volstaat het om "40501" te schrijven. Omdat het adresveld Analog Holding is, is het startadres 40001 + woordadres 500 = 40501. Als het "Analog Input 500. word" zou zijn, zou het 30501 zijn.

AdresbereikLezen en schrijvenTabelnaamTip
1-9999Lezen en schrijvenDiscrete uitgangsspoelen1 Bit
10001-19999Alleen-lezenDiscrete ingangscontacten1 Bit
30001-39999Alleen-lezenAnaloge ingangsregisters16 Bit
40001-49999Lezen en schrijvenAnaloge holdingregisters16 Bit
Tabel met veelgebruikte Modbus-functies

De tweede methode kan nog steeds een groot aantal datavelden adresseren, ook al beperkt deze de toegang tot sommige adressen. Er is ook een derde methode. Deze methode maakt het mogelijk om alle datavelden met één enkel getal weer te geven. Deze methode wordt 6-cijferige Modbus-adressering genoemd. Het adresbereik bestaat uit 6 cijfers.

AdresbereikLezen en schrijvenTabelnaamTip
1-65536Lezen en schrijvenDiscrete uitgangsspoelen1 Bit
100001-165536Alleen-lezenDiscrete ingangscontacten1 Bit
300001-365536Alleen-lezenAnaloge ingangsregisters16 Bit
400001-465536Lezen en schrijvenAnaloge holdingregisters16 Bit
6-cijferige Modbus-adressering

Opmerking: WinTr SCADA-programma, Focus HMI Dit programma, en vele vergelijkbare programma's, ondersteunen zowel 5- als 6-cijferige adressering. Het gelijktijdig ondersteunen van beide adresseerstijlen levert een probleem op. Bij 6-cijferige adressering conflicteren de discrete uitgangsspoelen (1-65536) met de adressen bij 5-cijferige adressering. Daarom is bij 6-cijferige adressering... Discrete uitgangsspoelen Hiervoor moet een nul aan het begin worden geplaatst.

We hebben drie verschillende tabelstructuren gezien. De eerste tabel is de daadwerkelijke tabel; de andere twee zijn slechts twee verschillende methoden om er toegang toe te krijgen. Fabrikanten van Modbus-apparaten kunnen deze adresstabel op een van de drie volgende manieren aanleveren. U zult dan adresconversies van tabel naar tabel moeten uitvoeren. Of u kunt ervoor kiezen om dit niet te leren en constant anderen om hulp te vragen. Ik heb de onderstaande tabel opgesteld om deze conversies te illustreren.

Eerste adresmeldingMelding tweede adresDerde adresmelding
Analoge Holding 040001400001
Analoge Holding 100041001401001
Analoge ingang 10030101300101
Discrete invoer 1010011100011
Modbus-adressering

Modbus-query's

Om gegevens uit de hierboven beschreven tabellen te lezen of te schrijven, stuurt het masterapparaat een query. Het slaveapparaat beantwoordt deze query. Zolang de communicatie voortduurt, stuurt de master queries en beantwoordt de slave deze. Om Modbus-queries en -reacties te begrijpen, raad ik de website https://www.simplymodbus.ca/FC03.htm aan, die ik zelf regelmatig gebruik . Alle communicatie is gerelateerd aan de waarden van de verzonden en ontvangen bytes. Ik zal de uitleg hieronder voortzetten aan de hand van een voorbeeld van een Modbus-query.

Voorbeeld Modbus-query:

Hieronder ziet u de query die is gemaakt om 3 woorden aan gegevens te lezen, beginnend bij Holding Register 107, van een apparaat met stationadres 17.

11: Stationsadres (11 hex = 17 dec)
03: Functiecode 3 (Leescode voor Holding Registers)
006B: Eerste leesadres (006B hex = 107 dec of 40001 + 107 = 40108)
0003: Aantal te lezen woorden (03 hex = 3 dec)
7687: CRC16 (cyclische redundantiecontrole)

Zoals in de bovenstaande query te zien is, kunnen we een bepaald aantal keren van een specifiek adres lezen. Functiecode 3 werd gebruikt voor de leesbewerking. Dit is voor het veld Holding Register. Als we van het veld Input Register zouden willen lezen, zou functiecode 4 nodig zijn. Deze query, verzonden via de seriële poort, wordt ontvangen door alle ontvangers op de lijn. Echter, alleen het apparaat met stationadres 17 zal reageren. Voordat het reageert, controleert station 17 de CRC-informatie, die in ons voorbeeld 7687 is. Het slave-apparaat weet dat de laatste twee bytes van alle ontvangen bytes de CRC zijn. Het berekent de bytes die niet de CRC zijn met behulp van de CRC-formule. Het vergelijkt de berekende CRC met de ontvangen CRC. Als deze hetzelfde zijn, begrijpt het dat de query foutloos is ontvangen, en als het stationadres ook hetzelfde is, zal het zeker reageren. Het geeft echter niet altijd het juiste antwoord. Als bijvoorbeeld een adresbereik wordt opgevraagd dat het niet heeft, zal het een foutmelding verzenden. Je kunt de foutmeldingen bekijken via deze link: https://www.simplymodbus.ca/exceptions.htm

Als alles volgens plan verloopt, zal het antwoord als volgt zijn:

11: Stationsadres (11 hex = 17 dec)
03: Functiecode 3 (Leescode voor Holding Registers)
06: Aantal gelezen bytes (3 registers x 2 bytes = 6 bytes)
AE41: Waarde uitlezen, adres 40108
5652: De gelezen waarde is adres 40109
4340: De gelezen waarde is adres 40110
49AD: CRC16 (cyclische redundantiecontrole)

Het masterapparaat voert, na ontvangst van bovenstaand antwoord, verschillende controles uit. Deze omvatten het controleren van het stationadres, de CRC-waarde en het aantal gelezen bytes. Op basis van deze controles wordt het antwoord geaccepteerd of afgewezen.

Andere informatie

  • Bij seriële poortcommunicatie worden gegevens niet altijd correct verzonden. Deze vervorming is vooral merkbaar bij veel harmonischen, lange kabels of meerdere apparaten. CRC (Correctional Correlation) is het enige bewijs dat de gegevens correct zijn gelezen.
  • Na de CRC-controle wordt het stationadres gecontroleerd. Zelfs als er meerdere apparaten met hetzelfde adres zijn, is communicatie hiermee niet mogelijk. Elk apparaat moet een uniek adres hebben. Aan apparaten kunnen adressen tussen 0 en 255 worden toegewezen. Veel producten uit het Verre Oosten werken niet, zelfs niet als 0 als adres is toegewezen.
  • Het maximale aantal 16-bits registers dat in één query kan worden uitgelezen, is 127. Dit komt doordat het maximale aantal te lezen bytes 254 is. In discrete vorm is het maximum 255 x 8 = 2040 bits.
  • Analoge tabellen zijn niet altijd 16-bits; ze kunnen ook 32-bits of 64-bits zijn. Alle communicatie verloopt via bytes. Master en Slave combineren deze echter intern. Zo kunnen 40001 en 40002 worden beschouwd als een 32-bits variabele. In dit geval speelt de parameter "woordvolgorde" een rol. Sommige apparaten gebruiken het eerste woord als de grootste waarde, terwijl andere het tweede woord als de grootste waarde gebruiken. De 32-bits waarde zou dan (40001 x 65536) + 40002 (eerste woord als grootste waarde) of 40001 + (40002 x 65536) = tweede woord als grootste waarde zijn.
  • De master stuurt een verzoek naar het slave-apparaat en wacht op een antwoord. Als er geen antwoord wordt ontvangen, moet de master het verzoek opnieuw versturen of doorgaan naar het volgende verzoek. Deze wachttijd wordt de time-out genoemd.
  • Wanneer de master een antwoord op zijn query ontvangt, stuurt hij niet direct de volgende query. Hij moet even wachten. Als hij niet wacht, worden het antwoord van het slave-apparaat en de nieuwe query van de master gecombineerd en mogelijk niet geaccepteerd door de slave-apparaten. Deze wachttijd wordt een vertraging genoemd.
  • Modbus RTU- en TCP/IP-query's zijn verschillend. Bij TCP/IP worden 6 bytes vóór de query toegevoegd en wordt de afsluitende CRC weggelaten. Zie hier voor meer informatie. https://www.simplymodbus.ca/TCP.htm
  • Voor het gebruik van andere Modbus-functiecodes https://www.simplymodbus.ca/FC01.htm Bezoek alstublieft.

Gerelateerde berichten

  • SOFT PLC

    Raspberry Pi PLC. Orange Pi PLC. Windows PLC. Computer PLC. Windows PLC. Soft PLC werkt met hoge prestaties op alle moderne besturingssystemen. Hiermee kunt u hardware zoals computers, Raspberry Pi's of Orange Pi's binnen enkele seconden omzetten in een volledig functionele PLC. Bovendien kunt u de GPIO's van het apparaat efficiënt gebruiken als digitale in-/uitgang, PWM, seriële poort en SPI. U kunt ook een USB-seriepoort op uw systeem aansluiten...

  • Functiebloktimergebruik

    In Fulmatic 7 PLC's kunnen statische commando's zoals Timer en Counter niet binnen functieblokken worden gebruikt. U moet uw eigen timers of tellers voor functieblokken maken. U kunt de voorbeeldcode hier downloaden. Het Speed ​​PLC-programma heeft 256 timers van 1 milliseconde. Dit aantal is onvoldoende voor grote projecten. U kunt het aantal timers verhogen door softwaretimers te maken. Functieblokken voeren dezelfde taak uit voor veel verschillende adressen…

  • PID

    PID-FORMULE Dit artikel legt uit hoe PID-regeling met een PLC en het PID-algoritme kan worden uitgevoerd. PID wordt in 80% van de automatiseringsprojecten gebruikt. PID is een formule; het berekende resultaat wordt naar de uitgang overgebracht door de formule met specifieke tijdsintervallen uit te voeren. Voor meer informatie over de formule kunt u Wikipedia raadplegen. In de PID-formule worden de proceswaarden verwerkt met behulp van de door de gebruiker gedefinieerde parameters P (proportioneel), I (integraal) en D (differentieel)...

  • Wat is een PLC?

    PLC is een afkorting voor "Programmable Logic Controller". In het Turks kan dit vertaald worden als "Programmeerbare Logische Controller". Het is essentieel voor industriële automatiseringssystemen. Er is vrijwel geen automatiseringsproject dat geen PLC gebruikt.

Bir yorum

Schrijf een reactie