pe1chy site logo
-

Modbus: Software

Deze pagina beschrijft een minimum Arduino Modbus systeem met 1 master en 1 slave. Het laat zien hoe data vanuit de master naar de slave gestuurd kan worden en daar schakelacties uitvoert. Ook laat het zien hoe data vanuit de slave bij de master kan worden uitgelezen en gebruikt. Het doel is om een idee te krijgen van de werkwijze en de mogelijkheden van Modbus.

Er wordt uitgegaan van enige basis ervaring met Arduino boards en programming met de Arduino IDE.

Deze kleine proefschakeling is opgebouwd met een master en een enkele slave. De benodigde code is te vinden in downloads Master example en Slave example. Met de voorbeeld software kunnen de acht LEDs in en uit geschakeld worden. Draai hiervoor aan de rotary-encoder tot het nummer van de gewenste LED verschijnt. Druk dan op de drukknop van de encoder om In of Uit te schakelen. De analoge spanning, afgegeven door de potentiometer bij de slave wordt ook op het display getoond, door aan de potentiometer te draaien zie je de waarde veranderen. De LED standen worden opgeslagen, na uitschakelen en later weer inschakelen wordt de laatste toestand weer hersteld.

De software maakt gebruik van de bestaande Arduino-libraries "SimpleModbusMasterV2rev2" en "SimpleModbusSlaveV10" geschreven door Juan Bester. Deze kunnen via de Arduino site worden gedownload. Het gebruik ervan is voor ervaren C/C++ gebruikers eenvoudig, voor een beginner is wat toelichting gewenst. Met name de setup van de master en slave registers is een beetje onduidelijk. Via de setup moet je aangeven hoeveel "slaven" je wilt aansluiten en hoeveel lees en schrijf registers voor elke slaaf moet worden gereserveerd. Verder moet je een baudrate kiezen en welke digitale pin wordt gebruikt voor de RS485 Tx/Rx omschakeling en eventueel een serial port nummer.

Master setup

master setup


  1. Gebruik de Modbus Master library
  2. Kies de gewenste baudrate, lagere baudrates zijn stabieler met lange kabels. De baudrate moet overeenstemmen met de slave baudrate
  3. Kies de Arduino digital output pin voor de Tx/Rx omschakeling van de RS485 bus. Elke vrije pin kan hiervoor worden gebruikt
  4. Kies het totale aantal registers. In het voorbeeld is dit twee (1 slave met 1 read en 1 write register)
  5. Kies het benodigde aantal packets. Voor elke slave het je een packet nodig voor de read registers en een packet voor de write registers
  6. Bepaal hoe de read en write registers gebruikt worden en tot welke slave ze behoren

De modbus Master en Slave libraries zijn o.a. te vinden op: Github.

Het totale aantal registers moet zo worden geteld: Als je bijvoorbeeld twee slaves wilt gebruiken, Slave 1 met drie schrijf registers en 1 lees register en Slave 2 met twee schrijf registers en vier lees registers dan is het totaal aantal registers 10 (vier voor slave 1 en zes voor slave 2).

Alle lees registers van een slave kunnen samen in 1 packet, voor alle schrijf registers is ook een packet nodig. In het bovenstaande voorbeeld zijn dus vier packets nodig.

In het onderstaande voorbeeld zie je een stukje uit de setup van de analoge ATV zender voor 23,6 en 3cm. Hier zijn zes packets gebruikt. De slaven hebben hier nummer 2, 3 en 4. Nummer 1 is niet in gebruik. Let ook op de getallen achter de blauwe letters: Het eerste nummer is het eerste register nummer van DIT packet, het tweede nummer is het totaal aantal registers in DIT packet. Het derde nummer tenslotte is is het eerste Master register nummer, deze nummering loopt door over alle slaven. in het commentaar (achter//) staat nog vermeld om welke master registers het gaat. Je ziet hier dat dit doornummert van regs[0] tot regs[13], een totaal van 14 registers.

master setup

Slave setup

slave setup


  1. Gebruik de Modbus Slave library
  2. Kies het gewenste slave adres. Doorgaans wordt er met 1 als eerste begonnen.
  3. Kies de Arduino digital output pin voor de Tx/Rx omschakeling van de RS485 bus. Elke vrije pin kan hiervoor worden gebruikt.
  4. Kies het totale aantal registers. Hier geen onderscheid tussen lees en schrijf registers).
  5. Kies de gewenste serial port, meestal serial port 0 (&Serial). Kies ook de baudrate, gelijk aan de baudrate van de master.

Hiermee is de Master en Slave setup compleet. Het werken met de modbus is verder vrij eenvoudig. In het "loop" deel van de arduino sketch dient de instructie "modbus_update();" minimaal een keer voor te komen. Voor de rest kan er eenvoudig naar schrijfregisers worden geschreven:

regs[0]=RELAYS;

Ook het uitlezen van leesregisters is simpel:

potmeter= regs[1];

Zie hiervoor de voorbeeld sketches Master_example en Slave_example in Downloads.