- RS-485 sērijas sakari
- RS-485 savienošana ar Arduino
- USB uz RS-485 pārveidotāja modulis
- Vienkārši Modbus Master programmatūra
- Nepieciešami rīki
- Ķēdes shēma
- Arduino UNO programmēšana RS-485 MODBUS Slave
- Pārbauda Arduino UNO kā Rs485 Modbus Slave
Modbus ir sērijveida sakaru protokols, kuru Modicon atklāja 1979. gadā, un to izmanto datu pārraidei pa sērijas līnijām starp rūpnieciskām elektroniskām ierīcēm. RS-485 Modbus pārvades līnijām izmanto RS-485. Jāatzīmē, ka Modbus ir programmatūras protokols, un nevis aparatūras protokols. Tas ir sadalīts divās daļās, piemēram, Modbus Master un Modbus Slave. RS-485 Modbus tīklā ir viens galvenais un 127 vergi, kuriem katram ir unikāla adrese no 1 līdz 127. Šajā MAX485 Arduino projektā sērijveida saziņai izmantosim Arduino Uno kā vergu.
Modbus pārsvarā izmanto PLC (Programmable Logic Controllers). Bez tam, Modbus izmanto arī veselības aprūpē, transportā, mājas automatizācijā utt. Modbus ir 255 funkciju kodi, un galvenokārt ir trīs populāras Modbus versijas:
- MODBUS RTU
- MODBUS ASCII
- MODBUS / TCP
Kāda ir atšķirība starp Modbus ASCII un Modbus RTU?
Modbus RTU un Modbus ASCII runā par to pašu protokolu. Vienīgā atšķirība ir tā, ka pa vadu pārsūtītie baiti tiek parādīti kā bināri ar RTU un kā lasāmi ASCII ar Modbus RTU. Šajā apmācībā tiks izmantots Modbus RTU.
Šī apmācība ir par RS-485 Modbus sakaru izmantošanu ar Arduino UNO kā vergu. Šeit datorā instalējam programmatūru Simply Modbus Master un kontrolējam divus gaismas diodes un servomotoru, izmantojot pārraides līniju RS-485. Šie gaismas diodes un servomotors ir savienoti ar Slave Arduino un tiek kontrolēti, nosūtot vērtības, izmantojot Master Modbus programmatūru. Tā kā šajā apmācībā tiek izmantots RS-485, ieteicams vispirms iziet cauri RS485 sērijas komunikācijai starp Arduino Uno un Arduino Nano. RS485 var izmantot arī ar citiem kontrolieriem sērijveida saziņai:
- RS-485 Sērijas komunikācija starp Raspberry Pi un Arduino UNO
- Sērijas komunikācija starp STM32F103C8 un Arduino UNO, izmantojot RS-485
Sāksim, izpētot kādu priekšstatu par RS-485 un Modbus. Šeit arī uzziniet vairāk par dažādiem sērijas sakaru protokoliem.
RS-485 sērijas sakari
RS-485 ir asinhronais sērijveida sakaru protokols, kuram nav nepieciešams pulkstenis. Lai bināros datus pārsūtītu no vienas ierīces uz otru, tiek izmantota tehnika, ko sauc par diferenciālo signālu.
Kāda tad ir šī diferenciālā signāla pārsūtīšanas metode ??
Diferenciālā signāla metode darbojas, izveidojot diferenciālo spriegumu, izmantojot pozitīvu un negatīvu 5V. Izmantojot divus vadus, tas nodrošina pusdupleksu komunikāciju, un pilndupleksam ir nepieciešami 4 četrstūru vadi.
Izmantojot šo metodi:
- RS-485 atbalsta lielāku datu pārraides ātrumu līdz 30Mbps.
- Tas nodrošina arī maksimālu datu pārraides attālumu, salīdzinot ar RS-232 protokolu. Tas pārsūta datus līdz maksimāli 1200 metriem.
- RS-485 galvenā priekšrocība salīdzinājumā ar RS-232 ir vairāku vergu pakāpe ar vienu Master, savukārt RS-232 atbalsta tikai vienu vergu.
- Var būt ne vairāk kā 32 ierīces, kas savienotas ar RS-485 protokolu.
- Vēl viena RS-485 priekšrocība ir imūna pret troksni, jo to pārsūtīšanai tiek izmantota diferenciālā signāla metode.
- RS-485 ir ātrāks nekā I2C protokols.
RS-485 savienošana ar Arduino
RS-485 moduli var pieslēgt jebkuram mikrokontrollerim ar seriālo portu. Lai izmantotu moduli RS-485 ar mikrokontrolleriem, ir nepieciešams modulis ar nosaukumu 5V MAX485 TTL līdz RS485, kura pamatā ir Maxim MAX485 IC, jo tas ļauj sērijveida sakarus veikt lielā 1200 metru attālumā. Tas ir divvirzienu un pusduplekss, un tā datu pārraides ātrums ir 2,5 Mbps. Šim modulim nepieciešams 5V spriegums.
RS-485 piespraude:
Piespraudes nosaukums |
Piespraudes apraksts |
VCC |
5V |
A |
Neinvertējoša uztvērēja ievade Neinvertējoša draivera izeja |
B |
Uztvērēja ievades invertēšana Apgriezt draivera izvadi |
GND |
GND (0V) |
R0 |
Uztvērēja izeja (RX tapa) |
RE |
Uztvērēja izeja (LOW-Enable) |
DE |
Vadītāja izeja (HIGH-Enable) |
DI |
Vadītāja ievade (TX tapa) |
USB uz RS-485 pārveidotāja modulis
Šis ir USB - RS485 pārveidotāja adaptera modulis, kas atbalsta WIN7, XP, Vista, Linux, Mac OS un nodrošina ērti lietojamu RS485 saskarni, izmantojot datorā COM portu . Šis modulis ir plug-and-play ierīce . Komandu struktūru nav, viss, kas tiek nosūtīts uz virtuālo COM portu, tiek automātiski pārveidots par RS485 un otrādi. Modulis ir pilnībā pašpietiekams no USB kopnes. Tātad darbībai nav nepieciešama ārēja barošanas avota.
Tas tiek parādīts kā sērijas / COM ports, un tam var piekļūt no lietojumprogrammām vai hipertermināla. Šis pārveidotājs nodrošina pusdupleksu RS-485 komunikāciju. Bauda ātruma diapazons ir no 75 līdz 115200 bps, maksimālais - līdz 6 Mbps.
Lai izmantotu šo ierīci, internetā ir pieejama dažāda Modbus programmatūra. Šajā apmācībā tiek izmantota programmatūra ar nosaukumu Simply Modbus Software.
Vienkārši Modbus Master programmatūra
Programmatūra Modbus Master ir nepieciešama, lai datus nosūtītu uz vergu Modbus RS-485 Arduino ierīci, izmantojot COM.
Vienkārši Modbus Master ir datu komunikācijas testa programmatūra. Jūs varat lejupielādēt Simply Modbus Master no norādītās saites un uzzināt vairāk par to, izmantojot programmatūras rokasgrāmatu.
Pirms programmatūras izmantošanas ir svarīgi iepazīties ar šādām terminoloģijām.
Vergu ID:
Katram tīkla vergam tiek piešķirta unikāla vienības adrese no 1 līdz 127. Kad galvenais pieprasa datus, pirmais baits, ko tas nosūta, ir Slave adrese. Tādējādi katrs vergs pēc pirmā baita zina, vai ignorēt ziņojumu.
Funkcijas kods:
Otrais baits, ko sūta Master, ir Funkcijas kods. Šis skaitlis vergam norāda, kurai tabulai piekļūt un vai no galda lasīt vai rakstīt.
Atbalstītie reģistra funkciju kodi:
Funkciju kods |
Darbība |
Tabulas nosaukums |
04 (04 sešstūra) |
Lasīt |
Analogu ievades reģistri |
03 (03 sešstūra) |
Lasīt |
Analogās izejas turēšanas reģistri |
06 (06 sešstūra) |
Rakstiet vienu |
Analogās izejas turēšanas reģistrs |
16 (10 sešstūru) |
Rakstīt vairākus |
Analogās izejas turēšanas reģistri |
Atbalstītie spoles funkciju kodi:
Funkciju kods |
Darbība |
Tabulas nosaukums |
02 (02 sešstūra) |
Lasīt |
Diskrētie ievades kontakti |
01 (01 sešstūrains) |
Lasīt |
Diskrētās izvades spoles |
05 (05 sešstūra) |
Rakstiet vienu |
Diskrētā izvades spole |
15 (0F sešstūra) |
Rakstīt vairākus |
Diskrētās izvades spoles |
CRC:
CRC apzīmē cikliskās atlaišanas pārbaudi. Tas ir divi baiti, kas pievienoti katra Modbus ziņojuma beigām kļūdu noteikšanai.
Nepieciešami rīki
Aparatūra
- Arduino UNO
- MAX-485 TTL uz RS-485 pārveidotāja modulis
- USB uz RS-485 pārveidotāja modulis
- LED (2)
- 1k rezistors (2)
- 16x2 LCD displejs
- 10k potenciometrs
- Servomotors SG-90
Programmatūra
- Vienkārši Modbus Master
Ķēdes shēma
Ķēdes savienojums starp MAX-485 TTL uz RS-485 pārveidotāja moduli un Arduino UNO:
Arduino UNO |
MAX-485 TTL uz RS-485 pārveidotāja modulis |
0 (RX) |
RO |
1 (TX) |
DI |
4 |
DE & RE |
+ 5V |
VCC |
GND |
GND |
Ķēdes savienojums starp MAX-485 TTL uz RS-485 moduli un USB uz RS-485 pārveidotāju:
No MAX-485 TTL līdz RS-485 Pārveidotāja modulis |
USB uz RS-485 modulis Savienots ar datoru |
A |
A |
B |
B |
Kontūru savienojumi starp Arduino UNO un 16x2 LCD displeju:
16x2 LCD |
Arduino UNO |
VSS |
GND |
VDD |
+ 5V |
V0 |
Lai kontrolētu potenciometra tapu 16x2 LCD kontrasta / spilgtuma kontrolei |
RS |
8 |
RW |
GND |
E |
9 |
D4 |
10 |
D5 |
11 |
D6 |
12 |
D7 |
13 |
A |
+ 5V |
K |
GND |
Ķēdes savienojums starp 2 gaismas diodēm, servomotoru un Arduino UNO:
Arduino UNO |
LED1 |
LED2 |
Servo motors |
2 |
Anods caur 1k rezistoru |
- |
- |
5 |
- |
Anods caur 1k rezistoru |
- |
6 |
- |
- |
PWM tapa (oranža) |
+ 5V |
- |
- |
+ 5 V (RED) |
GND |
Katods GND |
Katods GND |
GND (brūns) |
Arduino UNO programmēšana RS-485 MODBUS Slave
Arduino UNO ir konfigurēts kā Modbus Slave. Arī Arduino UNO ir piestiprināts ar diviem gaismas diodēm un vienu servomotoru. Tātad vergu Arduino kontrolē no Master Modbus programmatūras. Komunikācija starp Arduino UNO un programmatūru Modbus Master tiek veikta, izmantojot moduli RS-485. Lai to savienotu ar datoru, tiek izmantots pārveidotāja modulis USB uz RS-485. Arduino UNO ar MAX-485 TTL uz RS-485 pārveidotāja moduli viss iestatījums izskatās šādi:
Par Modbus lietošanu bibliotēkā Arduino UNO
Sākumā iekļaujiet nepieciešamo bibliotēku. ModbusRTU bibliotēka ir paredzēta RS-485 Modbus sakaru izmantošanai, un šķidro kristālu bibliotēka ir paredzēta LCD lietošanai ar Arduino UNO, un servo bibliotēka ir paredzēta Servo motora lietošanai ar Arduino UNO.
# iekļaut
Tagad LED anoda tapas, kas ir savienotas ar Arduino tapām 2 un 5, ir definētas kā LED1 un LED2.
#define led1 2 #define led2 5
Nākamais objekts piekļuvei šķidro kristālu klasei tiek deklarēts ar LCD tapām (RS, E, D4, D5, D6, D7), kas ir savienotas ar Arduino UNO.
LiquidCrystal lcd (8,9,10,11,12,13);
Kad LCD ir pabeigts, inicializējiet servo objektu klases Servo. Inicializējiet arī klases Modbus kopnes objektu.
Servo servo; Modbus autobuss;
Pēc tam, lai saglabātu Modbus sakaru vērtības, masīvs tiek deklarēts ar trim vērtībām, kas inicializētas ar nulli.
uint16_t modbus_array = {0,0,0};
Pēc iestatīšanas funkciju, pirmkārt LCD ir iestatīts 16x2 režīmā un tiek parādīts sveiciena ziņojums un noskaidroti.
lcd.begin (16,2); // Lcd iestatīts 16x2 režīmā lcd.print ("RS-485 Modbus"); // sveiciena ziņojums lcd.setCursor (0,1); lcd.print ("Arduino vergs"); kavēšanās (5000); lcd.clear ();
Pēc tam LED1 un LED2 tapas tiek iestatītas kā izejas tapas.
pinMode (led1, OUTPUT); pinMode (led2, OUTPUT);
Servo impulsa tapa, kas savienota ar Arduino PWM 6. kontaktu, ir pievienota.
servo.attach (6);
Tagad Modbus komunikācijai ir iestatīti šādi parametri. Pirmais “1” apzīmē Slave ID, otrais “1” apzīmē, ka datu pārsūtīšanai tas izmanto RS-485, bet “4” apzīmē RS-485 DE&RE tapu, kas savienota ar Arduino UNO.
autobuss = Modbus (1,1,4);
Modbus vergs ir iestatīts uz 9600 baudrate.
Cikls sākas ar kopnes aptaujas definīciju, un bus.poll () tiek izmantots, lai ierakstītu un saņemtu vērtību no galvenā Modbus.
bus.poll (modbus_array, sizeof (modbus_array) / sizeof (modbus_array));
Šo metodi izmanto, lai pārbaudītu, vai seriālajā portā ir pieejami kādi dati.
Ja seriālajā ostā ir pieejami kādi dati, Modbus RTU bibliotēka pārbaudīs ziņojumu (pārbaudīs ierīces adresi, datu garumu un CRC) un veiks nepieciešamo darbību.
Piemēram, lai ierakstītu vai nolasītu jebkuru vērtību no galvenā diska, ModbusRTU no Master Modbus jāsaņem neparakstīts 16 bitu vesels skaitlis un tā garums. Šis masīvs satur datus, kurus raksta no galvenā.
Šajā apmācībā ir trīs LED1, LED2 un Servo motora leņķa bloki.
Vispirms ieslēdziet vai izslēdziet LED1 modbus_array.
if (modbus_array == 0) // Atkarīgs no vērtības modubus_array, kuru uzrakstījis Master Modbus { digitalWrite (led1, LOW); // LED izslēgts, ja 0 lcd.setCursor (0,0); lcd.print ("L1: IZSLĒGTS"); } else { digitalWrite (led1, HIGH); // LED ON, ja vērtība nav 0 lcd.setCursor (0,0); lcd.print ("L1: IESLĒGTS"); }
Blakus ieslēgšanai vai izslēgšanai tiek izmantots LED2 modbus_array.
if (modbus_array == 0) // Atkarīgs no modbus_array vērtības, ko uzrakstījis Master Modbus { digitalWrite (led2, LOW); // LED izslēgts, ja 0 lcd.setCursor (8,0); lcd.print ("L2: Izslēgts"); } else { digitalWrite (led2, HIGH); // LED ir ieslēgts, ja vērtība nav 0 lcd.setCursor (9,0); lcd.print ("L2: IESLĒGTS"); }
Blakus servomotora leņķa iestatīšanai izmantotais modbus_array un vērtība tiek drukāta 16x2 LCD displejā.
int pwm = modbus_array; servo.write (pwm); lcd.setCursor (0,1); lcd.print ("Servo leņķis:"); lcd.print (pwm); kavēšanās (200); lcd.clear ();
Arduino UNO tiek pabeigta programmēšana, lai tā darbotos kā MODBUS Slave. Nākamais solis būs tā pārbaude kā Modbus Slave.
Pārbauda Arduino UNO kā Rs485 Modbus Slave
Kad ķēdes savienojumi ir pabeigti un kods ir augšupielādēts Arduino UNO, ir pienācis laiks savienot USB moduli ar RS-485 ar datoru, kurā ir instalēta programmatūra Simple Modbus Master.
Atveriet ierīču pārvaldnieku un pārbaudiet COM portu atbilstoši savam datoram, kur ir pievienots USB-RS-485 modulis, un pēc tam atveriet programmatūru Simply Modbus Master 8.1.1.
1. Pēc Simply Modbus programmatūras atvēršanas tagad atveriet rakstīšanas opciju.
2. Pēc Simply Modbus Master Write atvēršanas. Iestatiet parametrus
Režīms RTU, COM ports atbilstoši datoram (mans bija COM6), Baud pie 9600, Data Bits 8, Stop bit 1, Parity None un Slave ID kā 1.
3. Pēc tam iestatiet pirmo reģistru kā 40001 un ierakstāmās vērtības ir 3, bet funkcijas kods - 16 (Write Holding Register).
Pēc tam rakstiet no 1 līdz 40001 (LED1 ieslēgts) un 1 līdz 40002 (LED2 ieslēgts) un 90 līdz 40003 (servomotora leņķim) un pēc tam noklikšķiniet uz pogas SŪTĪT.
Var redzēt, ka gan LED indikators ir ieslēgts, gan servo leņķis ir 90 grādi.
4. Pēc tam ievadiet 40001 kā 1 un 40002 kā 0 un 40003 kā 180 un noklikšķiniet uz pogas SŪTĪT.
5. Tagad rakstiet 135 līdz 40003 un 40001 kā 0 un 40002 kā 1.
Šādi RS-485 Modbus var izmantot sērijveida saziņā ar Arduino UNO kā Slave. Nākamajā apmācībā mēs izmantosim Arduino Uno kā meistaru MODBUS sasmalcināšanā.
Zemāk atrodiet pilnu kodu un demonstrācijas video.