- RS-485-sarjaliikenne
- RS-485 yhdistetään Arduinoon
- USB-RS-485-muunninmoduuli
- Yksinkertaisesti Modbus Master -ohjelmisto
- Tarvittavat työkalut
- Piirikaavio
- Arduino UNO -ohjelmointi RS-485 MODBUS Slavelle
- Arduino UNO: n testaaminen Rs485 Modbus Slavena
Modbus on sarjaliikenneprotokolla, jonka Modicon löysi vuonna 1979 ja jota käytetään tiedonsiirtoon sarjajohtojen yli teollisten elektronisten laitteiden välillä. RS-485 Modbus käyttää RS-485: tä siirtolinjoihin. On huomattava, että Modbus on ohjelmisto protokolla ja ei laitteiston protokollaa. Se on jaettu kahteen osaan, kuten Modbus Master ja Modbus Slave. RS-485 Modbus -verkossa on yksi isäntä ja 127 orjaa, joilla kullakin on yksilöllinen osoite välillä 1 - 127. Tässä MAX485 Arduino -projektissa käytämme Arduino Unoa orjana sarjaliikenteessä.
Modbusia käytetään enimmäkseen PLC: ssä (ohjelmoitavat logiikkaohjaimet). Tämän lisäksi Modbusia käytetään myös terveydenhuollossa, liikenteessä, koti-automaatiossa jne. Modbusilla on 255 toimintakoodia ja Modbusista on pääasiassa kolme suosittua versiota:
- MODBUS RTU
- MODBUS ASCII
- MODBUS / TCP
Mitä eroa on Modbus ASCII: lla ja Modbus RTU: lla?
Modbus RTU ja Modbus ASCII puhuvat samaa protokollaa. Ainoa ero on, että langan kautta lähetettävät tavut esitetään binäärinä RTU: n kanssa ja luettavina ASCII: na Modbus RTU: n kanssa. Modbus RTU: ta käytetään tässä opetusohjelmassa.
Tämä opetusohjelma koskee RS-485 Modbus -yhteyden käyttöä Arduino UNO: n kanssa orjana. Täällä asennamme Simply Modbus Master -ohjelmiston tietokoneeseen ja ohjaamme kahta LEDiä ja servomoottoria käyttämällä RS-485: ää siirtolinjana. Nämä LEDit ja servomoottori on kytketty Slave Arduinoon ja niitä ohjataan lähettämällä arvoja Master Modbus -ohjelmistolla. Koska tämä opetusohjelma käyttää RS-485: tä, on suositeltavaa käydä ensin RS485-sarjaliikenne läpi Arduino Unon ja Arduino Nanon välillä. RS485: tä voidaan käyttää myös muiden ohjainten kanssa sarjaliikenteessä:
- RS-485-sarjaliikenne Raspberry Pi: n ja Arduino UNO: n välillä
- Sarjaliikenne STM32F103C8: n ja Arduino UNO: n välillä RS-485: n avulla
Aloitetaan tutkimalla taustatietoa RS-485: stä ja Modbusista. Lue myös lisätietoja erilaisista sarjaliikenneprotokollista täältä.
RS-485-sarjaliikenne
RS-485 on asynkroninen sarjaliikenneprotokolla, joka ei vaadi kelloa. Se käyttää tekniikkaa, jota kutsutaan differentiaalisignaaliksi, binääridatan siirtämiseksi laitteesta toiseen.
Joten mikä tämä differentiaalinen signaalinsiirtomenetelmä on?
Differentiaalisignaalimenetelmä toimii luomalla differentiaalijännite käyttämällä positiivista ja negatiivista 5V. Se tarjoaa Half-Duplex- tiedonsiirron, kun käytetään kahta johtoa, ja Full-Duplex vaatii neljä neljä johtoa.
Käyttämällä tätä menetelmää:
- RS-485 tukee suurempaa tiedonsiirtonopeutta, enintään 30 Mbps.
- Se tarjoaa myös maksimaalisen tiedonsiirtoetäisyyden RS-232-protokollaan verrattuna. Se siirtää dataa enintään 1200 metriin asti.
- RS-485: n tärkein etu RS-232: een nähden on useita orjia yhden isännän kanssa, kun taas RS-232 tukee vain yhtä orjaa.
- RS-485-protokollaan voi olla kytketty enintään 32 laitetta.
- Toinen RS-485: n etu on immuuni kohinalle, koska ne käyttävät siirtämiseen differentiaalista signaalimenetelmää.
- RS-485 on nopeampi kuin I2C-protokolla.
RS-485 yhdistetään Arduinoon
RS-485-moduuli voidaan liittää mihin tahansa mikrokontrolleriin, jossa on sarjaportti. RS-485-moduulin käyttämiseksi mikrokontrollerien kanssa tarvitaan moduuli nimeltä 5V MAX485 TTL - RS485, joka perustuu Maxim MAX485 IC: hen, koska se sallii sarjaliikenteen 1200 metrin pitkällä etäisyydellä. Se on kaksisuuntainen ja puolisuuntainen ja sen tiedonsiirtonopeus on 2,5 Mbps. Tämä moduuli vaatii 5 V: n jännitteen.
RS-485: n kiinnitys:
PIN-nimi |
Nastan kuvaus |
VCC |
5 V |
A |
Ei-invertoiva vastaanottimen tulo Ei-käänteinen ohjaimen lähtö |
B |
Vastaanottimen tulon kääntäminen Käänteinen ohjaimen lähtö |
GND |
GND (0 V) |
R0 |
Vastaanotin ulos (RX-tappi) |
RE |
Vastaanottimen lähtö (LOW-Enable) |
DE |
Ohjaimen lähtö (HIGH-Enable) |
DI |
Ohjaimen tulo (TX-nasta) |
USB-RS-485-muunninmoduuli
Tämä on USB-RS485-muunninsovitinmoduuli, joka tukee WIN7-, XP-, Vista-, Linux-, Mac OS -käyttöjärjestelmää ja tarjoaa helppokäyttöisen RS485-käyttöliittymän käyttämällä tietokoneen COM-porttia . Tämä moduuli on plug and play -laite . Komentorakenteita ei ole, virtuaaliseen COM-porttiin lähetetty muunnetaan automaattisesti RS485: ksi ja päinvastoin. Moduuli on täysin virtalähde USB-väylästä. Joten, ei tarvita ulkoista virtalähdettä käyttöä varten.
Se näkyy Serial / COM-porttina, ja siihen pääsee sovelluksista tai hyperterminaalista. Tämä muunnin tarjoaa puoliduplex RS-485 -yhteyden. Tiedonsiirtonopeusalue on 75 - 115200 bps, enintään 6 Mbit / s.
Tämän laitteen käyttöä varten Internetissä on saatavana useita Modbus-ohjelmistoja. Tässä opetusohjelmassa käytetään yksinkertaisesti Modbus-ohjelmistoa.
Yksinkertaisesti Modbus Master -ohjelmisto
Modbus Master -ohjelmistosovellusta tarvitaan tietojen lähettämiseen Modbus RS-485 Arduino -laitteelle COM: n kautta.
Yksinkertaisesti Modbus Master on tiedonsiirtotestiohjelmisto. Voit ladata Simply Modbus Master -sovelluksen annetulta linkiltä ja oppia siitä lisää ohjelmistokäsikirjasta.
Ennen ohjelmiston käyttöä on tärkeää tutustua seuraaviin termeihin.
Orjan tunnus:
Jokaiselle verkon orjalle osoitetaan yksilöllinen yksikköosoite välillä 1 - 127. Kun isäntä pyytää tietoja, ensimmäinen tavu, jonka se lähettää, on Slave-osoite. Tällä tavoin kukin orja tietää ensimmäisen tavun jälkeen sivuuttavan viestin vai ei.
Toimintakoodi:
Toinen masterin lähettämä tavu on toimintokoodi. Tämä numero kertoo orjalle, mihin taulukkoon hän haluaa päästä, ja haluatko lukea taulukosta vai kirjoittaa taulukkoon.
Tuetut rekisteri-toimintokoodit:
Toimintokoodi |
Toiminta |
Taulukon nimi |
04 (04 kuusikulmainen) |
Lukea |
Analogiset tulorekisterit |
03 (03 kuusiokolo) |
Lukea |
Analogisten lähtöjen pitorekisterit |
06 (06 kuusikulmainen) |
Kirjoita yksi |
Analogisen tuotoksen omistusrekisteri |
16 (10-kuusikulmainen) |
Kirjoita useita |
Analogisten lähtöjen pitorekisterit |
Tuetut kelan toimintakoodit:
Toimintokoodi |
Toiminta |
Taulukon nimi |
02 (02 kuusiokolo) |
Lukea |
Erilliset tulokontaktit |
01 (01 kuusikulmainen) |
Lukea |
Diskreetti lähtö kelat |
05 (05 kuusikulmainen) |
Kirjoita yksi |
Diskreetti lähtökäämi |
15 (0F kuusiokolo) |
Kirjoita useita |
Diskreetti lähtö kelat |
CRC:
CRC tarkoittaa syklistä redundanssitarkistusta. Se on kaksi tavua, jotka lisätään jokaisen Modbus-sanoman loppuun virheen havaitsemiseksi.
Tarvittavat työkalut
Laitteisto
- Arduino UNO
- MAX-485 TTL - RS-485 -muunninmoduuli
- USB-RS-485-muunninmoduuli
- LED (2)
- 1k-vastus (2)
- 16x2 LCD-näyttö
- 10k potentiometri
- Servomoottori SG-90
Ohjelmisto
- Yksinkertaisesti Modbus Master
Piirikaavio
Piiriyhteys MAX-485 TTL - RS-485 -muunninmoduulin ja Arduino UNO: n välillä:
Arduino UNO |
MAX-485 TTL - RS-485 -muunninmoduuli |
0 (RX) |
RO |
1 (TX) |
DI |
4 |
DE & RE |
+ 5 V |
VCC |
GND |
GND |
Piiriliitäntä MAX-485 TTL-RS-485-moduulin ja USB-RS-485-muuntimen välillä:
MAX-485 TTL - RS-485 Muunninmoduuli |
USB - RS-485-moduuli Yhdistetty tietokoneeseen |
A |
A |
B |
B |
Piiriliitännät Arduino UNO: n ja 16x2 LCD-näytön välillä:
16x2 LCD |
Arduino UNO |
VSS |
GND |
VDD |
+ 5 V |
V0 |
Potentiometrin tappi 16x2 LCD: n kontrastin / kirkkauden säätämiseen |
RS |
8 |
RW |
GND |
E |
9 |
D4 |
10 |
D5 |
11 |
D6 |
12 |
D7 |
13 |
A |
+ 5 V |
K |
GND |
Piiriliitäntä 2 LEDin, servomoottorin ja Arduino UNO: n välillä:
Arduino UNO |
LED 1 |
LED2 |
Servo moottori |
2 |
Anodi 1k-vastuksen kautta |
- |
- |
5 |
- |
Anodi 1k-vastuksen kautta |
- |
6 |
- |
- |
PWM-tappi (oranssi) |
+ 5 V |
- |
- |
+ 5 V (PUNAINEN) |
GND |
Katodi GND |
Katodi GND |
GND (ruskea) |
Arduino UNO -ohjelmointi RS-485 MODBUS Slavelle
Arduino UNO on määritetty Modbus Slaveksi. Myös Arduino UNO on kiinnitetty kaksi lediä ja yksi servomoottori. Joten orja Arduinoa ohjataan Master Modbus -ohjelmistolla. Arduino UNO: n ja Modbus Master -ohjelmiston välinen tiedonsiirto toteutetaan käyttämällä RS-485-moduulia. Sen liittämiseen tietokoneeseen käytetään USB-RS-485 -muunninmoduulia. Ja Arduino UNO, jossa on MAX-485 TTL - RS-485 -muunninmoduuli, koko asetus näyttää tiedostolta seuraavasti:
Modbusin käytöstä Arduino UNO -kirjastossa
Lisää aluksi vaadittu kirjasto. ModbusRTU-kirjasto on tarkoitettu RS-485 Modbus -yhteyden käyttöön ja nestekidekirjasto LCD-näytön käyttämiseen Arduino UNO: n kanssa, ja servokirjasto on tarkoitettu Servo-moottorin käyttämiseen Arduino UNO: n kanssa.
#sisältää
Nyt Arduino-nastoihin 2 ja 5 liitetyt LED-anodinastat on määritelty LED1: ksi ja LED2: ksi.
#define led1 2 #define led2 5
Seuraavaksi objekti nestekideluokkaan pääsemiseksi ilmoitetaan LCD-nastoilla (RS, E, D4, D5, D6, D7), jotka on liitetty Arduino UNO: han.
LiquidCrystal lcd (8,9,10,11,12,13);
Kun nestekidenäyttö on valmis, alusta Servo-luokan servo-objekti. Alusta myös luokan Modbus väyläobjekti.
Servo-servo; Modbus-väylä;
Seuraavaksi modbus-tiedonsiirron arvojen tallentamiseksi taulukko ilmoitetaan kolmen arvon ollessa alustettu nollalla.
uint16_t modbus_array = {0,0,0};
In asennus toiminto, ensiksi LCD on asetettu 16x2 tilassa ja tervetullut viesti näytetään ja tyhjennetään.
lcd-alku (16,2); // Lcd asetettu 16x2-tilassa lcd.print ("RS-485 Modbus"); // Tervetuloviesti lcd.setCursor (0,1); lcd.print ("Arduino-orja"); viive (5000); lcd.clear ();
Tämän jälkeen LED1- ja LED2-nastat asetetaan lähtötapeiksi.
pinMode (led1, OUTPUT); pinMode (led2, OUTPUT);
Arduinon PWM-napaan 6 kytketty servopulssi-tappi on kiinnitetty.
servo.attach (6);
Seuraavat parametrit on asetettu Modbus-tiedonsiirtoa varten. Ensimmäinen '1' edustaa orjatunnusta, toinen '1' tarkoittaa, että se käyttää RS-485: tä tiedonsiirtoon ja '4' edustaa RS-485 DE&RE -tappia, joka on kytketty Arduino UNO: han.
väylä = Modbus (1,1,4);
Modbus-orja on asetettu 9600 baudinopeuteen.
Silmukka alkaa väyläkyselyn määritelmällä ja bus.poll (): ta käytetään arvon kirjoittamiseen ja vastaanottamiseen isäntä Modbusilta.
bus.poll (modbus_array, sizeof (modbus_array) / sizeof (modbus_array));
Tätä menetelmää käytetään tarkistamaan, onko sarjaportissa tietoja käytettävissä.
Jos sarjaportissa on tietoja saatavilla, Modbus RTU -kirjasto tarkistaa viestin (tarkistaa laitteen osoitteen, datan pituuden ja CRC: n) ja suorittaa tarvittavat toimet.
Esimerkiksi minkä tahansa arvon kirjoittamiseen tai lukemiseen isännältä, ModbusRTU: n on vastaanotettava allekirjoittamaton 16-bittinen kokonaislukumatriisi ja sen pituus Master Modbusilta. Tämä taulukko sisältää isännältä kirjoitetut tiedot.
Tässä opetusohjelmassa on kolme ryhmää LED1, LED2 ja servomoottorin kulmalle.
Kytke ensin päälle tai pois päältä LED1 modbus_array.
if (modbus_array == 0) // Riippuu Master Modbusin kirjoittaman modubus_array-arvon arvosta { digitalWrite (led1, LOW); // LED ei pala, jos 0 lcd.setCursor (0,0); lcd.print ("L1: POIS"); } else { digitalWrite (led1, HIGH); // LED palaa, jos arvo on muu kuin 0 lcd.setCursor (0,0); lcd.print ("L1: PÄÄLLÄ"); }
Kytke seuraavaksi päälle tai pois päältä LED2 modbus_array.
if (modbus_array == 0) // Riippuu Master Modbusin kirjoittaman modbus_array: n arvosta { digitalWrite (led2, LOW); // LED ei pala, jos 0 lcd.setCursor (8,0); lcd.print ("L2: POIS"); } else { digitalWrite (led2, HIGH); // LED palaa, jos arvo on muu kuin 0 lcd.setCursor (9,0); lcd.print ("L2: PÄÄLLÄ"); }
Servomoottorin kulman asettamiseksi seuraavaksi modbus_array ja arvo tulostetaan 16x2 LCD-näyttöön.
int pwm = modbus_array; servo.write (pwm); lcd.setCursor (0,1); lcd.print ("Servokulma:"); lcd.print (pwm); viive (200); lcd.clear ();
Tämä viimeistelee Arduino UNO: n ohjelmoinnin työskentelemään MODBUS Slave -palvelimena. Seuraava vaihe on sen testaaminen Modbus Slavena.
Arduino UNO: n testaaminen Rs485 Modbus Slavena
Kun piiriliitännät on tehty ja koodi on ladattu Arduino UNO: lle, on aika liittää USB RS-485-moduuliin sen tietokoneen kanssa, johon Simple Modbus Master -ohjelmisto on asennettu.
Avaa laitehallinta ja tarkista COM-portti tietokoneesi mukaan, johon USB-RS-485-moduuli on kytketty, ja avaa sen jälkeen Simply Modbus Master 8.1.1 -ohjelmisto.
1. Kun yksinkertaisesti Modbus-ohjelmisto on avattu, avaa nyt Kirjoita-vaihtoehto.
2. Kun Simply Modbus Master Write on avattu. Aseta parametrit
Tila RTU: ssa, COM-portti tietokoneesi mukaan (minun oli COM6), Baud 9600: lla, Databitit 8, Stop-bitti 1, Pariteetti Ei mitään ja Slave ID yhtenä.
3. Aseta sen jälkeen ensimmäinen rekisteri arvoksi 40001 ja kirjoitettavaksi arvoksi on 3 ja toimintokoodiksi 16 (Write Holding Register).
Tämän jälkeen kirjoita 1 - 40001 (LED1 palaa) ja 1 - 40002 (LED2 palaa) ja 90 - 40003 (servomoottorin kulma) ja napsauta sitten LÄHETÄ - painiketta.
Näet, että sekä LED-tila on päällä että servokulma 90 astetta.
4. Tämän jälkeen kirjoita 40001 arvoksi 1 ja 40002 arvoksi 0 ja 40003 arvoksi 180 ja napsauta LÄHETÄ-painiketta.
5. Kirjoita nyt 135 - 40003 ja 40001 0: ksi ja 40002: ksi 1.
Näin RS-485 Modbusia voidaan käyttää sarjaliikenteessä Arduino UNO: n kanssa orjana. Seuraavassa opetusohjelmassa käytämme Arduino Unoa masterina MODBUS-hienonnuksessa.
Löydä täydellinen koodi ja esittelyvideo alla.