विषयसूची:

ESP32 मोडबस मास्टर टीसीपी: 7 कदम
ESP32 मोडबस मास्टर टीसीपी: 7 कदम

वीडियो: ESP32 मोडबस मास्टर टीसीपी: 7 कदम

वीडियो: ESP32 मोडबस मास्टर टीसीपी: 7 कदम
वीडियो: Modbus Master Slave Communication Using Modbus Poll 2024, नवंबर
Anonim
ESP32 मोडबस मास्टर टीसीपी
ESP32 मोडबस मास्टर टीसीपी

इस वर्ग में, आप ईएसपी32 प्रोसेसर को मोडबस टीसीपी मास्टर बनने के लिए प्रोग्राम करेंगे।

हम दो उपकरणों का उपयोग करेंगे, जिनमें यह प्रोसेसर होगा: मोडुइनो ईएसपी 32 और पायकॉम। दोनों डिवाइस माइक्रोपायथन वातावरण में चल रहे हैं। हमारा मोडबस स्लेव पीसी कंप्यूटर होगा जिस पर मोडबस सिम्युलेटर सॉफ्टवेयर चल रहा होगा।

आपको चाहिये होगा:

  • Moduino ESP32 या Moduino Pycom डिवाइस (Moduino ESP32 डिवाइस के बारे में और अधिक जानने के लिए इस वेबसाइट की जाँच करें और यह Pycom डिवाइस की जाँच करने के लिए)
  • लिनक्स ऑपरेटिंग सिस्टम के साथ पीसी
  • आपके कंप्यूटर में RS-232/RS-485 पोर्ट या USB से RS-232/RS-485 कनवर्टर

चरण 1: डाउनलोड करें और मोडबस टीसीपी स्लेव सिम्युलेटर शुरू करें

डाउनलोड करें और मोडबस टीसीपी स्लेव सिम्युलेटर शुरू करें
डाउनलोड करें और मोडबस टीसीपी स्लेव सिम्युलेटर शुरू करें

www.modbusdriver.com/diagslave.html से मोडबस स्लेव सिम्युलेटर डाउनलोड करें। फिर डाउनलोड किए गए आर्काइव को खोलें और लिनक्स ऑपरेटिंग सिस्टम के लिए अनपैक वर्जन खोलें।

प्रोग्राम को कंसोल से -p तर्क के साथ चलाएँ:

./diagslave -p

एक पोर्ट है जहां मोडबस स्लेव सर्वर काम करेगा। मोडबस प्रोटोकॉल के लिए यह डिफ़ॉल्ट रूप से 502 है, लेकिन आप दूसरे का उपयोग कर सकते हैं।

1024 से नीचे के लिनक्स पोर्ट में नियमित उपयोगकर्ता (रूट विशेषाधिकार नहीं) से चलने वाले कार्यक्रमों द्वारा उपयोग नहीं किया जा सकता है।

याद रखें कि आप किस पोर्ट का उपयोग कर रहे हैं। यह मान बाद में आवश्यक होगा।

चरण 2: अपने कंप्यूटर को डिवाइस से कनेक्ट करने के लिए तैयार करें

अपने कंप्यूटर को डिवाइस से कनेक्ट करने के लिए तैयार करें
अपने कंप्यूटर को डिवाइस से कनेक्ट करने के लिए तैयार करें

डिवाइस से कनेक्शन बनाने और उसमें फाइल भेजने के लिए आपको कुछ प्रोग्रामों की आवश्यकता होगी।

पायथन पर्यावरण और पाइप स्थापित करें (यदि आपके पास यह नहीं है):

उपयुक्त-पायथन स्थापित करें 3

उपयुक्त-पायथन3-देव कर्ल स्थापित करें "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" python3 get-pip.py

पिकोकॉम स्थापित करें:

उपयुक्त- पिकोकॉम स्थापित करें

डिवाइस से कनेक्ट करने और उस पर कमांड निष्पादित करने के लिए इस प्रोग्राम की आवश्यकता है। mpfshell स्थापित करें:

पाइप स्थापित mpfshell

यह प्रोग्राम आपको डिवाइस पर फाइल भेजने की अनुमति देता है।

