- RS-485 serijska komunikacija
- Povezivanje RS-485 s Arduinom
- Modul pretvarača USB u RS-485
- Jednostavno Modbus Master softver
- Potrebni alati
- Kružni dijagram
- Programiranje Arduino UNO za RS-485 MODBUS slave
- Testiranje Arduina UNO kao Rs485 Modbus slave
Modbus je protokol serijske komunikacije kojeg je Modicon otkrio 1979. godine i koristi se za prijenos podataka serijskim linijama između industrijskih elektroničkih uređaja. RS-485 Modbus koristi RS-485 za dalekovode. Treba napomenuti da je Modbus softverski protokol, a ne hardverski protokol. Podijeljen je u dva dijela poput Modbus Master i Modbus Slave. U RS-485 Modbus mreži postoji jedan glavni i 127 podređenih s jedinstvenom adresom od 1 do 127. U ovom projektu MAX485 Arduino, koristit ćemo Arduino Uno kao podređeni za serijsku komunikaciju.
Modbus se uglavnom koristi u PLC-ima (programabilni logički kontroleri). A osim toga, Modbus se također koristi u zdravstvu, prijevozu, automatizaciji kuće itd. Modbus ima 255 funkcijskih kodova i uglavnom postoje tri popularne verzije Modbusa:
- MODBUS RTU
- MODBUS ASCII
- MODBUS / TCP
Koja je razlika između Modbus ASCII i Modbus RTU?
Modbus RTU i Modbus ASCII razgovaraju o istom protokolu. Jedina je razlika što su bajtovi koji se prenose preko žice predstavljeni kao binarni s RTU-om i kao čitljivi ASCII s Modbus RTU-om. U ovom vodiču koristit će se Modbus RTU.
Ovaj vodič govori o korištenju RS-485 Modbus komunikacije s Arduino UNO-om kao slave. Ovdje instaliramo softver Simply Modbus Master na računalo i kontroliramo dvije LED i servo motor koristeći RS-485 kao dalekovod. Ove LED i servo motor povezani su sa Slave Arduino i kontrolirani slanjem vrijednosti pomoću Master Modbus softvera. Budući da ovaj vodič koristi RS-485, preporučuje se prvo proći kroz serijsku komunikaciju RS485 između Arduino Uno i Arduino Nano. RS485 se također može koristiti s drugim kontrolerima za serijsku komunikaciju:
- RS-485 serijska komunikacija između Raspberry Pi i Arduino UNO
- Serijska komunikacija između STM32F103C8 i Arduino UNO pomoću RS-485
Počnimo s istraživanjem neke pozadine o RS-485 i Modbusu. Ovdje također saznajte više o raznim protokolima serijske komunikacije.
RS-485 serijska komunikacija
RS-485 je asinkroni serijski komunikacijski protokol koji ne zahtijeva sat. Koristi tehniku koja se naziva diferencijalni signal za prijenos binarnih podataka s jednog uređaja na drugi.
Pa koja je to metoda diferencijalnog prijenosa signala ??
Metoda diferencijalnog signala djeluje stvaranjem diferencijalnog napona pomoću pozitivnih i negativnih 5V. Pruža Half-Duplex komunikaciju kada se koriste dvije žice, a Full-Duplex zahtijeva 4 četverožične žice.
Korištenjem ove metode:
- RS-485 podržava veću brzinu prijenosa podataka od maksimalno 30 Mb / s.
- Također pruža maksimalnu udaljenost prijenosa podataka u usporedbi s RS-232 protokolom. Prenosi podatke do maksimalno 1200 metara.
- Glavna prednost RS-485 u odnosu na RS-232 je višestruki slave s jednim glavnim upravljačem, dok RS-232 podržava samo jednog slave.
- Može imati najviše 32 uređaja spojena na RS-485 protokol.
- Sljedeća prednost RS-485 je imuna na buku jer za prijenos koriste metodu diferencijalnog signala.
- RS-485 je brži u usporedbi s I2C protokolom.
Povezivanje RS-485 s Arduinom
RS-485 modul može se povezati s bilo kojim mikrokontrolerom koji ima serijski priključak. Za upotrebu RS-485 modula s mikrokontrolerima potreban je modul nazvan 5V MAX485 TTL do RS485 koji se temelji na Maxim MAX485 IC jer omogućuje serijsku komunikaciju na velikim udaljenostima od 1200 metara. Dvosmjeran je i poludupleksan, a brzina prijenosa podataka je 2,5 Mbps. Ovaj modul zahtijeva napon od 5V.
Pin-Out RS-485:

