Arduino – ModBus RS485 RTU Slave

Het is mogelijk een arduino is te gebruiken als ModBus slave, met ModBus RS485 RTU kan je datalijnen gebruiken tot ca. 1200m, dat is erg interessant!

Wat je nodig hebt is een RS485 naar TTL converter om het differentiele signaal van de RS485 bus om te zetten naar TTL signalen voor de Arduino (en andersom).

Hardware RS485 Module Shield

BESTELLEN

Schema

Sluit de RS485 Module aan zoals hieronder aangegeven.

Of met een losse RS485 chip:

Ps. Op de ModBus A/B pinnen kan je een RS485 USB stick aansluiten en deze via een Raspberry Pi aansturen (ModBus master)


Scripts

Wat heb je nodig?

1) Arduino Modbus bibliotheek (smarmengol), ik heb na lang zoeken en uitproberen eindelijk een bibliotheek gevonden die goed werkt

Met een RS485 USB stick op de Raspberry Pi als Modbus master en een python script kan je de waarden uitlezen.

2) Python pymodbus bibliotheek

Gebruik Modbus Functie 4 (Read Input Registers) om de data uit te lezen

Testscript met ModBus data array

Dit testscript stelt een slave in op adres 12 met 9600 baud en vult register 0 t/m 15 met een getallenreeks:

Het resultaat:

Script Analoge ingang uitlezen

Hieronder een voorbeeld om 2 analoge ingangen van een arduino in de modbus data array te stoppen.

Het resultaat (A0 is hoog gemaakt):

Script Arduino LED schakelen

Met onderstaand voorbeeld kan je met modbus functie 6 (Write Register) data wegschrijven naar de ModBus array op de arduino, daarmee kan je bijvoorbeeld een LED schakelen.

Schema:

Schema met de MAX485 chip:

Script met “andresarmento” library:

Resultaat console (LED aan):

WriteRegisterResponse 1 => 1