आप इसे फॉर्म सोर्स भी इंस्टॉल कर सकते हैं। इस पृष्ठ को देखें:

चरण 3: डिवाइस तैयार करें और उससे कनेक्ट करें

डिवाइस तैयार करें और उससे कनेक्ट करें
डिवाइस तैयार करें और उससे कनेक्ट करें
डिवाइस तैयार करें और उससे कनेक्ट करें
डिवाइस तैयार करें और उससे कनेक्ट करें
डिवाइस तैयार करें और उससे कनेक्ट करें
डिवाइस तैयार करें और उससे कनेक्ट करें

Moduino या Pycom डिवाइस को PC से कनेक्ट करने के लिए आपको RS-232/RS-485 पोर्ट या कन्वर्टर की आवश्यकता होती है। अपने डिवाइस का संस्करण जांचें (यह किस पोर्ट प्रकार का उपयोग करता है) और उपयुक्त पोर्ट या कनवर्टर ढूंढें।

  1. डिवाइस को पीसी से कनेक्ट करें
  2. फिर इससे बिजली की आपूर्ति कनेक्ट करें

डिवाइस को पीसी से कनेक्ट करें और फिर उससे बिजली की आपूर्ति कनेक्ट करें। आप ईथरनेट केबल को Moduino ESP32 से भी कनेक्ट कर सकते हैं (यदि इसमें वह पोर्ट है)।

कनेक्शन ऊपर की तस्वीरों की तरह होना चाहिए।

पोर्ट के लिए पथ खोजें, जिसका उपयोग डिवाइस कनेक्शन के लिए किया जाता है। यह उदाहरण के लिए हो सकता है: /dev/ttyS1, /dev/ttyUSB0 ।

यूएसबी कन्वर्टर्स के लिए, पथ में यूएसबी शब्द होगा।

आप पिकोकॉम प्रोग्राम के साथ डिवाइस से कनेक्ट कर सकते हैं:

पिकोकॉम / देव / ttyUSB0 -b 115200

डिवाइस का कमांड प्रॉम्प्ट नीचे दी गई इन छवियों में से एक जैसा दिखता है।

मोडुइनो ESP32: यहाँ देखें

मोडुइनो पायकॉम: यहां देखें

चरण 4: मोडबस मास्टर लाइब्रेरी अपलोड करें

मोडबस मास्टर लाइब्रेरी अपलोड करें
मोडबस मास्टर लाइब्रेरी अपलोड करें

github.com/pycom/pycom-modbus/मोडबस स्लेव के साथ संवाद करने के लिए आपको उपयुक्त पुस्तकालय की आवश्यकता है। पाइकॉम के लिए पुस्तकालय मोडुइनो के साथ संगत नहीं हैं। उन निर्देशों की जाँच करें जो आपके डिवाइस का अनुपालन करते हैं।

फ़ाइलें भेजने से पहले पिकोकॉम बंद करें: Ctrl+A दबाएं और फिर Ctrl+X कुंजियां दबाएं.

Moduino ESP32 के लिए uModBus लाइब्रेरी, Moduino Pycom के लिए pycom-modbus लाइब्रेरी पर आधारित है। इसे नियमित ESP32 डिवाइस पर काम करने के लिए संशोधित किया गया है। इसमें कनेक्टर कक्षाओं के लिए अतिरिक्त नज़दीकी () विधियाँ भी हैं।

1) मोडुइनो ESP32

github.com/techbase123/micropython-modbus से लाइब्रेरी डाउनलोड करें। संग्रह को अनपैक करें और सभी 4 फाइलों को मोडुइनो डिवाइस पर भेजें।

उन्हें अपलोड करने के लिए mpfshell का प्रयोग करें। इस प्रोग्राम को उस फाइल के साथ डायरेक्टरी में चलाएं।

क्रियान्वित करके डिवाइस से कनेक्ट करें: यह

ttyUSB0 सीरियल पोर्ट का एक नाम है जहां डिवाइस जुड़ा हुआ है।

निर्देशिका को /flash/lib में कमांड के साथ बदलें:

सीडी / फ्लैश / lib

