SerialTool के साथ Modbus RTU, ASCII और TCP
अंतिम अद्यतन द्वारा Oliver ReedModbus क्या है
Modbus एक सीरियल कम्युनिकेशन प्रोटोकॉल है जिसे 1979 में Modicon® ने बनाया था (यह कंपनी अब Schneider Electric समूह का हिस्सा है) ताकि उसके प्रोग्रामेबल लॉजिक कंट्रोलर (PLC) आपस में संवाद कर सकें। यह औद्योगिक संचार का de facto मानक बन चुका है और आज दुनिया भर में औद्योगिक इलेक्ट्रॉनिक उपकरणों के बीच सबसे अधिक उपयोग होने वाले कनेक्शन प्रोटोकॉल में से एक है। Modbus एक royalty-free प्रोटोकॉल है, जिसकी विनिर्देश The Modbus Organization की वेबसाइट पर प्रकाशित हैं।
सरल शब्दों में, यह इलेक्ट्रॉनिक उपकरणों के बीच सीरियल लाइनों पर जानकारी भेजने का एक तरीका है। जो उपकरण जानकारी मांगता है उसे Modbus Client कहा जाता है, और जो उपकरण जानकारी प्रदान करते हैं उन्हें Modbus Server कहा जाता है। एक मानक Modbus नेटवर्क में एक client और अधिकतम 247 server हो सकते हैं, जिनमें से प्रत्येक का 1 से 247 तक एक विशिष्ट पता होता है। Client server पर जानकारी लिख भी सकता है।
शुरुआत में यह औद्योगिक उपयोग के लिए बनाया गया था, लेकिन समय के साथ इसे अन्य क्षेत्रों में भी अपनाया गया और यह सबसे व्यापक रूप से उपयोग होने वाले प्रोटोकॉल में शामिल हो गया। आज भी, 40 वर्ष से अधिक पुराने होने के बावजूद, यह ऑपरेटर पैनल, PLC, होम ऑटोमेशन सिस्टम और Arduino जैसे साधारण उपकरणों में उपलब्ध है।
सीरियल के माध्यम से Modbus RTU और ASCII ट्रांसमिशन
जब यह प्रोटोकॉल बनाया गया था, तब संचार को सीरियल पोर्ट के माध्यम से उपयोग करने के लिए डिज़ाइन किया गया था, और इसी कारण इसे SerialTool में लागू किया गया है। Modbus का उपयोग अक्सर SCADA (Supervisory Control and Data Acquisition) सिस्टम में supervisory computer को remote terminal unit (RTU) से जोड़ने के लिए किया जाता है। डेटा किस प्रारूप में भेजा जाता है, इसके आधार पर प्रोटोकॉल को इस प्रकार विभाजित किया जाता है:
- MODBUS RTU - डेटा हेक्साडेसिमल प्रारूप में भेजा जाता है।
- MODBUS ASCII - डेटा ASCII प्रारूप में भेजा जाता है।
दोनों मामलों में त्रुटि जाँच अलग होती है: MODBUS RTU में CRC (Cyclic Redundancy Check) का उपयोग होता है, जो कमांड के अंत में भेजा जाता है; जबकि MODBUS ASCII में LRC (Longitudinal Redundancy Check) का उपयोग होता है, जो कमांड के बाद भेजा जाता है।
Modbus TCP ट्रांसमिशन
1999 में “Modbus TCP” विकसित किया गया, जो TCP/IP प्रोटोकॉल सूट का उपयोग करने वाले नेटवर्क के लिए समर्पित एक मानक है। व्यावहारिक रूप से यह Modbus serial RTU का TCP/IP आधारित संस्करण है, जो internet/intranet नेटवर्क पर संचार की अनुमति देता है। पिछले कुछ वर्षों में TCP/IP संस्करण का उपयोग लगातार बढ़ा है क्योंकि यह Open Source है, लागू करने में आसान है, विकास लागत कम है और बहुत कम हार्डवेयर समर्थन की आवश्यकता होती है।
दोनों मामलों में त्रुटि जाँच अलग होती है: MODBUS RTU में CRC (Cyclic Redundancy Check) का उपयोग होता है, जो कमांड के अंत में भेजा जाता है; जबकि MODBUS ASCII में LRC (Longitudinal Redundancy Check) का उपयोग होता है, जो कमांड के बाद भेजा जाता है।
Modbus TCP/IP प्रोटोकॉल बाइनरी डेटा एन्कोडिंग और TCP/IP त्रुटि-पहचान तंत्र का उपयोग करता है। Serial Modbus के विपरीत, TCP/IP संस्करण connection-oriented है और यह एक ही slave या कई उपकरणों के साथ समकालिक कनेक्शन की अनुमति देता है। Modbus TCP/IP भी master-slave paradigm का उपयोग करता है; इस संचार में अतिरिक्त रूप से चार प्रकार के संदेश उपयोग किए जाते हैं।
Modbus ISO/OSI स्टैक के स्तर 7 (Application Layer) पर स्थित है और यह संदेशों के formatting, जिसे framing कहा जाता है, तथा डेटा और नियंत्रण कार्यों के ट्रांसमिशन के तरीके को परिभाषित करता है। संचार client-server paradigm पर आधारित है। यह प्रोटोकॉल एक Protocol Data Unit (PDU) को परिभाषित करता है जो नीचे की communication layer पर निर्भर नहीं होता। Application Data Unit (ADU) addressing और error control के लिए अतिरिक्त fields जोड़ती है।
SerialTool Modbus Client (Master / Polling)
SerialTool एक Modbus RTU, ASCII और TCP client है जिसमें polling, register scanning, traffic monitoring और live charts शामिल हैं, ताकि औद्योगिक उपकरणों का परीक्षण और debugging किया जा सके।
Modbus Client आपको Serial (RTU या ASCII) या Network (IPv4 या IPv6 पर TCP) के माध्यम से Modbus Slave/server डिवाइस से जुड़ने, मानक Modbus functions का उपयोग करके डेटा पढ़ने और लिखने, और अपनी मैपिंग के साथ एक Modbus डिवाइस बनाने की अनुमति देता है जिस पर scheduled polling चलाया जा सकता है।
Prototype device के भीतर Modbus structures (Discrete Output Coils, Discrete Input Contacts, Analog Input Register, Analog Output Holding Register) जोड़े जा सकते हैं और डिवाइस को सेव किया जा सकता है ताकि जरूरत पड़ने पर उसे फिर से लोड किया जा सके। इस Modbus prototype device को Text, CSV या PDF format में export भी किया जा सकता है ताकि इसे आसानी और सहज रूप से साझा किया जा सके।
सही mapping वाला डिवाइस बन जाने के बाद, Slave device से scheduled polling के माध्यम से सीधे पढ़े गए मानों को real-time charts में दिखाया जा सकता है।
SerialTool Modbus ट्रैफिक (Serial और TCP) को एक dedicated terminal में देखने की सुविधा भी देता है, जहाँ generated और received traffic दिखाई जाती है। Advanced terminal data export और incoming तथा outgoing data की real-time filtering का समर्थन करता है।
SerialTool, Modbus Scanner function के माध्यम से remote Slave device को scan करने की सुविधा भी देता है। सही filters सेट करके, वर्तमान में कौन से registers supported हैं यह जाने बिना भी remote device (Modbus Slave) को map करने की कोशिश की जा सकती है। Modbus Scanner function विशेष रूप से तब उपयोगी है जब किसी ऐसे डिवाइस को एक्सप्लोर करना हो जिसकी विशेषताएँ अज्ञात हों या केवल आंशिक रूप से ज्ञात हों।
नीचे SerialTool के Modbus module की मुख्य स्क्रीन दिखाई गई है:
SerialTool Modbus Client की मुख्य स्क्रीन
मुख्य स्क्रीन SerialTool और Modbus Client (Master) की प्रमुख विशेषताओं को दर्शाती है।
SerialTool Modbus Client (Master / Polling)
स्क्रीन के बाएँ भाग में आप Serial या TCP connection mode चुन सकते हैं:
Modbus Client connection screen
जैसा ऊपर बताया गया है, serial Modbus protocol दो प्रकारों में विभाजित होता है: RTU और ASCII। Remote device के साथ सही तरीके से संवाद करने के लिए, serial connection के मामले में यह जानना आवश्यक है कि हमारे Slave device द्वारा कौन सा Modbus protocol समर्थित है।
दूसरी ओर, ModBus TCP connection IPv4 और IPv6 को समर्थन देता है। TCP के माध्यम से Modbus connection सेट करने के लिए slave का IP और remote port सेट करना आवश्यक है।
Connection screen पर दो parameters होते हैं जो Modbus Slave device द्वारा दिए जाने वाले response timeout से संबंधित हैं।
एक सामान्य response timeout (Response Timeout), जिसके बाद Client (Master) slave के उत्तर की प्रतीक्षा करना बंद कर देता है, और दूसरा Slave से प्राप्त अंतिम byte से गिना जाने वाला timeout।
Modbus ENRON/Daniel एमुलेशन
Connection parameters में ENRON/Daniel emulation भी शामिल है (जिसे अक्सर Enron Modbus या Daniels Modbus कहा जाता है), जो standard Modbus communication protocol के एक विशेष variant को संदर्भित करती है।
इसे मूल रूप से Enron Corporation ने विकसित किया था और Daniel Measurement and Control के flow computers में व्यापक रूप से लागू किया गया। समय के साथ यह विशेषकर Oil & Gas क्षेत्र में electronic fluid measurement (EFM) के लिए एक de facto standard बन गया।
किसी डिवाइस पर ENRON/Daniel emulation सक्षम करने से Modbus का व्यवहार बदल जाता है ताकि निम्न मुख्य विशेषताओं का समर्थन किया जा सके:
- 1. एक ही register में 32-bit डेटा हैंडलिंग: यह सबसे महत्वपूर्ण तकनीकी अंतर है। Standard Modbus में registers 16-bit (2 byte) होते हैं और 32-bit value के लिए दो registers पढ़ने पड़ते हैं। Enron Modbus में 32-bit values को एक ही register (प्रति register 4 bytes) में map किया जाता है।
- 2. विशिष्ट address mapping: यह 32-bit डेटा के लिए predefined ranges का उपयोग करता है। 5000 series (उदाहरण 45001 - 45999) Long Integers के लिए है, जबकि 7000 series (उदाहरण 47001 - 47999) Floating Points के लिए है।
- 3. ऐतिहासिक डेटा और घटनाएँ: यह historical logs और alarm archives निकालने के लिए विशेष commands का समर्थन करता है, जबकि standard Modbus लगभग पूरी तरह real-time reading के लिए बनाया गया है।
- 4. Offset नहीं: मांगा गया address ठीक उसी register number से मेल खाता है, जिससे standard Modbus का क्लासिक “+1 offset” समाप्त हो जाता है।
संक्षेप में: Oil & Gas क्षेत्र में native 32-bit data भेजने वाले उपकरणों से इंटरफेस करते समय communication errors (byte misalignment) से बचने के लिए यह emulation बहुत महत्वपूर्ण है।
Modbus Client Functions
स्क्रीन के मध्य भाग में आपको SerialTool द्वारा समर्थित Modbus functions मिलती हैं।
Modbus Client mode के लिए समर्थित functions
ModBus client functions को निम्न तालिका में संक्षेपित किया जा सकता है।
| फ़ंक्शन कोड | क्रिया | टेबल नाम / विवरण |
|---|---|---|
| 0x01 | पढ़ें | Discrete Output Coils |
| 0x02 | पढ़ें | Discrete Input Contacts |
| 0x03 | पढ़ें | Analog Output Holding Register |
| 0x04 | पढ़ें | Analog Input Registers |
| 0x05 | एकल लेखन | Discrete Output Coil |
| 0x06 | एकल लेखन | Analog Output Holding Register |
| 0x07 | पढ़ें | Exception Status |
| 0x08 | डायग्नॉस्टिक्स | डायग्नॉस्टिक्स (Serial Line only) |
| 0x0B (dec 11) | पढ़ें | Comm Event Counter (Serial Line only) |
| 0x0F (dec 15) | एकाधिक लेखन | Discrete Output Coils |
| 0x10 (dec 16) | एकाधिक लेखन | Analog Output Holding Registers |
| 0x11 (dec 17) | रिपोर्ट | Server ID (Serial Line only) |
| 0x16 (dec 22) | मास्क लेखन | Holding Register |
| 0x17 (dec 23) | एकाधिक पढ़ना/लिखना | Holding Registers |
| 0x2B / 0x0E (dec 43 / 14) | पढ़ें | Device Identification |
Modbus डेटा संरचनाएँ
जानकारी Server device में चार अलग-अलग tables में store की जाती है। दो tables discrete on/off values (coils) store करती हैं और दो numerical values (registers) store करती हैं। Coils और registers दोनों के लिए एक read-only table और एक read/write table होती है। प्रत्येक table में 9999 values होती हैं। प्रत्येक coil या contact 1 bit का होता है और उसका data address 0000 से 270E के बीच होता है। प्रत्येक register 1 word = 16 bits = 2 bytes होता है और उसका data address भी 0000 से 270E के बीच होता है।
| Coil/Register संख्या | डेटा पते | प्रकार | टेबल नाम |
|---|---|---|---|
| 1-9999 | 0x0000 to 0x270E | पढ़ना/लिखना | Discrete Output Coils |
| 10001-19999 | 0x0000 to 0x270E | केवल पढ़ना | Discrete Input Contacts |
| 30001-39999 | 0x0000 to 0x270E | केवल पढ़ना | Analog Input Register |
| 40001-49999 | 0x0000 to 0x270E | पढ़ना/लिखना | Analog Output Holding Register |
Modbus डिवाइस
SerialTool एक Modbus Slave device बनाने की अनुमति देता है जो उस Slave device की register mapping को दर्शाता है जिससे आप जुड़ना चाहते हैं। यह mapping बहुत महत्वपूर्ण है क्योंकि यह remote slave device में मौजूद मानों को local table में दिखाने की सुविधा देती है।
Modbus Client Functions
Modbus Client के लिए उपलब्ध functions
Function bar से पहले से बनाए गए device को "Load Device" function द्वारा लोड किया जा सकता है, current device को "Save Device" द्वारा सेव किया जा सकता है, और "Add Item" से single register या "Add Items" से multiple registers device mapping में जोड़े जा सकते हैं।
Modbus device mapping में Modbus registers जोड़ना
Modbus Slave device memory area (Modbus device)
Modbus Slave device mapping बन जाने के बाद, SerialTool इसे बाद में उपयोग के लिए सेव करने या इसका content CSV, Text या PDF format में export करने की अनुमति देता है ताकि तीसरे पक्षों के साथ share और process किया जा सके। नीचे की image Modbus Slave device mapping को export करने का एक उदाहरण दिखाती है:
Modbus Slave device mapping के PDF export का उदाहरण
आप इस link से PDF डाउनलोड कर सकते हैं।
Modbus Polling
Modbus Slave device बनाने से polling करना संभव हो जाता है, अर्थात उस slave device के कुछ registers को समय-समय पर पढ़ना जिससे आप जुड़े हुए हैं।
ऐसा करने के लिए पहले Slave बनाना और map करना होगा, और फिर वह register या registers जोड़ने होंगे जिन पर polling करनी है, जैसा कि अगली figure में दिखाया गया है:
चित्र slave की ओर polling में एक item जोड़ना दिखाता है
एक या अधिक items polling में जोड़ दिए जाने के बाद, polling list से जुड़े items की polling शुरू की जा सकती है।
चित्र polling के लिए चुने गए items को दिखाता है
Modbus Functions तक पहुँच
SerialTool Modbus client (Master/Polling) को functions को तीन modes में execute करने के लिए डिज़ाइन किया गया है:
Modbus function execution
- "Execute from Device Table" - Device mapping के संदर्भ में Modbus function execute करता है।
- "Execute Function" - Direct Modbus function execute करता है और परिणाम log window में दिखाता है।
- "Send Raw Data" - Hexadecimal bytes से बना direct request भेजता है और response की प्रतीक्षा करता है।
Execute from Device Table
यह mode चुनी गई Modbus function को सीधे local loaded या created device table का उपयोग करके execute करता है।
उपयोगकर्ता Coils, Discrete Inputs, Holding Registers या Input Registers जैसे Modbus reference type का चयन कर सकता है, start address और पढ़े/लिखे जाने वाले elements की संख्या चुन सकता है और फिर एक क्लिक से command को slave को भेज सकता है।
इस mode का मुख्य लाभ यह है कि परिणाम तुरंत device map में रिपोर्ट हो जाता है और local table में दिखाए गए values अपडेट हो जाते हैं।
इस तरह remote device की स्थिति का एक व्यवस्थित और स्थायी representation मिलता है, जो testing तथा monitoring और maintenance activities दोनों में उपयोगी है।
जब command किसी write function से संबंधित होती है, SerialTool data type, display format और selected registers में लिखे जाने वाले content को चुनकर भेजे जाने वाले data को आसानी से तैयार करने देता है।
इसलिए यह mode विशेष रूप से तब उपयुक्त है जब आप सीधे Modbus device की logical structure पर काम करना चाहते हों।
Execute Function
Execute Function mode उपलब्ध function codes की सूची से सीधे Modbus function चुनकर उसे execute करने की अनुमति देता है,
जैसे coils पढ़ना, discrete inputs पढ़ना, holding registers पढ़ना, input registers पढ़ना, single या multiple writes और protocol द्वारा supported अन्य functions।
इस स्थिति में operation केवल device map में display तक सीमित नहीं रहता, क्योंकि result application के log area में भी report किया जाता है।
यह approach विशेष रूप से तब उपयोगी होती है जब आप received response की सामग्री को जल्दी से verify करना चाहते हों,
किसी specific Modbus function को test करना चाहते हों, या device mapping को बदले बिना variable addresses और quantities पर targeted tests करना चाहते हों।
Execute Function mode debugging के लिए भी बहुत सुविधाजनक है, क्योंकि इससे executed command का outcome, slave द्वारा लौटाई गई errors और request तथा response से संबंधित जानकारी तुरंत देखी जा सकती है।
Send Raw Data
यह function slave को hexadecimal format में arbitrary commands भेजती और प्राप्त करती है।
यह उपयोगकर्ता को active connection, जैसे serial या TCP/IP, पर भेजे जाने वाले bytes की sequence को manually type करने की अनुमति देती है, बिना software द्वारा automatic frame construction के।
यह function advanced testing, reverse engineering, diagnostics या Modbus devices और compatible protocols की validation के लिए बहुत उपयोगी है।
व्यवहार में client बिल्कुल वही bytes transmit करता है जो उपयोगकर्ता दर्ज करता है, जिससे packet content पर पूरा नियंत्रण बना रहता है।
इससे custom requests simulate करना, abnormal responses test करना या manually तैयार किए गए complete frames भेजना संभव हो जाता है।
Response के लिए wait option सक्षम करके, SerialTool slave से प्राप्त return frame को capture कर सकता है और उसे traffic log में दिखा सकता है, जिससे transmitted और received data की तुरंत तुलना की जा सके।
Raw Data भेजना
Modbus Scanner Function
SerialTool में connected Slave device के Modbus addresses को scan करने का function शामिल है।
यह function start address से end address तक के range को जल्दी से explore करने की अनुमति देता है, और scan के दौरान उपयोग किए जाने वाले function code को भी specify किया जा सकता है।
Scanner विशेष रूप से तब उपयोगी होता है जब remote device की पूरी mapping ठीक-ठीक ज्ञात न हो या जब आप यह verify करना चाहें कि कौन से addresses valid हैं और किनमें meaningful data है।
प्रत्येक queried address के लिए, SerialTool table में used function type, address, read value और operation का outcome दिखाता है।
यह mode third-party devices के साथ diagnostics और integration activities को काफी तेज़ करता है, क्योंकि यह slave द्वारा वास्तव में उपयोग किए जा रहे Modbus memory areas को जल्दी पहचानने और scan results को बाद में analysis या sharing के लिए export करने देता है।
Address table
Slave Modbus Registers का चार्ट
Modbus registers के values को chart में दिखाया जा सकता है।
यह function device mapping के एक या अधिक elements को एक dedicated chart window से जोड़ने की अनुमति देती है, जहाँ polling या update operations के दौरान values को समय के साथ plot किया जाता है।
Chart से जुड़े प्रत्येक register को अपनी अलग trace के साथ दिखाया जा सकता है, जिसे एक विशिष्ट रंग और Modbus reference, address, current value तथा element को दिए गए नाम जैसी जानकारी से पहचाना जाता है।
इस प्रकार analog variables, setpoints, measurements या device operation के दौरान बदलने वाले numeric registers की time trend को आसानी से देखा जा सकता है।
Chart function monitoring, testing और dynamic analysis के लिए विशेष रूप से उपयोगी है, क्योंकि यह केवल tabular reading तक सीमित रहने के बजाय समय के साथ data के परिवर्तन को तुरंत दिखाती है।
Modbus register chart
Modbus Traffic Log
सभी sent और received commands को Modbus ट्रैफिक log window में bytes के रूप में दिखाया जाता है।
Traffic log communication debugging का एक मूलभूत tool है क्योंकि यह client द्वारा भेजे गए data और slave device से प्राप्त data का विस्तृत visualization देता है, और byte sequences को readable form में दिखाता है।
इस window की मदद से actual frame content की जाँच की जा सकती है, यह verify किया जा सकता है कि generated commands सही हैं, और timeout issues, abnormal responses, Modbus exceptions या unexpected data का diagnosis किया जा सकता है।
Traffic को normal client use, automatic polling और raw data sending के दौरान देखा जा सकता है।
Traffic window advanced functions भी प्रदान करती है, जैसे ASCII या hexadecimal format में data copy करना, file में save करना, content के भीतर search करना, line selection, तथा colors, fonts, spacing और display settings जैसी graphical customization options।
इससे traffic log केवल एक simple viewer नहीं रहता, बल्कि developers, technicians और integrators के लिए एक बहुत उपयोगी operational tool भी बन जाता है।
Modbus ट्रैफिक