|
Naziv pribadače |
Opis pribadače |
|
VCC |
5V |
|
A |
Neinvertirajući ulaz prijamnika Neinvertirajući izlaz vozača |
|
B |
Invertiranje ulaza prijemnika Invertiranje izlaza vozača |
|
GND |
GND (0 V) |
|
R0 |
Prijemnik izlaz (RX pin) |
|
PONOVNO |
Izlaz prijamnika (LOW-Enable) |
|
DE |
Izlaz za vozača (HIGH-Enable) |
|
DI |
Ulaz za vozača (TX pin) |
Modul pretvarača USB u RS-485

Ovo je modul za pretvarač USB u RS485 koji podržava WIN7, XP, Vista, Linux, Mac OS i pruža RS485 sučelje jednostavno za upotrebu pomoću COM porta u računalu . Ovaj modul je plug-and-play uređaj . Ne postoje naredbene strukture, sve što se pošalje na virtualni COM priključak automatski se pretvara u RS485 i obrnuto. Modul se potpuno napaja s USB sabirnice. Dakle, za rad nije potrebno vanjsko napajanje.
Prikazuje se kao serijski / COM priključak i dostupan mu je iz aplikacija ili hiper-terminala. Ovaj pretvarač pruža poludupleksnu RS-485 komunikaciju. Raspon brzine prijenosa je 75 bps do 115200 bps, maksimalno do 6 Mbps.
Za upotrebu ovog uređaja na Internetu je dostupan razni Modbus softver. U ovom se priručniku koristi softver nazvan Simply Modbus Software.
Jednostavno Modbus Master softver
Softverska aplikacija Modbus potrebna je za slanje podataka na slave Modbus RS-485 Arduino uređaj putem COM-a.
Jednostavno Modbus Master je softver za testiranje podatkovne komunikacije. Možete preuzeti Simply Modbus Master s dane veze i saznati više o njemu upućujući se na Softverski priručnik.
Prije upotrebe softvera važno je upoznati se sa sljedećim terminologijama.
ID slave:
Svakom pomoćnom uređaju u mreži dodjeljuje se jedinstvena adresa jedinice od 1 do 127. Kada glavni zahtjev zatraži podatke, prvi bajt koji pošalje je pomoćna adresa. Na taj način svaki rob nakon prvog bajta zna hoće li poruku ignorirati ili ne.
Šifra funkcije:
Drugi bajt koji je poslao Master je kôd funkcije. Ovaj broj govori robovu kojoj tablici treba pristupiti i hoće li čitati iz tablice ili pisati u nju.
Podržani kodovi funkcija registra:
|
Šifra funkcije |
Akcijski |
Naziv tablice |
|
04 (04 hex) |
Čitati |
Registri analognih ulaza |
|
03 (03 hex) |
Čitati |
Registri za držanje analognih izlaza |
|
06 (06 hex) |
Napiši pojedinačno |
Registar zadržavanja analognih izlaza |
|
16 (10 šesterokuta) |
Napišite višestruko |
Registri za držanje analognih izlaza |
Podržani kodovi funkcije zavojnice:
|
Šifra funkcije |
Akcijski |
Naziv tablice |
|
02 (02 hex) |
Čitati |
Diskretni ulazni kontakti |
|
01 (01 hex) |
Čitati |
Diskretni izlazni svici |
|
05 (05 hex) |
Napiši pojedinačno |
Diskretna izlazna zavojnica |
|
15 (0F šesterokuta) |
Napišite višestruko |
Diskretni izlazni svici |
CRC:
CRC je kratica za provjeru cikličkog viška. To su dva bajta dodana na kraj svake Modbus poruke za otkrivanje pogrešaka.
Potrebni alati
Hardver
- Arduino UNO
- MAX-485 TTL u RS-485 pretvarački modul
- Modul pretvarača USB u RS-485
- LED (2)
- Otpornik 1k (2)
- LCD zaslon od 16x2
- 10k potenciometar
- Servo motor SG-90
Softver
- Jednostavno Modbus Master
Kružni dijagram

