Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Modbus auf Arduino meistern: Schritt-für-Schritt-Anleitung

Komponenten und Zubehör

Arduino UNO 1
Professionelles RS422/RS485 Shield für Arduino 1
USB-zu-RS485-Konverter 1
Steckbrett (Breadboard) 1
LED (beliebig) 1
Widerstand 10 kΩ 1
Widerstand 220 Ω 1
Jumper-Kabel 1
Taster (12 mm) 1

Software und Online-Dienste

Projektbeschreibung

Modbus ist ein serieller Kommunikationsstandard, der sich als De-facto-Protokoll für die Vernetzung industrieller elektronischer Geräte etabliert hat. Bei Modbus RTU und Modbus ASCII dient RS485 als physikalische Übertragungsschicht. Ein Arduino kann als Modbus-Slave (und mit Einschränkungen auch als Master) eingesetzt werden, benötigt dafür jedoch ein RS485-Interface. Unser RS422/RS485-Shield ist ein vollständig galvanisch isoliertes Kommunikations-Shield, das für Arduino UNO und kompatible Boards (Arduino 101, STM Nucleo u. a.) konzipiert ist – die ideale Wahl für solche Anwendungen.

Ziel dieser Anleitung ist es, gemeinsam mit einem Arduino UNO ein einfaches Modbus-Slave-Gerät zu realisieren. Als Modbus-Master dient ein PC.

Werkzeuge & Materialien

Optional:

Software:

RS485-Verdrahtung

Die Verdrahtung ist sehr einfach: Verbinden Sie lediglich die A- und B-Klemmen des Shields mit den A- und B-Leitungen des Modbus-Systems. Die Y- und Z-Klemmen werden für diese Anwendung nicht benötigt. Für lange Strecken wird die Verwendung verdrillter Paare für A und B empfohlen.

Arduino-Verdrahtung (optional)

Es empfiehlt sich, eine LED und einen Taster am Arduino anzuschließen, um Auswirkungen der Modbus-Kommunikation sichtbar zu machen. Dies ist optional und nicht zwingend erforderlich.

DIP-Schalter-Einstellungen

Das RS422/RS485-Shield verfügt über drei DIP-Schalterbänke. Für Modbus müssen diese wie folgt eingestellt werden:

*Abhängig von der Position des Shields im Modbus-Strang muss der Abschlusswiderstand ein- oder ausgeschaltet werden. Schalten Sie den Widerstand nur auf ON, wenn das Shield an einem Ende der Busleitung sitzt. In allen anderen Fällen OFF.

Jumper-Einstellungen

Auf dem Shield finden sich drei Jumper-Bereiche. Besonders wichtig ist Jumper JP1 für die Versorgungsspannung. Der Arduino UNO arbeitet intern mit 5 V; setzen Sie diesen Jumper daher auf die 5-V-Position (bei 3,3-V-Boards wie Arduino 101 auf 3,3 V).

Setzen Sie die Jumper für die Kommunikationsports (obere linke Ecke) wie im Bild gezeigt. Damit wird der interne UART (Pins 0 und 1) mit dem RS485-Interface des Shields verbunden.

Zuletzt muss der Jumper für die RX/TX-Steuerung gesetzt werden. Wir nutzen ihn nicht, da die automatische RX/TX-Umschaltung konfiguriert ist.

ModbusTester-Software auf dem PC installieren

Wir nutzen den PC als Modbus-Master. Laden Sie ModbusTester herunter, entpacken Sie das ZIP-Archiv in ein neues Verzeichnis und starten Sie die Software. Konfigurieren Sie die markierten Felder wie im Screenshot gezeigt. Wichtig: Schließen Sie den USB-RS485-Adapter vor dem Start an und wählen Sie in ModbusTester den richtigen COM-Port für diesen Adapter.

Arduino-Software

Laden Sie die Firmware in die Arduino IDE, kompilieren und flashen Sie sie auf den Arduino.

Funktionstest

Jetzt testen Sie Ihre Arbeit! Drücken Sie in ModbusTester die Read-Taste. Dieser Befehl liest 8 Bytes aus dem Speicher unseres Slave-Geräts. In Adresse 400008 finden Sie den Tasterstatus. Die Adressen 400001–400006 enthalten die ADC-Portwerte.

Mit der Write-Taste können Sie Register im Slave beschreiben. Geben Sie in Adresse 400007 eine 0 oder 1 ein, um die LED ein- oder auszuschalten.

Quellcode

Beispielcode für Arduino UNO

/* Testprogramm für Arduino RS422/RS485 Shield
 * Version 1.0
 * Copyright (C) 2018 Hartmut Wendt www.zihatec.de
 * (basiert auf Quellen von https://github.com/angeloc/simplemodbusng)
 * Lizenz: GNU GPL v3
 */
#include <SimpleModbusSlave.h>

#define ledPin 12       // Onboard-LED
#define buttonPin 7     // Taster

// Register-Layout des Slaves (9 Holding-Register)
// 6 Analogeingänge, 1 Taster, 1 digitaler Ausgang, 1 Fehlerzähler
enum {
  ADC0, ADC1, ADC2, ADC3, ADC4, ADC5,
  LED_STATE, BUTTON_STATE, TOTAL_ERRORS,
  TOTAL_REGS_SIZE
};

unsigned int holdingRegs[TOTAL_REGS_SIZE];

void setup() {
  // modbus_configure(baudrate, slaveID, txEnablePin, regCount, lowLatency)
  // txEnablePin = 6 (Pin 6 steuert RS485-Treiber)
  modbus_configure(9600, 1, 6, TOTAL_REGS_SIZE, 0);
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
}

void loop() {
  // modbus_update() aktualisiert holdingRegs und prüft Kommunikation
  holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs);

  // Analogwerte einlesen (6 Kanäle)
  for (byte i = 0; i < 6; i++) {
    holdingRegs[i] = analogRead(i);
    delayMicroseconds(50);
  }

  // Tasterstatus in Register schreiben
  byte buttonState = digitalRead(buttonPin);
  holdingRegs[BUTTON_STATE] = buttonState;

  // LED-Register auswerten und LED steuern (via Funktion 16)
  byte ledState = holdingRegs[LED_STATE];
  if (ledState) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
    holdingRegs[LED_STATE] = 0;
  }
}

Schaltplan

Verdrahtung der Testkomponenten am Arduino (siehe Bild im Originalprojekt).

Herstellungsprozess

  1. C# Queues meistern: Enqueue, Dequeue und First-In-First-Out Operationen erklärt
  2. LED-Helligkeit per PWM und Taster am Arduino Mega steuern
  3. Echtzeit-Gyroskop-Spiel mit Arduino Nano & MPU-6050
  4. Unopad: Nahtloser Arduino MIDI-Controller für Ableton Live
  5. Einfachen Hindernissensor mit Arduino bauen – IR-LED & Photodiode Tutorial
  6. Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
  7. DIY Arduino Lenkrad / Joystick für Rennspiele – USB-HID-Umbau
  8. Thermistor (NTC) einfach nutzen: Schritt-für-Schritt Arduino-Anleitung
  9. Musikalische Töne mit Arduino erzeugen: Schritt-für-Schritt-Anleitung
  10. Arduino an NMEA‑0183 anschließen: Schritt-für-Schritt-Anleitung