- RS-485 soros kommunikáció
- Az RS-485 csatlakoztatása az Arduinóval
- USB-RS-485 átalakító modul
- Egyszerűen a Modbus Master szoftver
- Szükséges eszközök
- Kördiagramm
- Arduino UNO programozása RS-485 MODBUS Slave-hez
- Az Arduino UNO tesztelése Rs485 Modbus Slave néven
A Modbus egy soros kommunikációs protokoll, amelyet a Modicon fedezett fel 1979-ben, és amelyet az ipari elektronikus eszközök közötti soros vonalakon keresztül továbbítanak. Az RS-485 Modbus az RS-485-öt használja a távvezetékekhez. Meg kell jegyezni, hogy a Modbus szoftverprotokoll és nem hardverprotokoll. Két részre oszlik, mint például a Modbus Master és a Modbus Slave. Az RS-485 Modbus hálózatban egy Master és 127 Slave van, mindegyik egyedi címmel 1 és 127 között. Ebben a MAX485 Arduino projektben az Arduino Uno-t fogjuk Slave-ként használni a soros kommunikációhoz.
A Modbus-t leginkább a PLC-kben (programozható logikai vezérlők) használják. Ettől eltekintve a Modbus az egészségügyben, a közlekedésben, a házi automatizálásban stb. Is használható. A Modbus 255 funkciókóddal rendelkezik, és a Modbus főleg három népszerű verziója létezik:
- MODBUS RTU
- MODBUS ASCII
- MODBUS / TCP
Mi a különbség a Modbus ASCII és a Modbus RTU között?
A Modbus RTU és a Modbus ASCII ugyanazt a protokollt beszél. Az egyetlen különbség az, hogy a vezetéken keresztül továbbított bájtok binárisan jelennek meg az RTU-val és olvasható ASCII-ként a Modbus RTU-val. A Modbus RTU lesz ebben az oktatóanyagban.
Ez az oktatóanyag az RS-485 Modbus kommunikáció használatáról szól az Arduino UNO-val, mint Slave. Itt telepítjük a Simply Modbus Master szoftvert a számítógépre, és két LED-et és a szervomotort vezérelünk az RS-485-ös átviteli vonal használatával. Ezek a LED-ek és a szervomotor a Slave Arduino-val vannak összekapcsolva, és értékek küldésével vezérelhetők a Master Modbus szoftver segítségével. Mivel ez az oktatóanyag RS-485-öt használ, ajánlott először átmenni az RS485-ös soros kommunikáción az Arduino Uno és az Arduino Nano között. Az RS485 más vezérlőkkel is használható soros kommunikációhoz:
- RS-485 soros kommunikáció a Raspberry Pi és az Arduino UNO között
- Soros kommunikáció az STM32F103C8 és az Arduino UNO között az RS-485 segítségével
Kezdjük azzal, hogy feltárjuk az RS-485 és a Modbus hátterét. Itt tudhat meg többet a különféle soros kommunikációs protokollokról is.
RS-485 soros kommunikáció
Az RS-485 egy aszinkron soros kommunikációs protokoll, amelyhez nincs szükség órára. A differenciáljelnek nevezett technikát használja a bináris adatok egyik eszközről a másikra történő átvitelére.
Mi tehát ez a differenciális jelátviteli módszer ??
A differenciáljel módszer a feszültségkülönbség létrehozásával működik pozitív és negatív 5 V használatával. Ez biztosítja a Half-Duplex kommunikáció használata esetén a két vezetéket és Full-Duplex igényel 4 négyes vezetékek.
Ezzel a módszerrel:
- Az RS-485 támogatja a nagyobb, 30Mbps sebességű adatátviteli sebességet.
- Az RS-232 protokollhoz képest maximális adatátviteli távolságot is biztosít. Adatokat továbbít maximum 1200 méterig.
- Az RS-485 fő előnye az RS-232-vel szemben az egyetlen mesterrel rendelkező többszörös szolga, míg az RS-232 csak egyetlen szolga-t támogat.
- Legfeljebb 32 eszköz csatlakozhat az RS-485 protokollhoz.
- Az RS-485 másik előnye, hogy immunis a zajjal szemben, mivel differenciális jelmódszert alkalmaznak az átvitelhez.
- Az RS-485 gyorsabb az I2C protokollhoz képest.
Az RS-485 csatlakoztatása az Arduinóval
Az RS-485 modul bármely soros porttal rendelkező mikrovezérlőhöz csatlakoztatható. Az RS-485 modul mikrokontrollerekkel történő használatához 5V MAX485 TTL - RS485 nevű modulra van szükség, amely a Maxim MAX485 IC-n alapul, mivel lehetővé teszi a soros kommunikációt 1200 méteres távolságon. Kétirányú és fél duplex, adatátviteli sebessége 2,5 Mbps. Ehhez a modulhoz 5V feszültség szükséges.
Az RS-485 kitűzése:
PIN neve |
PIN leírás |
VCC |
5V |
A |
Nem invertáló vevő bemenet Nem invertáló illesztőprogram kimenete |
B |
A vevő bemenetének megfordítása Az illesztőprogram kimenetének megfordítása |
GND |
GND (0V) |
R0 |
Vevő kimenet (RX tű) |
ÚJRA |
Vevő kimenete (LOW-Enable) |
DE |
Illesztőprogram kimenete (HIGH-Enable) |
DI |
Illesztőprogram bemenet (TX tű) |
USB-RS-485 átalakító modul
Ez egy USB-RS485 átalakító adapter modul, amely támogatja a WIN7, XP, Vista, Linux, Mac OS operációs rendszert, és egy könnyen használható RS485 interfészt biztosít a számítógép COM portjának használatával . Ez a modul plug and play eszköz . Nincsenek parancsstruktúrák, bármit is küldünk a virtuális COM portra, azt automatikusan RS485-re konvertáljuk és fordítva. A modul teljesen önállóan működik az USB buszról. Tehát nincs szükség külső áramellátásra a működéshez.
Soros / COM portként jelenik meg, és alkalmazásokból vagy hiperterminálokból érhető el. Ez az átalakító fél-duplex RS-485 kommunikációt biztosít. A Baud sebességi tartomány 75 bps / 115200 bps, maximum 6 Mbps.
A készülék használatához különféle Modbus szoftverek állnak rendelkezésre az interneten. Ebben az oktatóanyagban a Simply Modbus Software nevű szoftvert használják.
Egyszerűen a Modbus Master szoftver
A Modbus Master szoftveralkalmazásra van szükség az adatok továbbításához a slave Modbus RS-485 Arduino eszközhöz COM-on keresztül.
Az egyszerűen a Modbus Master egy adatkommunikációs teszt szoftver. Letöltheti a Simply Modbus Master-t a megadott linkről, és többet megtudhat róla a Szoftver kézikönyv hivatkozással.
A szoftver használata előtt fontos megismerni az alábbi terminológiákat.
Rabszolga azonosító:
A hálózat minden slave-jéhez egyedi egységcímet rendelnek, 1-től 127-ig. Amikor a master adatokat kér, az első bájt, amelyet küld, a Slave-cím. Így minden szolga az első bájt után tudja, hogy figyelmen kívül hagyja-e az üzenetet.
Funkció kód:
A mester által küldött második bájt a Funkció kód. Ez a szám megadja a rabszolgának, hogy melyik táblához kell hozzáférni, és hogy olvas-e vagy írjon-e a táblára.
Támogatott regisztráció funkciókódok:
Funkció kód |
Akció |
Tábla neve |
04 (04 hex) |
Olvas |
Analóg bemeneti regiszterek |
03 (03 hex) |
Olvas |
Analóg kimeneti tároló regiszterek |
06 (06 hex) |
Írj egy |
Analóg kimeneti holding nyilvántartás |
16 (10 hex) |
Többet írjon |
Analóg kimeneti tároló regiszterek |
Támogatott tekercs funkciókódok:
Funkció kód |
Akció |
Tábla neve |
02 (02 hex) |
Olvas |
Diszkrét bemeneti kapcsolatok |
01 (01 hex) |
Olvas |
Diszkrét kimeneti tekercsek |
05 (05 hex) |
Írj egy |
Diszkrét kimeneti tekercs |
15 (0F hatszög) |
Többet írjon |
Diszkrét kimeneti tekercsek |
CRC:
A CRC jelentése ciklikus redundancia-ellenőrzés. Ez két bájt hozzáadódik minden Modbus üzenet végéhez a hiba észleléséhez.
Szükséges eszközök
Hardver
- Arduino UNO
- MAX-485 TTL-RS-485 átalakító modul
- USB-RS-485 átalakító modul
- LED (2)
- 1k-ellenállás (2)
- 16x2 LCD kijelző
- 10k potenciométer
- SG-90 szervomotor
Szoftver
- Egyszerűen a Modbus Master
Kördiagramm
Áramköri kapcsolat a MAX-485 TTL és az RS-485 átalakító modul és az Arduino UNO között:
Arduino UNO |
MAX-485 TTL-RS-485 átalakító modul |
0 (RX) |
RO |
1 (TX) |
DI |
4 |
DE és RE |
+ 5V |
VCC |
GND |
GND |
Áramköri kapcsolat a MAX-485 TTL-RS-485 modul és az USB-RS-485 átalakító között:
MAX-485 TTL-RS-485 Átalakító modul |
USB-RS-485 modul PC-hez csatlakozik |
A |
A |
B |
B |
Áramköri kapcsolatok az Arduino UNO és a 16x2 LCD kijelző között:
16x2 LCD |
Arduino UNO |
VSS |
GND |
VDD |
+ 5V |
V0 |
A potenciométer csapjának vezérlésére a 16x2 LCD kontraszt / fényerő szabályozásához |
RS |
8. |
RW |
GND |
E |
9. |
D4 |
10. |
D5 |
11. |
D6 |
12. |
D7 |
13. |
A |
+ 5V |
K |
GND |
Áramköri kapcsolat 2 LED, szervomotor és Arduino UNO között:
Arduino UNO |
LED1 |
LED2 |
Szervómotor |
2 |
Anód 1k ellenálláson keresztül |
- |
- |
5. |
- |
Anód 1k ellenálláson keresztül |
- |
6. |
- |
- |
PWM csap (narancs) |
+ 5V |
- |
- |
+ 5 V (RED) |
GND |
Katód GND |
Katód GND |
GND (barna) |
Arduino UNO programozása RS-485 MODBUS Slave-hez
Az Arduino UNO Modbus Slave néven van konfigurálva. Az Arduino UNO két LED-del és egy szervomotorral van felszerelve. Tehát a rabszolga Arduino-t a Master Modbus szoftver vezérli. Az Arduino UNO és a Modbus Master szoftver közötti kommunikáció az RS-485 modul használatával valósul meg. A számítógéphez való csatlakoztatáshoz az USB-RS-485 átalakító modult használják. És az Arduino UNO MAX-485 TTL-RS-485 átalakító modullal, a teljes beállítás fájlnak tűnik:
A Modbus használatához az Arduino UNO könyvtárban
Kezdetben tartalmazza a szükséges könyvtárat. A ModbusRTU könyvtár az RS-485 Modbus kommunikáció, a folyadékkristályos könyvtár pedig az LCD és az Arduino UNO közötti, a szervo könyvtár pedig a Servo motor és az Arduino UNO közötti használatra szolgál.
#include
Az Arduino 2. és 5. érintkezőjével összekapcsolt LED anódtüskék LED1 és LED2.
#define led1 2 #define led2 5
Ezután a folyadékkristály osztály elérésére szolgáló objektumot deklaráljuk az LCD csapokkal (RS, E, D4, D5, D6, D7), amelyek kapcsolódnak az Arduino UNO-hoz.
LiquidCrystal lcd (8,9,10,11,12,13);
Ha az LCD elkészült, inicializálja a szervo objektumot a Servo osztályhoz. Inicializálja a Modbus osztály buszobjektumát is.
Szervo szervo; Modbus busz;
Ezután a Modbus kommunikáció értékeinek tárolásához egy tömböt deklarálunk a három nullával inicializált értékkel.
uint16_t modbus_array = {0,0,0};
A beállítási funkcióban először az LCD-t állítják be 16x2 módban, és üdvözlő üzenet jelenik meg, és törlődik.
lcdbegin (16,2); // Lcd beállítása 16x2 módban lcd.print ("RS-485 Modbus"); // üdvözlő üzenet lcd.setCursor (0,1); lcd.print ("Arduino Slave"); késés (5000); lcd.clear ();
Ezt követően a LED1 és a LED2 csapokat állítják be kimeneti csapokként.
pinMode (led1, OUTPUT); pinMode (led2, OUTPUT);
Az Arduino PWM 6-os érintkezőjéhez csatlakoztatott szervo impulzustű csatlakozik.
szervo.attach (6);
Most a Modbus kommunikációhoz a következő paramétereket állítjuk be. Az első „1” a Slave ID-t, a második az „1” azt jelenti, hogy RS-485-öt használ az adatok átviteléhez, a „4” pedig az Arduino UNO-hoz csatlakoztatott RS-485 DE&RE tűt jelenti.
busz = Modbus (1,1,4);
A Modbus slave 9600 baudrate-re van állítva.
A hurok a busz lekérdezés definíciójával kezdődik, és a bus.poll () értéket írunk és fogadunk a master Modbus-tól.
bus.poll (modbus_array, sizeof (modbus_array) / sizeof (modbus_array));
Ezzel a módszerrel ellenőrizzük, hogy van-e elérhető adat a soros porton.
Ha bármilyen adat áll rendelkezésre a soros porton, a Modbus RTU könyvtár ellenőrzi az üzenetet (ellenőrzi az eszköz címét, az adat hosszát és a CRC-t), és végrehajtja a szükséges műveletet.
Például a Master bármely értékének írásához vagy beolvasásához a ModbusRTU-nak aláíratlan 16 bites egész tömböt és annak hosszát kell kapnia a Master Modbus-tól. Ez a tömb hordozza a master által írt adatokat.
Ebben az oktatóanyagban három tömb található a LED1, LED2 és a szervomotor szögéhez.
Először be- vagy kikapcsolni a LED1 modbus_array- t használja.
if (modbus_array == 0) // A Master Modbus { digitalWrite (led1, LOW) által írt modubus_array értékétől függ ; // LED KI, ha 0 lcd.setCursor (0,0); lcd.print ("L1: KI"); } else { digitalWrite (led1, HIGH); // LED BE, ha a 0 lcd.setCursor (0,0) értéktől eltérő érték ; lcd.print ("L1: BE"); }
A be- vagy kikapcsolás mellett a LED2 modbus_array használható.
if (modbus_array == 0) // A Modbus Master által írt modbus_array értékétől függ { digitalWrite (led2, LOW); // LED KI, ha 0 lcd.setCursor (8,0); lcd.print ("L2: KI"); } else { digitalWrite (led2, HIGH); // LED BE, ha a 0 lcd.setCursor (9,0) értéktől eltérő érték ; lcd.print ("L2: BE"); }
A szervomotor dőlésszögének beállításához a modbus_array és érték kerül kinyomtatásra a 16x2 LCD kijelzőn.
int pwm = modbus_array; servo.write (pwm); lcd.setCursor (0,1); lcd.print ("Szervószög:"); lcd.print (pwm); késés (200); lcd.clear ();
Ez befejezi az Arduino UNO programozását, mert MODBUS Slave-ként dolgozik. A következő lépés Modbus Slave néven lesz tesztelve.
Az Arduino UNO tesztelése Rs485 Modbus Slave néven
Miután az áramköri kapcsolatok befejeződtek és a kód feltöltődött az Arduino UNO-ba, itt az ideje, hogy az USB-t RS-485 modulhoz csatlakoztassa azzal a számítógéppel, ahová a Simple Modbus Master szoftver telepítve van.
Nyissa meg az eszközkezelőt, és ellenőrizze a COM-portot a számítógépének megfelelően, ahová az USB-RS-485 modul csatlakozik, majd ezt követően nyissa meg a Simply Modbus Master 8.1.1 szoftvert.
1. A Simply Modbus szoftver megnyitása után nyissa meg az Írás opciót.
2. Miután megnyílt a Simply Modbus Master Write. Állítsa be a paramétereket
Mód RTU-ban, COM port a PC-jének megfelelően (az enyém COM6 volt), Baud 9600-nál, 8. adatbit, Stop 1. bit, Paritás nincs és Slave ID 1-ként.
3. Ezt követően állítsa be az első regisztrációt 40001-be, az írandó érték 3, a funkciókód pedig 16 (Write Holding Register).
Ezután írjon 1-től 40001-ig (LED1 bekapcsolt állapotban) és 1-től 40002-ig (LED2 világít) és 90-től 40003-ig (szervomotor szögéhez), majd kattintson a KÜLDÉS gombra.
Láthatja, hogy a LED állapota be van kapcsolva, és a szervo szöge 90 fokos.
4. Ezt követően írja be a 40001 értéket 1-ként, a 40002-et pedig 0-ként és a 40003-at 180-ként, majd kattintson a SEND gombra.
5. Most írjon 135-től 40003-ig és 40001-et 0-ként és 40002-t 1-ként.
Így használható az RS-485 Modbus soros kommunikációban az Arduino UNO-val, mint Slave. A következő oktatóanyagban az Arduino Uno-t fogjuk használni a MODBUS aprításánál.
Az alábbiakban megtalálja a teljes kódot és egy bemutató videót.