Hoe kunnen we helpen?

Print

Subroutine: Modbus Master RTU voor lezen van houdingsregisters, lezen van ingangsregisters en schrijven van houdingsregisters

 

Deze Modbus Master-subroutine is erg handig als je onze ongelooflijke ACE PLC wilt gebruiken voor lezen of schrijven in Modbus RTU-slaveapparaten.

Als je de ACE PLC wilt verbinden met een frequentieregelaar, een intelligente sensor, een eenvoudig display, I/O op afstand of zelfs een ACE PLC!

Met deze subroutine kun je:

  • Holdingregisters lezen – Functiecode 03
  • Ingangsregisters lezen – Functiecode 04
  • Holdingregisters schrijven – Functiecode 06

Je kunt de subroutine met het bijbehorende voorbeeld hierdownloaden .

Let op, deze Modbus Master is niet zo snel als een native Modbus Master. Bekijk deze video om een idee te krijgen.
We peilen 8 Modbus slave temperatuursensoren op het RS485 netwerk. (ACE-1430)

Hoe werkt de Modbus Master subroutine?

Je ACE PLC moet worden geconfigureerd als Type = “Custom” seriële poort.

Importeer in je project de 2 subroutines via de knop “Add Subroutine” (Subroutine toevoegen):

  • MBCRC16
  • ModbusMaster

Definieer je Modbus-verzoeken om gegevens te lezen en te schrijven. Het is erg belangrijk om eerst de data te lezen en dan de andere te schrijven.

In ons voorbeeld willen we deze Modbus-registers lezen en schrijven:

Nummer ” n ” van de Modbus Request Slave-ID van het Modbus-slaveapparaat
SlaveID[n]
Lezen of schrijven in het register ?
Functiecode[n]
Adres in het Modbus-register ?
Register[n]
[0] 01 03 (Holdingregisters lezen) 00
[1] 01 03 (Holdingregisters lezen) 01
[2] 01 06 (Holdingregisters schrijven) 02 (In ons voorbeeld schrijven we 65432)
[3] 01 06 (Holdingregisters schrijven) 03 (We schrijven in de tag “ValueMove” in ons voorbeeld)

We gebruiken een array van “n” elementen voor elke parameter

Stel deze tags in:

  • FunctionCode, ui8, is array, 16 (16 als je maximaal 16 waarden in het Modus-register wilt lezen/schrijven)
  • SlaveID, ui8, is matrix, 16
  • Register, ui16, is matrix, 16
  • Gegevens, ui16, is matrix, 16

Als je bijvoorbeeld maar 3 registers hebt om te lezen/schrijven, kun je de array aanpassen van 16 naar 3.

 

Nu kun je je array aanvullen met de 3 waarden voor elk Modbus-verzoek:

We beginnen met n = 0

  • SlaveID[0] = 01
  • Functiecode[0] = 03
  • Register[0] = 00

en volgende… n = 1

  • SlaveID[1] = 01
  • Functiecode[1] = 03
  • Register[1] = 01

< ! > Belangrijk: De laatste regel moet zijn SlaveID[n 1] = 00, in ons voorbeeld SlaveID[4] = 00
Dit is om de Modbus Master subroutine te waarschuwen dat er geen registers meer zijn om te lezen! Dit is het einde! We beginnen weer bij het begin (n=0)!

 

En voeg nu de ModbusMaster subroutine toe!

Je moet deze subroutine bij elke PLC-cyclus aanroepen.

 

U haalt uw gegevens op in de Data[n] matrix.

Als je de write-functie gebruikt, vergeet dan niet de waarde in te voeren. In ons voorbeeld schrijven we 65432 in Data [2] en de waarde van een andere “ValueMove”-tag in Data [3].