Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Modbus op Arduino onder de knie: Stapsgewijze handleiding

Onderdelen en benodigdheden

Arduino UNO 1
Professioneel RS422 / RS485 Shield voor Arduino 1
USB-naar-RS485 converter 1
Breadboard (standaard) 1
LED (standaard) 1
Weerstand 10k ohm 1
Weerstand 221 ohm 1
Draadbruggen (standaard) 1
SparkFun Drukknopschakelaar 12mm 1

Apps en online diensten

  • Arduino IDE
  • Modbustester

Over dit project

Modbus, een seriële communicatiestandaard, is uitgegroeid tot een de facto standaardprotocol en is nu een veelgebruikte manier om industriële elektronische apparaten te koppelen. In Modbus RTU en Modbus ASCII wordt RS485 gebruikt als fysieke laag. Het is mogelijk om een Arduino als slave (en met enkele beperkingen ook als master) in Modbus-toepassingen te gebruiken, maar een RS485-interface is vereist. Onze RS422/RS485 Shield is een volledig galvanisch geïsoleerde seriële communicatieshield ontworpen voor gebruik met de Arduino UNO en andere compatibele boards zoals de Arduino 101, STM Nucleo, etc. Deze shield is de ideale keuze voor dergelijke toepassingen.

Het doel van dit document is te laten zien hoe je samen met een Arduino UNO een eenvoudig Modbus-slave-apparaat kunt bouwen. We gebruiken een pc als Modbus-master.

Hulpmiddelen en materialen

  • Arduino UNO
  • RS485 Shield voor Arduino
  • Een willekeurige RS485-USB-adapter voor de pc-verbinding (of een goedkopere variant)

Optioneel:

  • Breadboard
  • Drukknop
  • Rode LED
  • 220 Ohm weerstand
  • 10k Weerstand
  • Draadbruggen

Software

  • Arduino IDE
  • Modbustester

Aansluiten RS485

De aansluiting is heel eenvoudig. Je hoeft alleen de A- en B-klemmen van de shield te verbinden met de A- en B-lijnen van het Modbus-systeem. De Y- en Z-klemmen worden voor dit type toepassing niet gebruikt. Voor lange afstanden wordt aangeraden gedraaide paren voor A en B te gebruiken.

Aansluiten Arduino (Optioneel)

Het is raadzaam om een LED en een knop aan de Arduino toe te voegen om effecten van de Modbus-communicatie zichtbaar te maken. Dit is optioneel en niet strikt noodzakelijk.

DIP-schakelaar instellingen

De RS422/RS485 Shield wordt geleverd met 3 DIP-schakelaarblokken. Je moet deze DIP-schakelaars voor Modbus instellen zoals in de afbeelding hieronder getoond.

  • Schakelaar 1: 1-OFF, 2-ON, 3-ON, 4-OFF
  • Schakelaar 2: 1-OFF, 2-OFF, 3-ON, 4-ON
  • Schakelaar 3: 1-OFF of ON*, 2-OFF, 3-OFF, 4-OFF

*Afhankelijk van de positie van de RS422/RS485 Shield in de Modbus-lijn moet je de afsluitweerstand AN of UIT zetten. Zet de weerstand alleen op ON als de Shield aan één uiteinde van de buslijn zit. In alle andere gevallen zet je de afsluitweerstand UIT.

Jumper-instellingen

Op de shield vind je 3 verschillende jumper-gebieden. Heel belangrijk is jumper JP1 voor de voedingsspanning. De Arduino UNO werkt intern met 5V. Je moet deze jumper op de 5V-stand zetten (voor 3.3V-boards zoals de Arduino 101 op de 3.3V-stand).

Verder zet je de jumpers voor de communicatiepoorten in de linkerbovenhoek zoals in de bovenstaande afbeelding. De interne UART op poort 0 en 1 wordt dan verbonden met de RS485-interface van de shield.

Tot slot moeten we de jumper voor de RX/TX-besturingspoort instellen. We gebruiken deze jumper niet, omdat de automatische RX/TX-omschakeling is geconfigureerd.

Modbus Tester-software installeren op pc

We gebruiken in dit voorbeeld de pc als Modbus-master. Je moet Modbustester downloaden. Pak het zip-archief uit in een nieuwe map op je harde schijf. Open de software en wijzig de gemarkeerde velden zoals in de afbeelding hieronder. Je moet de USB-RS485-adapter voordat je de software start aansluiten. Kies in Modbustester de juiste COM-poort voor deze adapter.

Arduino-software

Laad de firmware in de Arduino IDE om te compileren en te programmeren.

Je werk testen

Nu is het tijd om je werk te testen!

Je kunt op de Read-knop in Modbustester drukken. Dit commando leest 8 bytes uit het geheugen van ons nieuwe slave-apparaat. In adres 400008 vind je de status van de knop. De adressen 400001 tot 400006 bevatten de waarden van de ADC-poorten.

Met de Write-knop kun je registers in de slave manipuleren. Je kunt in adres 400007 een 0 of 1 invoeren om de LED AN of UIT te schakelen.

Code

Voorbeeldcode voor Arduino UNO

/* Testprogramma voor Arduino RS422/RS485 Shield
 * Versie 1.0
 * Copyright (C) 2018 Hartmut Wendt www.zihatec.de
 * (gebaseerd op bronnen van https://github.com/angeloc/simplemodbusng)
 * ...
 */
#include <SimpleModbusSlave.h>
#define ledPin 12 // onboard led
#define buttonPin 7 // drukknop

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(9600, 1, 6, TOTAL_REGS_SIZE, 0);
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
}

void loop() {
  holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs);
  for (byte i = 0; i < 6; i++) {
    holdingRegs[i] = analogRead(i);
    delayMicroseconds(50);
  }
  byte buttonState = digitalRead(buttonPin);
  holdingRegs[BUTTON_STATE] = buttonState;
  byte ledState = holdingRegs[LED_STATE];
  if (ledState) {
    digitalWrite(ledPin, HIGH);
  } else {
    holdingRegs[LED_STATE] = 0;
  }
}

Schema's

Aansluiting van enkele testcomponenten aan de Arduino

Productieproces

  1. LED helderheid regelen met PWM via drukknop op Arduino Mega
  2. Bouw een real-time gyroscoop-spel met Arduino Nano & MPU-6050 sensor
  3. Unopad: Naadloze Arduino MIDI-controller voor Ableton Live
  4. Een eenvoudige obstakelsensor bouwen met Arduino – IR LED & Fotodiodo Tutorial
  5. Find Me: Slimme Item Locator met Arduino en Bluetooth
  6. Bouw een Aangepaste Arduino Joystick Stuurwiel voor Gaming
  7. Thermistor Gebruik Gemaakt Eenvoudig: Stap-voor-Stap Arduino Handleiding
  8. Maak Muzikale Tonen met Arduino: Stapsgewijze Handleiding
  9. Arduino Verbinden met NMEA‑0183: Stap‑voor‑Stap Handleiding
  10. Automatische deur met Arduino en ultrasone sensor bouwen
  11. C# Queues Beheersen: Enqueue, Dequeue en First-In-First-Out Operaties Uitgelegd