- RS-485 सीरियल कम्युनिकेशन
- Arduino के साथ RS-485 को जोड़ना
- USB से RS-485 कनवर्टर मॉड्यूल
- बस मोडबस मास्टर सॉफ्टवेयर
- उपकरण की आवश्यकता
- सर्किट आरेख
- RS-485 MODBUS गुलाम के लिए Arduino UNO प्रोग्रामिंग
- Arduino UNO को Rs485 मोडबस स्लेव के रूप में परीक्षण करना
मोडबस एक सीरियल कम्युनिकेशन प्रोटोकॉल है जिसे 1979 में मोडिकॉन द्वारा खोजा गया था और इसका उपयोग औद्योगिक इलेक्ट्रॉनिक उपकरणों के बीच सीरियल लाइनों पर डेटा संचारित करने के लिए किया जाता है। RS-485 मोडबस ट्रांसमिशन लाइनों के लिए RS-485 का उपयोग करता है। यह ध्यान देने योग्य है कि Modbus एक सॉफ्टवेयर प्रोटोकॉल है और नहीं एक हार्डवेयर प्रोटोकॉल । इसे दो भागों में विभाजित किया गया है जैसे कि मोडबस मास्टर और मोडबस स्लेव। RS-485 मोडबस नेटवर्क में 1 से 127 तक अद्वितीय पते के साथ प्रत्येक मास्टर और 127 दास हैं। इस MAX485 Arduino प्रोजेक्ट में, हम सीरियल संचार के लिए Arduino Uno का उपयोग स्लेव के रूप में करेंगे।
मोडबस ज्यादातर पीएलसी (प्रोग्रामेबल लॉजिक कंट्रोलर्स) में उपयोग किए जाते हैं । और इसके अलावा, Modbus का उपयोग हेल्थकेयर, ट्रांसपोर्टेशन, होम ऑटोमेशन आदि में भी किया जाता है। Modbus के 255 फ़ंक्शन कोड हैं और मुख्य रूप से Modbus के तीन लोकप्रिय संस्करण हैं:
- MODBUS RTU
- MODBUS ASCII
- MODBUS / टीसीपी
Modbus ASCII और Modbus RTU में क्या अंतर है?
मोडबस आरटीयू और मोडबस एएससीआईआई एक ही प्रोटोकॉल पर बात करते हैं। एकमात्र अंतर यह है कि तार पर प्रेषित होने वाले बाइट्स को आरटीयू के साथ बाइनरी के रूप में प्रस्तुत किया जाता है और मोडबस आरटीयू के साथ पठनीय एएससीआईआई के रूप में। इस ट्यूटोरियल में मोडबस आरटीयू का उपयोग किया जाएगा ।
यह ट्यूटोरियल दास के रूप में Arduino UNO के साथ RS-485 मोडबस संचार का उपयोग करने के बारे में है । यहां हम पीसी में बस मोडबस मास्टर सॉफ्टवेयर इंस्टॉल करते हैं और ट्रांसमिशन लाइन के रूप में आरएस -485 का उपयोग करके दो एलईडी और सर्वो मोटर को नियंत्रित करते हैं। ये एलईडी और सर्वो मोटर स्लेव अरुडिनो के साथ जुड़े हुए हैं और मास्टर मोडबस सॉफ्टवेयर का उपयोग करके मूल्यों को भेजकर नियंत्रित किया जाता है। चूंकि यह ट्यूटोरियल RS-485 का उपयोग करता है, इसलिए पहले Arduino Uno और Arduino नैनो के बीच RS485 सीरियल कम्युनिकेशन के माध्यम से जाने की सिफारिश की जाती है। RS485 का उपयोग धारावाहिक संचार के लिए अन्य नियंत्रकों के साथ भी किया जा सकता है:
- रास्पबेरी पाई और Arduino UNO के बीच RS-485 सीरियल कम्युनिकेशन
- RS-485 का उपयोग करके STM32F103C8 और Arduino UNO के बीच सीरियल संचार
आरएस -485 और मोडबस के बारे में कुछ पृष्ठभूमि की खोज शुरू करते हैं। साथ ही विभिन्न सीरियल कम्युनिकेशन प्रोटोकॉल के बारे में अधिक जानें।
RS-485 सीरियल कम्युनिकेशन
RS-485 एक अतुल्यकालिक धारावाहिक संचार प्रोटोकॉल है जिसके लिए घड़ी की आवश्यकता नहीं होती है। यह द्विआधारी डेटा को एक डिवाइस से दूसरे में स्थानांतरित करने के लिए अंतर सिग्नल नामक तकनीक का उपयोग करता है ।
तो यह अंतर सिग्नल ट्रांसफर विधि क्या है ??
विभेदक संकेत विधि एक सकारात्मक और नकारात्मक 5V का उपयोग करके एक अंतर वोल्टेज बनाकर काम करती है। यह दो तारों का उपयोग करते समय एक आधा-द्वैध संचार प्रदान करता है और पूर्ण-द्वैध को 4 चौकों के तारों की आवश्यकता होती है ।
इस विधि का उपयोग करके:
- RS-485 अधिकतम 30Mbps की उच्च डेटा ट्रांसफर दर का समर्थन करता है।
- यह RS-232 प्रोटोकॉल की तुलना में अधिकतम डेटा ट्रांसफर दूरी भी प्रदान करता है। यह अधिकतम 1200 मीटर तक डेटा स्थानांतरित करता है।
- RS-232 पर RS-485 का मुख्य लाभ सिंगल मास्टर के साथ मल्टीपल स्लेव है जबकि RS-232 केवल सिंगल स्लेव का समर्थन करता है।
- RS-485 प्रोटोकॉल से जुड़े अधिकतम 32 डिवाइस हो सकते हैं।
- RS-485 का एक अन्य लाभ शोर के लिए प्रतिरक्षा है क्योंकि वे हस्तांतरण के लिए अंतर सिग्नल विधि का उपयोग करते हैं ।
- I2C प्रोटोकॉल की तुलना में RS-485 तेज है।
Arduino के साथ RS-485 को जोड़ना
RS-485 मॉड्यूल सीरियल पोर्ट वाले किसी भी माइक्रोकंट्रोलर से जोड़ा जा सकता है। माइक्रोकंट्रोलर्स के साथ आरएस -485 मॉड्यूल का उपयोग करने के लिए, आरएस 485 को 5 वी मैक्स 485 टीटीएल नामक एक मॉड्यूल जो मैक्सिम मैक्स 485 आईसी पर आधारित है, इसकी आवश्यकता है क्योंकि यह 1200 मीटर की लंबी दूरी पर धारावाहिक संचार की अनुमति देता है। यह द्विदिश और आधा द्वैध है और इसमें 2.5 एमबीपीएस की डेटा अंतरण दर है। इस मॉड्यूल को 5V के वोल्टेज की आवश्यकता होती है।
RS-485 का पिन-आउट:
पिन नाम |
पिन विवरण |
वीसीसी |
5 वी |
ए |
नॉन-इनवर्टिंग रिसीवर इनपुट नॉन-इनवर्टिंग ड्राइवर आउटपुट |
ख |
रिसीवर इनपुट प्राप्त करना चालक उत्पादन में बदलाव |
GND |
GND (0V) |
R0 |
रिसीवर बाहर (आरएक्स पिन) |
पुन |
रिसीवर आउटपुट (कम-सक्षम) |
डे |
चालक आउटपुट (उच्च-सक्षम) |
डि |
ड्राइवर इनपुट (TX पिन) |
USB से RS-485 कनवर्टर मॉड्यूल
यह एक USB से RS485 कन्वर्टर एडॉप्टर मॉड्यूल है जो Win7, XP, Vista, Linux, Mac OS को सपोर्ट करता है और कंप्यूटर में COM पोर्ट का उपयोग करके RS485 इंटरफ़ेस का उपयोग करने के लिए एक आसान प्रदान करता है । यह मॉड्यूल प्लग-एंड-प्ले डिवाइस है । कोई कमांड स्ट्रक्चर नहीं हैं, जो भी वर्चुअल COM पोर्ट को भेजा जाता है, वह स्वचालित रूप से RS485 में बदल जाता है और इसके विपरीत। मॉड्यूल यूएसबी बस से पूरी तरह से स्व-संचालित है। तो, ऑपरेशन के लिए बाहरी बिजली की आपूर्ति की कोई आवश्यकता नहीं है।
यह एक सीरियल / COM पोर्ट के रूप में दिखाई देता है और अनुप्रयोगों या हाइपर-टर्मिनल से सुलभ है। यह कन्वर्टर अर्ध-डुप्लेक्स RS-485 संचार प्रदान करता है। बॉड दर सीमा 75 बीपीएस से 115200 बीपीएस है, जो अधिकतम 6 एमबीपीएस है।
इस डिवाइस का उपयोग करने के लिए इंटरनेट में विभिन्न मोडबस सॉफ्टवेयर उपलब्ध हैं। इस ट्यूटोरियल में सिंपल मोडबस सॉफ्टवेयर नामक सॉफ्टवेयर का उपयोग किया जाता है।
बस मोडबस मास्टर सॉफ्टवेयर
Modbus Master Software एप्लिकेशन को COM के माध्यम से गुलाम Modbus RS-485 Arduino डिवाइस को डेटा भेजने के लिए आवश्यक है ।
बस मोडबस मास्टर एक डेटा संचार परीक्षण सॉफ्टवेयर है। आप दिए गए लिंक से सिंपल मोडबस मास्टर डाउनलोड कर सकते हैं और सॉफ्टवेयर मैनुअल का संदर्भ देकर इसके बारे में अधिक जान सकते हैं।
सॉफ्टवेयर का उपयोग करने से पहले, निम्नलिखित शब्दावली से परिचित होना महत्वपूर्ण है।
दास आईडी:
नेटवर्क में प्रत्येक दास को 1 से 127 तक एक अद्वितीय इकाई पता सौंपा जाता है। जब मास्टर डेटा का अनुरोध करता है, तो वह जो पहला बाइट भेजता है, वह दास का पता होता है। इस तरह प्रत्येक दास पहले बाइट के बाद जानता है कि संदेश को अनदेखा करना है या नहीं।
समारोह कोड:
मास्टर द्वारा भेजा गया दूसरा बाइट फंक्शन कोड है। यह संख्या गुलाम को बताती है कि किस टेबल को एक्सेस करना है और क्या टेबल से पढ़ना या लिखना है।
समर्थित रजिस्टर समारोह कोड:
फ़ंक्शन कोड |
कार्य |
तालिका नाम |
04 (04 हेक्स) |
पढ़ें |
एनालॉग इनपुट रजिस्टर |
03 (03 हेक्स) |
पढ़ें |
एनालॉग आउटपुट होल्डिंग रजिस्टर |
06 (06 हेक्स) |
एकल लिखें |
एनालॉग आउटपुट होल्डिंग रजिस्टर |
16 (10 हेक्स) |
कई लिखें |
एनालॉग आउटपुट होल्डिंग रजिस्टर |
समर्थित कुंडल समारोह कोड:
फ़ंक्शन कोड |
कार्य |
तालिका नाम |
02 (02 हेक्स) |
पढ़ें |
असतत इनपुट संपर्क |
01 (01 हेक्स) |
पढ़ें |
असतत आउटपुट कॉइल |
05 (05 हेक्स) |
एकल लिखें |
असतत आउटपुट कुंडल |
15 (0F हेक्स) |
कई लिखें |
असतत आउटपुट कॉइल |
CRC:
CRC का मतलब चक्रीय अतिरेक जांच है। यह त्रुटि का पता लगाने के लिए प्रत्येक मोडबस संदेश के अंत में दो बाइट्स जोड़े गए हैं।
उपकरण की आवश्यकता
हार्डवेयर
- Arduino UNO
- MAX-485 TTL से RS-485 कनवर्टर मॉड्यूल
- USB से RS-485 कनवर्टर मॉड्यूल
- एलईडी (2)
- 1k-Resistor (2)
- 16x2 एलसीडी डिस्प्ले
- 10k पोटेंशियोमीटर
- सर्वो मोटर SG-90
सॉफ्टवेयर
- बस मोडबस मास्टर
सर्किट आरेख
MAX-485 TTL से RS-485 कनवर्टर मॉड्यूल और Arduino UNO के बीच सर्किट कनेक्शन:
Arduino UNO |
MAX-485 TTL से RS-485 कनवर्टर मॉड्यूल |
0 (RX) |
आरओ |
1 (TX) |
डि |
४ |
डे और आरई |
+ 5 वी |
वीसीसी |
GND |
GND |
MAX-485 TTL से RS-485 मॉड्यूल और USB से RS-485 कनवर्टर के बीच सर्किट कनेक्शन:
MAX-485 TTL से RS-485 कन्वर्टर मॉड्यूल |
USB से RS-485 मॉड्यूल पीसी से जुड़े |
ए |
ए |
ख |
ख |
Arduino UNO और 16x2 LCD डिस्प्ले के बीच सर्किट कनेक्शन:
16x2 एलसीडी |
Arduino UNO |
वीएसएस |
GND |
VDD |
+ 5 वी |
वि ० |
16x2 एलसीडी के विपरीत / चमक नियंत्रण के लिए पोटेंशियोमीटर के पिन को नियंत्रित करने के लिए |
रुपये |
। |
आरडब्ल्यू |
GND |
इ |
९ |
डी 4 |
१० |
D5 |
1 1 |
डी 6 |
१२ |
डी 7 |
१३ |
ए |
+ 5 वी |
क |
GND |
2 एल ई डी, सर्वो मोटर और अरुडिनो यूएनओ के बीच सर्किट कनेक्शन:
Arduino UNO |
LED1 |
LED2 |
सर्वो मोटर |
२ |
1k रोकनेवाला के माध्यम से एनोड |
- |
- |
५ |
- |
1k रोकनेवाला के माध्यम से एनोड |
- |
६ |
- |
- |
PWM पिन (नारंगी) |
+ 5 वी |
- |
- |
+ 5 वी (लाल) |
GND |
कैथोड जीएनडी |
कैथोड जीएनडी |
GND (ब्राउन) |
RS-485 MODBUS गुलाम के लिए Arduino UNO प्रोग्रामिंग
Arduino UNO को Modbus Slave के रूप में कॉन्फ़िगर किया गया है । इसके अलावा, Arduino UNO दो LED और एक सर्वो मोटर के साथ जुड़ा हुआ है । तो दास अरडिनो को मास्टर मोडबस सॉफ़्टवेयर से नियंत्रित किया जाता है। Arduino UNO और Modbus Master Software के बीच संचार RS-485 मॉड्यूल का उपयोग करके पूरा किया गया है। इसे पीसी से जोड़ने के लिए, USB से RS-485 कनवर्टर मॉड्यूल का उपयोग किया जाता है। और आरएस -485 कनवर्टर मॉड्यूल के लिए MAX-485 TTL के साथ Arduino UNO, पूरा सेटअप फ़ाइल निम्नानुसार दिखेगा:
एक पुस्तकालय Arduino UNO में मोडबस का उपयोग करने के लिए
प्रारंभ में, आवश्यक पुस्तकालय शामिल करें। ModbusRTU पुस्तकालय RS-485 मोडबस संचार का उपयोग करने के लिए है, और तरल क्रिस्टल पुस्तकालय Arduino UNO के साथ एलसीडी का उपयोग करने के लिए है, और सर्वो पुस्तकालय Arduino UNO के साथ सर्वो मोटर का उपयोग करने के लिए है।
#शामिल
अब एलईडी एनोड पिन जो Arduino पिन 2 और 5 से जुड़े हैं, उन्हें LED1 और LED2 के रूप में परिभाषित किया गया है।
#define led1 2 #define led2 5
अगले लिक्विड क्रिस्टल क्लास तक पहुँचने के लिए वस्तु को एलसीडी पिन (आरएस, ई, डी 4, डी 5, डी 6, डी 7) के साथ घोषित किया गया है जो कि अरुडिनो यूएनओ से जुड़े हैं।
लिक्विड क्रिस्टल (8,9,10,11,12,13);
जब एलसीडी किया जाता है, तो क्लास सर्वो के लिए प्रारंभिक वस्तु ऑब्जेक्ट। इसके अलावा क्लास मोडबस के लिए बस ऑब्जेक्ट को इनिशियलाइज़ करें।
सर्वो सर्वो; मोडबस बस;
मोडबस संचार के लिए मानों को संचय करने के लिए एक सरणी को शून्य के साथ तीन मूल्यों के साथ घोषित किया गया है।
uint16_t modbus_array = {0,0,0};
में सेटअप समारोह, सबसे पहले एलसीडी 16x2 मोड में सेट किया गया है और एक स्वागत संदेश प्रदर्शित होता है और मंजूरी दे दी है।
lcd.begin (16,2); // एलसीडी 16x2 मोड में सेट करें lcd.print ("RS-485 मोडबस"); // स्वागत संदेश lcd.setCursor (0,1); lcd.print ("Arduino गुलाम"); देरी (5000); lcd.clear ();
इसके बाद, LED1 और LED2 पिन को आउटपुट पिन के रूप में सेट किया जाता है।
पिनमोड (led1, OUTPUT); पिनमोड (led2, OUTPUT);
Arduino के PWM पिन 6 से जुड़ी सर्वो पल्स पिन जुड़ी हुई है।
servo.attach (6);
अब मोडबस संचार के लिए निम्नलिखित पैरामीटर निर्धारित किए गए हैं। पहला '1' स्लेव आईडी का प्रतिनिधित्व करता है, दूसरा '1' यह दर्शाता है कि यह डेटा ट्रांसफर करने के लिए RS-485 का उपयोग करता है और '4' RS-485 DE और RE पिन को Arduino UNO से कनेक्ट करता है।
बस = मोडबस (1,1,4);
मोडबस गुलाम 9600 बॉड्रेट पर सेट है।
लूप बस पोल की परिभाषा से शुरू होता है और मास्टर मोडबस से मूल्य लिखने और प्राप्त करने के लिए बसपॉल () का उपयोग किया जाता है।
Bus.poll (modbus_array, sizeof (modbus_array) / sizeof (modbus_array));
इस पद्धति का उपयोग यह देखने के लिए किया जाता है कि क्या सीरियल पोर्ट पर कोई डेटा उपलब्ध है।
यदि सीरियल पोर्ट पर कोई डेटा उपलब्ध है, तो मोडबस आरटीयू पुस्तकालय संदेश की जांच करेगा (डिवाइस का पता, डेटा की लंबाई और सीआरसी की जांच करेगा) और आवश्यक कार्रवाई करेगा।
उदाहरण के लिए, मास्टर से किसी भी मान को लिखने या पढ़ने के लिए, ModbusRTU को मास्टर मोडबस से एक अहस्ताक्षरित 16-बिट पूर्णांक सरणी और उसकी लंबाई प्राप्त करनी चाहिए। यह सरणी मास्टर से लिखे गए डेटा को वहन करती है।
इस ट्यूटोरियल में LED1, LED2 और सर्वो मोटर कोण के लिए तीन सरणियाँ हैं ।
LED1 modbus_array को चालू या बंद करने के लिए सबसे पहले उपयोग किया जाता है।
अगर (modbus_array == 0) // मास्टर modbus { digitalWrite (led1, LOW) द्वारा लिखित modubus_array में मूल्य पर निर्भर करता है ; // एलईडी बंद अगर 0 lcd.setCursor (0,0); lcd.print ("L1: OFF"); } और { digitalWrite (led1, HIGH); // 0 lcd.setCursor (0,0) के अलावा अन्य मूल्य पर एलईडी ; lcd.print ("L1: ON"); }
LED2 modbus_array को चालू या बंद करने के लिए अगला प्रयोग किया जाता है।
अगर (modbus_array == 0) // मास्टर modbus { digitalWrite (led2, LOW) द्वारा लिखित modbus_array में मूल्य पर निर्भर करता है ; // एलईडी बंद अगर 0 lcd.setCursor (8,0); lcd.print ("L2: OFF"); } और { digitalWrite (led2, HIGH); // 0 lcd.setCursor (9,0) के अलावा अन्य मूल्य पर एलईडी ; lcd.print ("L2: ON"); }
सर्वो मोटर के कोण को सेट करने के लिए उपयोग किया गया modbus_array और मूल्य 16x2 एलसीडी डिस्प्ले में मुद्रित किया गया है।
int pwm = modbus_array; servo.write (pwm); lcd.setCursor (0,1); lcd.print ("सर्वो कोण:"); lcd.print (pwm); देरी (200); lcd.clear ();
यह Arduino UNO को MODBUS गुलाम के रूप में काम करने के लिए प्रोग्रामिंग को पूरा करता है। अगले चरण में इसे मोडबस स्लेव के रूप में परीक्षण किया जाएगा।
Arduino UNO को Rs485 मोडबस स्लेव के रूप में परीक्षण करना
सर्किट कनेक्शन पूरा हो जाने के बाद और कोड को Arduino UNO में अपलोड किया जाता है, इसका समय USB को RS-485 मॉड्यूल से पीसी से कनेक्ट करने का होता है जहां सिंपल मोडबस मास्टर सॉफ्टवेयर इंस्टॉल होता है।
डिवाइस मैनेजर खोलें और अपने पीसी के अनुसार COM पोर्ट की जांच करें जहां USB से RS-485 मॉड्यूल जुड़ा हुआ है और उसके बाद बस साधारण मोडबस मास्टर 8.1.1 सॉफ्टवेयर खोलें।
1. बस मोडबस सॉफ्टवेयर के खुलने के बाद अब लिखें विकल्प को खोलें।
2. सिंपल मोडबस मास्टर लिखने के बाद खोला जाता है। पैरामीटर सेट करें
RTU में मोड, अपने पीसी के अनुसार COM पोर्ट (मेरा था COM6), 9600 पर बॉड, डेटा बिट्स 8, स्टॉप बिट 1, पैरिटी नो और स्लेव आईडी 1 के रूप में।
3. उसके बाद 40001 के रूप में पहला रजिस्टर सेट करें और लिखने के लिए मान 3 और फ़ंक्शन कोड 16 (राइट होल्डिंग रजिस्टर) के रूप में है।
उसके बाद 1 से 40001 (LED1 के लिए) और 1 से 40002 (For LED2 on) और 90 से 40003 (सर्वो मोटर एंगल के लिए) लिखें और फिर SEND बटन पर क्लिक करें।
आप देख सकते हैं कि दोनों एलईडी स्थिति 90 डिग्री पर ON और सर्वो कोण है।
4. इसके बाद 40001 को 1 और 40002 को 0 और 40003 को 180 के रूप में दर्ज करें और SEND बटन पर क्लिक करें।
5. अब 135 को 40003 और 40001 को 0 और 40002 को 1 के रूप में लिख रहे हैं।
यह है कि RS-485 मोडबस का उपयोग अरुडिनो यूएनओ के साथ धारावाहिक संचार में दास के रूप में किया जा सकता है। अगले ट्यूटोरियल में हम MODBUS कमिशन में मास्टर के रूप में Arduino Uno का उपयोग करेंगे।
नीचे पूर्ण कोड और एक प्रदर्शन वीडियो खोजें।