सभी फाइलों को कमांड के साथ रखें:

uModBusConst.py डालें

uModBusFunctions.py डालें uModBusTCP.py डालें uModBusSerial.py डालें

उदाहरण

फिर एग्जिट कमांड के साथ कंसोल से बाहर निकलें और रीसेट बटन के साथ डिवाइस को रीस्टार्ट करें।

2) मोडुइनो पायकॉम

github.com/pycom/pycom-modbus/ से लाइब्रेरी डाउनलोड करें। संग्रह को अनपैक करें और uModbus निर्देशिका की सामग्री को डिवाइस पर भेजें। उन्हें अपलोड करने के लिए mpfshell का उपयोग करें। इस प्रोग्राम को उस फाइल के साथ डायरेक्टरी में चलाएं।

क्रियान्वित करके डिवाइस से कनेक्ट करें:

खुला ttyUSB0

ttyUSB0 सीरियल पोर्ट का एक नाम है जहां डिवाइस जुड़ा हुआ है।

निर्देशिका को /flash/lib में बदलें, uModbus निर्देशिका बनाएं और इसे कमांड के साथ दर्ज करें:

सीडी / फ्लैश / libmd यूमोडबस सीडी यूमोडबस

सभी फाइलों को कमांड के साथ रखें:

const.py. लगाओ

फंक्शन्स डालें। tcp.py डालें serial.py डालें

फिर एग्जिट कमांड के साथ कंसोल से बाहर निकलें और रीसेट बटन के साथ डिवाइस को रीस्टार्ट करें।

उदाहरण

चरण 5: नेटवर्क से कनेक्ट करें

नेटवर्क से कनेक्ट करें
नेटवर्क से कनेक्ट करें

मोडुइनो और पाइकॉम के बीच कनेक्शन स्थापित करने के लिए कमांड अलग-अलग हैं।

उपयुक्त कमांड निष्पादित करने के लिए पिकोकॉम के साथ डिवाइस से कनेक्ट करें। आप मोडुइनो डिवाइस को वायर या वायरलेस द्वारा नेटवर्क से कनेक्ट कर सकते हैं। निम्नलिखित उदाहरण मानते हैं कि आपके नेटवर्क में डीएचसीपी सर्वर काम कर रहा है।

दूसरे मामले में, डिवाइस को आईपी एड्रेस नहीं मिलेगा। वाईफाई सपोर्ट हर मोडुइनो में उपलब्ध है। ईथरनेट पोर्ट एक विकल्प है और सभी उपकरणों में यह नहीं होता है।

1) मोडुइनो ESP32

वाईफाई से जुड़ना

डिवाइस पर निम्न आदेश निष्पादित करें:

netWiFi से आयात करें netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'पास')wifi.start()

ईएसएसआईडी को अपने वाईफाई नेटवर्क के नाम से बदलें, और पासवर्ड के साथ पास करें।

प्रारंभ () को निष्पादित करने के कुछ समय बाद आपको एक आईपी पता मिलना चाहिए जो आपके डिवाइस को सौंपा गया था।

ईथरनेट नेटवर्क से जुड़ना

ईथरनेट केबल के साथ डिवाइस को वायर्ड नेटवर्क से कनेक्ट करें।

फिर निम्नलिखित कमांड निष्पादित करें:

netETH आयात से netETHeth = netETH()eth.start()

प्रारंभ () निष्पादित करने के कुछ समय बाद आपको आईपी पता मिलना चाहिए जो आपके डिवाइस को सौंपा गया था।

2) मोडुइनो पायकॉम

वाईफाई से कनेक्ट करें

डिवाइस पर निम्न आदेश निष्पादित करें:

नेटवर्क आयात से WLANwlan = WLAN (मोड = WLAN. STA) नेट = wlan.scan () नेट में नेट के लिए: यदि net.ssid == 'ESSID': प्रिंट ('नेटवर्क मिला!') wlan.connect(net.ssid, auth=(net.sec, 'PASS'), टाइमआउट=5000) जबकि wlan.isconnected(): Machine.idle() प्रिंट ('WLAN कनेक्शन सफल हुआ!') ब्रेक