Kružna veza između pretvaračkog modula MAX-485 TTL na RS-485 i Arduino UNO:
|
Arduino UNO |
MAX-485 TTL u RS-485 pretvarački modul |
|
0 (RX) |
RO |
|
1 (TX) |
DI |
|
4 |
DE & RE |
|
+ 5V |
VCC |
|
GND |
GND |
Kružna veza između modula MAX-485 TTL na RS-485 i pretvarača USB na RS-485:
|
MAX-485 TTL do RS-485 Modul pretvarača |
USB na RS-485 modul Povezano s računalom |
|
A |
A |
|
B |
B |
Kružne veze između Arduino UNO i LCD zaslona 16x2:
|
LCD 16x2 |
Arduino UNO |
|
VSS |
GND |
|
VDD |
+ 5V |
|
V0 |
Za upravljanje pinom potenciometra za kontrolu kontrasta / svjetline LCD-a 16x2 |
|
RS |
8 |
|
RW |
GND |
|
E |
9 |
|
D4 |
10 |
|
D5 |
11 |
|
D6 |
12 |
|
D7 |
13 |
|
A |
+ 5V |
|
K |
GND |
Spoj kruga između 2 LED, servo motora i Arduino UNO:
|
Arduino UNO |
LED1 |
LED2 |
Servo motor |
|
2 |
Anoda kroz 1k otpornik |
- |
- |
|
5 |
- |
Anoda kroz 1k otpornik |
- |
|
6 |
- |
- |
PWM iglica (narančasta) |
|
+ 5V |
- |
- |
+ 5V (CRVENA) |
|
GND |
Katoda GND |
Katoda GND |
GND (smeđa) |
Programiranje Arduino UNO za RS-485 MODBUS slave
Arduino UNO konfiguriran je kao Modbus Slave. Također, Arduino UNO je pričvršćen s dvije LED i jednim servo motorom. Dakle, podređenim Arduinom kontrolira se glavni softver Modbus. Komunikacija između Arduino UNO i Modbus Master softvera ostvaruje se korištenjem RS-485 modula. Za njegovo povezivanje s računalom koristi se pretvarački modul USB u RS-485. A Arduino UNO s pretvaračkim modulom MAX-485 TTL u RS-485, cjelokupna postavka izgledat će u sljedećoj datoteci:

Za upotrebu Modbusa u Arduino UNO, knjižnici
U početku uključite potrebnu knjižnicu. Biblioteka ModbusRTU namijenjena je korištenju RS-485 Modbus komunikacije, a biblioteka tekućih kristala je za upotrebu LCD-a s Arduino UNO, a biblioteka servo za upotrebu Servo motora s Arduino UNO.
#include
Sada su LED anodne iglice povezane s Arduino pinovima 2 i 5 definirane kao LED1 i LED2.
#define led1 2 #define led2 5
Dalje se objekt za pristup klasi Liquid Crystal deklarira s LCD pinovima (RS, E, D4, D5, D6, D7) koji su povezani s Arduino UNO.
LCD LiquidCrystal (8,9,10,11,12,13);
Kada je LCD završen, inicijalizirajte objekt servoa za klasu Servo. Također inicijalizirajte objekt sabirnice za klasu Modbus.
Servo servo; Modbus sabirnica;
Sljedeće za spremanje vrijednosti za Modbus komunikaciju deklarira se niz s tri vrijednosti inicijaliziranim nulom.
uint16_t modbus_array = {0,0,0};
U funkciji postavljanja , prvo je LCD postavljen u način 16x2, a poruka dobrodošlice se prikazuje i briše.
lcd.početak (16,2); // Lcd postavljen u modu 16x2 lcd.print ("RS-485 Modbus"); // Pozdravna poruka lcd.setCursor (0,1); lcd.print ("Arduino Slave"); kašnjenje (5000); lcd.clear ();
Nakon toga se LED1 i LED2 pinovi postavljaju kao izlazne pinove.
pinMode (led1, IZLAZ); pinMode (led2, IZLAZ);
Priključen je servo impulsni pin povezan s PWM pinom 6 Arduina.
servo.attach (6);
Sada su za Modbus komunikaciju postavljeni sljedeći parametri. Prva '1' predstavlja slave ID, druga '1' predstavlja da koristi RS-485 za prijenos podataka, a '4' predstavlja RS-485 DE&RE pin spojen na Arduino UNO.
sabirnica = Modbus (1,1,4);
Modbus slave je postavljen na 9600 baudrate.
Petlja započinje definicijom ankete sabirnice, a bus.poll () koristi se za upisivanje i primanje vrijednosti od glavnog Modbusa.
bus.poll (modbus_array, sizeof (modbus_array) / sizeof (modbus_array));
Ovom se metodom provjerava postoje li podaci na serijskom priključku.
Ako su na serijskom priključku dostupni podaci, Modbus RTU knjižnica provjerit će poruku (provjeriti adresu uređaja, duljinu podataka i CRC) i izvršiti potrebnu radnju.
Na primjer, za pisanje ili čitanje bilo koje vrijednosti iz master-a, ModbusRTU mora primiti nepotpisani 16-bitni čitav niz i njegovu duljinu od glavnog Modbusa. Ovaj niz nosi podatke koji su zapisani iz glavnog.
U ovom vodiču nalaze se tri niza za LED1, LED2 i kut servo motora.
Prvo se UKLJUČI ili ISKLJUČUJE LED1 modbus_array.
if (modbus_array == 0) // Ovisi o vrijednosti u modubus_array napisao Master Modbus { digitalWrite (led1, LOW); // LED ISKLJUČEN ako je 0 lcd.setCursor (0,0); lcd.print ("L1: OFF"); } else { digitalWrite (led1, HIGH); // LED uključen ako je vrijednost različita od 0 lcd.setCursor (0,0); lcd.print ("L1: ON"); }
Dalje za UKLJUČIVANJE ili ISKLJUČIVANJE koristi se LED2 modbus_array.
if (modbus_array == 0) // Ovisi o vrijednosti u modbus_array koji je napisao Master Modbus { digitalWrite (led2, LOW); // LED ISKLJUČEN ako je 0 lcd.setCursor (8,0); lcd.print ("L2: OFF"); } else { digitalWrite (led2, HIGH); // LED uključen ako vrijednost nije 0 lcd.setCursor (9,0); lcd.print ("L2: ON"); }
Dalje za postavljanje kuta servo motora koristi se modbus_array i vrijednost ispisuje se na LCD zaslonu 16x2.
int pwm = modbus_array; servo.write (pwm); lcd.setCursor (0,1); lcd.print ("Servo angle:"); lcd.ispis (pwm); kašnjenje (200); lcd.clear ();
Time je završeno programiranje Arduina UNO-a za rad kao MODBUS slave. Sljedeći korak bit će testiranje kao Modbus slave.
Testiranje Arduina UNO kao Rs485 Modbus slave
Nakon dovršetka kružnih veza i prijenosa koda na Arduino UNO, vrijeme je za povezivanje USB-a na RS-485 modul s računalom na kojem je instaliran softver Simple Modbus Master.
Otvorite upravitelj uređaja i provjerite COM priključak prema računalu na koje je spojen modul USB do RS-485, a nakon toga otvorite softver Simply Modbus Master 8.1.1.
1. Nakon što se otvori Simply Modbus Software , otvorite opciju Write.

2. Nakon što se otvori Simply Modbus Master Write. Postavite parametre
Način rada u RTU-u, COM port prema vašem računalu (moj je bio COM6), Baud na 9600, podatkovni bitovi 8, zaustavni bit 1, paritet nijedan i slave ID kao 1.

3. Nakon toga postavite prvi registar kao 40001 i vrijednosti za upisivanje su 3, a funkcijski kod kao 16 (Write Holding Register).
Nakon toga napišite 1 do 40001 (za LED1 uključen) i 1 do 40002 (za LED2 uključen) i 90 do 40003 (za kut servo motora), a zatim kliknite gumb POŠALJI.

Možete vidjeti kako je LED dioda UKLJUČENA, tako i kut servo-pogona pod 90 stupnjeva.
4. Nakon toga unesite 40001 kao 1 i 40002 kao 0 i 40003 kao 180 i kliknite gumb POŠALJI.

5. Sada pišemo 135 do 40003 i 40001 kao 0 i 40002 kao 1.

Na ovaj se način RS-485 Modbus može koristiti u serijskoj komunikaciji s Arduino UNO kao slave. U sljedećem uputstvu koristit ćemo Arduino Uno kao master u MODBUS kombinaciji.
Kompletni kod i demonstracijski video pronađite u nastavku.