ईएसएसआईडी को अपने वाईफाई नेटवर्क के नाम से बदलें, और पासवर्ड के साथ पास करें।

चरण 6: मोडबस स्लेव के साथ संचार प्रारंभ करें

मोडबस स्लेव के साथ संचार आरंभ करें
मोडबस स्लेव के साथ संचार आरंभ करें

मोडबस मास्टर पुस्तकालय दोनों उपकरणों के लिए समान हैं

वे आरंभीकरण में भिन्न होते हैं।

1) मोडुइनो ESP32 पर uModBus को इनिशियलाइज़ करें

निष्पादित करना:

uModBusTCP से uModBusTCP को TCP के रूप में आयात करें

2) Pycom पर uModBus को इनिशियलाइज़ करें

निष्पादित करना:

uModbus.tcp से TCP आयात करें

खुला कनेक्शन

फिर इसके साथ कनेक्शन खोलें:

मोडबस = टीसीपी ('आईपी', पोर्ट, 60)

कहां:

  • आईपी - मॉडबस स्लेव सिम्युलेटर के साथ आपके पीसी का आईपी पता
  • पोर्ट - मोडबस स्लेव का बंदरगाह
  • 60 एक टाइमआउट है

यदि पढ़ने/लिखने के आदेश निष्पादित करने के दौरान निम्न त्रुटि होती है: उदाहरण

निष्पादित करना:

मोडुइनो ESP32 के लिए:

मोडबस.क्लोज़ ()

मोडुइनो पाइकॉम के लिए:

modbus._sock.close ()

और फिर कनेक्शन फिर से बनाएँ:

मोडबस = टीसीपी ('आईपी', पोर्ट, 60)

कनेक्शन को फिर से बनाने से पहले सॉकेट को बंद करना महत्वपूर्ण है। डिवाइस में उपलब्ध सॉकेट कनेक्शन की मात्रा सीमित है।

चरण 7: रजिस्टर पढ़ें और लिखें

रजिस्टर पढ़ें और लिखें
रजिस्टर पढ़ें और लिखें

मोडबस रजिस्टरों को पढ़ने और लिखने के लिए कई कार्यों का समर्थन करता है।

uModBus लाइब्रेरी में प्रत्येक फ़ंक्शन के लिए विधि है:

  1. read_coils
  2. read_discrete_inputs
  3. read_holding_registers
  4. read_input_registers
  5. राइट_सिंगल_कॉइल
  6. राइट_सिंगल_रजिस्टर

सबसे पहले, कुछ मान लिखें।

१) कॉयल लिखें (func: ५)

दास 1 से 200 रजिस्टर करने के लिए 1 मान लिखें:

modbus.write_single_coil(1, 200, 0xFF00)

पहला तर्क गुलाम आईडी के लिए है, हमारे मामले में 1.

दूसरा रजिस्टर नंबर है और थिर्स एक वैल्यू है। 1 के लिए आपको यहां 0xFF00 डालना होगा। गुलाम 1 से 0 से 201 रजिस्टर लिखें:

modbus.write_single_coil(1, 201, 0)

यह विधि केवल बूलियन मान लिखने की अनुमति देती है: 0 या 1.

2) रजिस्टर लिखें (func: 6)

अब कई रजिस्टरों में कुछ पूर्णांक मान लिखें।

दास 1 से १०० रजिस्टर करने के लिए हस्ताक्षरित १११ मान लिखें:

modbus.write_single_register(1, 100, 111, सच)

पहला तर्क स्लेव आईडी है, दूसरा रजिस्टर नंबर और तीसरा नया मान है। अंतिम तर्क परिभाषित करता है कि क्या मान को हस्ताक्षरित संख्या के रूप में सेट किया जाना चाहिए। इसके लिए डिफ़ॉल्ट मान सत्य है। आपको इसे सेट करने की आवश्यकता नहीं है।

दास 1 से 101 रजिस्टर पर हस्ताक्षर किए -457 मान लिखें:

modbus.write_single_register(1, 101, -457)

दास 3 से ५० मान से १०० रजिस्टर पर हस्ताक्षर नहीं लिखें:

modbus.write_single_register(3, 100, 50, गलत)

यह विधि पूर्णांक मानों को एकल रजिस्टर में लिखने की अनुमति देती है।

एकल रजिस्टर में 16 बिट मान हो सकते हैं।

विधि रिटर्न सही है इनपुट मान मान्य है और यदि नहीं तो गलत है। अमान्य होने पर भी मान लिखा जाता है (रजिस्टर के लिए बहुत बड़ा)

3) कॉइल / असतत इनपुट पढ़ें

अब लिखित बूलियन मान पढ़ते हैं। फ़ंक्शन 1 के साथ रजिस्टर पढ़ने के लिए कॉइल पढ़ें, निष्पादित करें:

modbus.read_coils (दास आईडी, रजिस्टर, गिनती) [0: गिनती]

फ़ंक्शन 2 के साथ रजिस्टर पढ़ने के लिए असतत इनपुट पढ़ें, निष्पादित करें:

modbus.read_discrete_inputs(slaveId, Register, count)[0:count]

कहां:

  • स्लेव-आईडी - वर्चुअल स्लेव की आईडी (गुलाम सिम्युलेटर सभी मान्य आईडी स्वीकार करता है)
  • रजिस्टर - पढ़ने के लिए रजिस्टर नंबर
  • गिनती - पढ़ने के लिए रजिस्टरों की मात्रा (दोनों जगहों पर वांछित राशि डालें)

ये विधियां बूलियन मानों के साथ सरणी लौटाती हैं। प्रत्येक मान प्रत्येक रजिस्टर से मेल खाता है।

खंड: [0: गिनती] की आवश्यकता है, क्योंकि यह विधि गिनती से अधिक मान लौटाती है। यह हमेशा उन मानों की मात्रा देता है जो 8 से विभाज्य हैं। अतिरिक्त मान गलत हैं और किसी भी रजिस्टर से मेल नहीं खाते हैं।

हमारे बूलियन मानों को दोनों विधियों से पढ़ें:

modbus.read_coils(1, 200, 2)[0:2]modbus.read_discrete_inputs(1, 200, 2)[0:2]

परिणाम इस प्रकार होगा: उदाहरण

ट्रू 1 मान को संदर्भित करता है, गलत से 0।

4) रजिस्टर पढ़ें

अब 6 फ़ंक्शन के साथ लिखे गए रजिस्टरों से मान पढ़ें।

फ़ंक्शन 3 के साथ रजिस्टरों को पढ़ने के लिए होल्डिंग रजिस्टरों को पढ़ें, निष्पादित करें:

modbus.read_holding_registers(slaveId, रजिस्टर, गिनती, हस्ताक्षरित=सच)

फ़ंक्शन 4 के साथ रजिस्टर पढ़ने के लिए इनपुट रजिस्टर पढ़ें, निष्पादित करें:

modbus.read_input_registers (दास आईडी, रजिस्टर, गिनती, हस्ताक्षरित = सही)

कहां:

  • स्लेव-आईडी - वर्चुअल स्लेव की आईडी
  • रजिस्टर - पढ़ने के लिए रजिस्टर नंबर
  • गिनती - पढ़े जाने वाले रजिस्टरों की मात्रा
  • हस्ताक्षरित - इंगित करता है कि पढ़े गए मानों को हस्ताक्षरित संख्याओं के रूप में माना जाना चाहिए या नहीं। डिफ़ॉल्ट स्थिति: सही

रिटर्न वैल्यू रजिस्टरों की वांछित मात्रा के साथ एक टपल है।

पिछले बिंदु में निर्धारित रजिस्टर पढ़ें:

modbus.read_holding_registers(1, 100, 2, True) modbus.read_input_registers(1, 100, 2, True) modbus.read_holding_registers(3, 100, 1, False) modbus.read_input_registers(3, 100, 1, False)

परिणाम इस स्क्रीनशॉट की तरह दिखना चाहिए: उदाहरण

अगले पाठ में आप सीखेंगे कि ईएसपी32-सक्षम डिवाइस पर मोडबस आरटीयू मास्टर कैसे बनाया जाता है।

सिफारिश की: