MOXA Nport - इनसाइड लुक

सीरियल पोर्ट डेटा कलेक्शन सर्वर MOXA Nport और जैसे वर्तमान में RS-232, RS-485 और RS-422 इंटरफेस के माध्यम से डेटा संचारित या प्राप्त करने वाले बिल्डिंग सिस्टम के क्षेत्र में वास्तविक मानक हैं।

बिजली के मीटर, नियंत्रित वाल्व और गेट वाल्व, फ्लो मीटर, कंपन सेंसर, टेलीमेकनिक्स डिवाइस।

सब कुछ जो डेटा उत्पन्न कर सकता है या दूरस्थ रूप से नियंत्रित किया जा सकता है और इसमें एक RS-232, RS-485 और RS-422 इंटरफ़ेस है - इन कन्वर्टर्स के माध्यम से काम करता है।

उनके उपयोग का सामान्य उद्देश्य आमतौर पर इस प्रकार है: एक मौजूदा स्थानीय नेटवर्क के माध्यम से RS-232, RS-485 और RS-422 इंटरफेस को अग्रेषित करें, एक डिवाइस या डिवाइस को कनेक्ट करें, जिसमें सीरियल इंटरफेस में से एक पीसी (सर्वर, SCADA) के लिए ईथरनेट के साथ, डिवाइस से कनेक्ट करें। रिमोट कंट्रोल, आदि के लिए इंटरनेट के माध्यम से एक सीरियल इंटरफ़ेस होना।

इन कन्वर्टर्स के लिए कीमतें बहुत अधिक नहीं हैं, छोटे मॉडल को $ 100-200 के लिए उधार लिया जा सकता है। लेकिन यह देखते हुए कि सैकड़ों या यहां तक ​​कि हजारों ऐसे उपकरणों के किसी भी स्वचालित उत्पादन पर स्थापित किया जा सकता है, घरेलू "आयात विकल्प" के लिए एक ख़बरदार है।

मैं आज उनकी मदद करने की कोशिश करूंगा।

हम क्या करेंगे?

सबसे पहले, हम इस सिद्धांत को समझेंगे कि यह अंदर कैसे व्यवस्थित होता है।

दूसरे, हम रियल कॉम मोड में काम शुरू करने के लिए न्यूनतम कार्यक्षमता को अलग करते हैं (जो वास्तव में, ईथरनेट के माध्यम से डिवाइस पर वर्चुअल COM पोर्ट को अग्रेषित करने के लिए है)।

तीसरा, रुचि के लिए, हम NPort प्रशासन सुइट उपयोगिता के माध्यम से डिवाइस को खोजने और कॉन्फ़िगर करने के लिए प्रोटोकॉल का विश्लेषण करेंगे। हम देशी सॉफ्टवेयर और ड्राइवर का पूरा समर्थन प्राप्त करते हुए मौजूदा एमएक्सए एनपोर्ट के स्थान पर लोहे के टुकड़े के पिन-टू-पिन एनालॉग बनाने की पूरी समझ प्राप्त करेंगे।

और अंत में, आइए गणना करने की कोशिश करें कि कितने भारतीयों ने MOXA फर्मवेयर कोड लिखा।

भाग 1. परिचयात्मक


इसलिए, हमारे पास हमारी मेज पर एक परीक्षण विषय है (वास्तव में उनमें से कई थे, इसलिए यदि आप अलग-अलग मॉडल पहचानकर्ता और लेख में अलग-अलग मैक पते देखते हैं तो आश्चर्यचकित न हों)



इसमें एक ईथरनेट पोर्ट और दो RS-422 / RS-485 पोर्ट हैं - यह शारीरिक रूप से है।
और कार्यक्रम की योजना में - डिवाइस पर खुले हैं:
यूडीपी पोर्ट 4800 - यह डिवाइस खोज पैकेट को पकड़ने के लिए जिम्मेदार है और डिवाइस के बारे में डेटा को कॉन्फ़िगरेशन उपयोगिता में भेजता है।

टीसीपी पोर्ट 4900 - यह डिवाइस कॉन्फ़िगरेशन कमांड प्राप्त करता है। इस पोर्ट के माध्यम से डिवाइस का समय, नाम, आईपी पता, ऑपरेटिंग मोड, गति और पोर्ट सेटिंग्स, और अन्य बुनियादी मापदंडों को कॉन्फ़िगर किया जा सकता है, जिसे एनपीओआरटी प्रशासन सुइट उपयोगिता के मुख्य इंटरफ़ेस के माध्यम से कॉन्फ़िगर किया जा सकता है:



टीसीपी पोर्ट 80 - वेब इंटरफेस के संचालन के लिए जिम्मेदार है
TCP पोर्ट 966, 967, (और 968, 969 4 पोर्ट डिवाइस के लिए) ट्रांसमिशन कंट्रोल पोर्ट हैं। वे इसी COM पोर्ट को खोलने / बंद करने के लिए कमांड चलाते हैं, पोर्ट स्पीड सेट करते हैं, डेटा पुश करते हैं, ट्रांसमिट मॉनिटर करते हैं और बफर फुलनेस प्राप्त करते हैं, आदि। पोर्ट 966 क्रमशः पहले पोर्ट के संचालन के लिए जिम्मेदार है।

टीसीपी पोर्ट (डिफ़ॉल्ट रूप से) 950, 951, और (952, 953 4 पोर्ट डिवाइस के लिए) डायरेक्ट डेटा ट्रांसफर पोर्ट हैं। यही है, डिवाइस के RS-232/485/422 पोर्ट पर सीधे क्या दिखाई देना चाहिए, डेटा पोर्ट को प्रेषित किया जाता है। इस बंदरगाह में केवल डेटा प्रवाह नियंत्रण क्रमशः 966, 967, 968, 969 बंदरगाहों पर जाता है।

मुझे उम्मीद है कि मेरे सिर में डिवाइस के संचालन को समझने की सामान्य तस्वीर विकसित हुई है। चलो अगले भाग पर चलते हैं:

भाग 2. एमओएक्सए का अनुकरण करें


निश्चित रूप से यह पहले से ही कई लोगों के लिए स्पष्ट हो गया है कि न्यूनतम कॉन्फ़िगरेशन में MOXA Nport होने का दिखावा करने के लिए, ट्रांसमिशन पोर्ट कंट्रोल के लिए 966 और डायरेक्ट डेटा ट्रांसमिशन के लिए 966: 2 पोर्ट पर खुद के हार्डवेयर पर एक टीसीपी सर्वर को उठाना आवश्यक है। स्वाभाविक रूप से, आपको पोर्ट 966 पर ड्राइवर के अनुरोधों का सही ढंग से जवाब देना और संसाधित करना होगा, लेकिन जैसा कि वायरशर्क विश्लेषण द्वारा दिखाया गया है, कई अनुरोध नहीं हैं और वे सबसे सरल हैं।

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

डाउनलोड: MOXA.pdf पार्सिंग प्रोटोकॉल का विवरण
यही है, ज्ञान का यह सेट आपको एक डिवाइस को लागू करने की अनुमति देता है जिसे एक मूल चालक के साथ जोड़ा जा सकता है और MOXA के रूप में डेटा संचारित कर सकता है। आधा काम किया जाता है, लेकिन एक बिंदु है - कॉन्फ़िगरेशन कैसे बदलना है? इन उद्देश्यों के लिए देशी एनपीॉर्ट प्रशासन सुइट उपयोगिता का उपयोग करना बहुत अच्छा होगा।

भाग 3. खोज और खोज


पहले दो भागों में वर्णित है कि क्या किया जाना चाहिए, लेकिन प्रोटोकॉल के कार्यान्वयन के लिए डेटा कैसे प्राप्त किया जाए, इसके बारे में एक शब्द भी नहीं था।

इस हिस्से में, हम थोड़ा गहरा खुदाई करते हैं और देखते हैं कि एक्सचेंज का विश्लेषण कैसे किया गया था।
हम जानते हैं कि डिवाइस पर यूडीपी पोर्ट 4800 खुला है, आइए डिवाइस को कनेक्ट करें, एनपीओआरटी एडमिनिस्ट्रेशन सुइट, विंडशार्क चलाएं और देखें कि देशी उपयोगिता वाले उपकरणों की खोज करते समय क्या होता है।



हम भेजे गए पैकेट को देखते हैं:



हम देखते हैं कि एनपीओआरटी प्रशासन सूट 255.255.255.255 पते पर एक प्रसारण भेजता है, यह आशा करता है कि पैकेट पूरे नेटवर्क में उड़ जाएगा।

पेलोड पैकेज में डेटा शामिल है:

01 00 00 08 00 00 00 00, : 01 00 –   00 08 –       Big Endian. 00 00 00 00 –   

यह अनुरोध कई बार भेजा जाता है, जाहिर है इस उम्मीद में कि उनमें से कम से कम एक लक्ष्य प्राप्त होगा।

सभी MOXs इस अनुरोध का जवाब देते हैं।



विशेष रूप से, हमारे उत्तर ने कहा:

  81 00 00 18 00 00 00 00 12 03 00 80 32 03 00 90 e8 26 4a ab c0 a8 7f fe 81 00 –   00 18 –     (24) 00 00 00 00 –   12 03 00 80 32 03 –  MOXA Nport device,    NPort 5232.        MOXA Nport device.          NPort Administrator. 00 90 e8 26 4a ab – MAC  MOXA Nport device c0 a8 7f fe – IP  MOXA Nport device ( 192.168.127.254 ) 

ऐसा लगता है कि सब कुछ प्राथमिक सरल है, केवल मूल्य 12 03 00 80 32 32 को भ्रमित करता है, जो एक विशिष्ट डिवाइस मॉडल की व्याख्या के लिए जिम्मेदार है।

लेकिन, चूँकि यह मान कुछ संदर्भ संदर्भ के खिलाफ जांचा जाता है, इसका मतलब है कि इसे कहीं संग्रहीत किया जाना चाहिए।

सॉफ़्टवेयर निर्देशिका का थोड़ा अध्ययन करने के बाद, हम पाते हैं कि NPort एडमिनिस्ट्रेटर सूट v1.22 में ये मान C फ़ाइल में संग्रहीत हैं: \ Program Files \ NPortAdminSuite \ bin \ dsci.dll



Wireshark और कई दिनों के लिए डिवाइस के साथ बैठने के बाद, हमें एक पूर्ण एक्सचेंज लॉग और प्रतिक्रिया में प्राप्त होने वाले फ़ंक्शन कोड की समझ मिलती है। सुविधा के लिए, सब कुछ उसी पीडीएफ फाइल में वर्णित है, जिसका लिंक पहले लेख में इंगित किया गया है।

चित्र की पूरी समझ के लिए - मुझे बस यह याद रखना चाहिए कि UDP 4800 को डिवाइस के बारे में प्राथमिक जानकारी प्राप्त हो रही है, सभी मापदंडों के लिए कॉन्फ़िगरेशन और इंस्टॉलेशन की आवश्यकता होती है जो TCP पोर्ट 4900 के अनुरोध के माध्यम से कॉन्फ़िगर किए गए हैं।

4800 और 4900 पोर्ट के लिए आने वाले सभी अनुरोधों को सही तरीके से संसाधित करने के बाद, हम पूरी तरह से एक डिवाइस होने का दिखावा कर सकते हैं, इसलिए यहां तक ​​कि देशी सॉफ्टवेयर भी पकड़ को नोटिस नहीं करेंगे।

भाग 4. भारतीयों की गिनती *


प्रोटोकॉल का विश्लेषण करने के दौरान, मुझे यह महसूस हुआ कि एक्सचेंज प्रोटोकॉल के विभिन्न टुकड़े अलग-अलग लोगों द्वारा लिखे गए हैं, कार्यों के अर्थ और उनकी व्याख्या भी अलग-अलग हैं।

उदाहरण के लिए:

UDP पोर्ट 4800 फ़ंक्शन कोड के साथ शुरू होता है:

  01 00 .. ..  81 00 .. ..  10 00 .. ..  90 00 .. ..  16 00 .. ..  96 00 .. ..  29 00 .. ..  a9 00 .. .. 

TCP पोर्ट 4900 फ़ंक्शन कोड के साथ शुरू होता है:

  00 01 .. ..  00 01 .. ..  02 01 .. ..  02 01 .. .. 

और इसी तरह

TCP पोर्ट 966, 967, 968, 969 फ़ंक्शन कोड के साथ शुरू होते हैं:

  10 .. ..  10 4f 4b  11 .. ..  11 4f 4b 

और इसी तरह

यही है, फ़ंक्शन का एक एकल बाइट पहचानकर्ता का उपयोग किया जाता है, और पहले की तरह डबल बाइट नहीं।
फिर, वैसे, एक मजेदार क्षण सामने आया। बंदरगाहों 966, 967, 968, 969 पर, पैरामीटर सेट करने की प्रतिक्रिया में हमेशा 3 बाइट्स होते हैं।

पहला फ़ंक्शन नंबर है, और शेष 2 4f 4b है या ASCII तालिका में एक नज़र है - "O" K "

उसके साथ ठीक है, आगे बढ़ो।

देखा गया दूसरा फीचर समान प्रतिक्रिया के भीतर बिग और लिटिल एंडियन का हैश है।

उत्तर उदाहरण:

 9a 00 00 24 00 00 00 00 01 52 00 80 9a 52 00 90 e8 3b 89 9c 75 00 04 00 01 00 0f 00 09 00 17 00 36 00 00 00 9a 00 –   00 24 –     (36) 00 00 00 00 –   01 52 00 80 9a 52 –  MOXA Nport device 00 90 e8 3b 89 9c - MAC  MOXA Nport device 75 00 - : 1900 +   (1900 + 117 = 2017) 04 00 - :     1 -     01 00 –   0f 00 –  (15) 09 00 –  (9) 17 00 –  (23) 36 00 –  (36) 00 00 –   

पैकेट का आकार एक तरह से एन्कोड किया गया है, और सभी संख्यात्मक मान (वर्ष, महीना, दिन ...) दूसरे में। इससे हम यह निष्कर्ष निकाल सकते हैं कि 75 00 04 00 ....... से शुरू होने वाले उपयोगकर्ता भाग का प्रसंस्करण किसी अन्य प्रोग्रामर द्वारा लिखा गया था।

संक्षेप में: कम से कम 3 अलग-अलग लोगों ने एक्सचेंज प्रोटोकॉल लिखा, 1 ने डेटा के उपयोगकर्ता भाग के प्रसंस्करण को लिखा, और कम से कम 1 ने WEB इंटरफ़ेस हैंडलर लिखा। मेरी गणना के अनुसार, लगभग 5 प्रोग्रामर ने परियोजना पर काम किया।
आपने कितना गिना?

* इस मामले में, "हिंदू" शब्द का अर्थ है एक कर्मचारी जो भोजन और बंधक के लिए अपने कर्तव्यों को पूरा करता है, जो नियोक्ता कंपनी की वैश्विक योजनाओं में वास्तव में देरी किए बिना यहां से और दोपहर के भोजन से पहले कोड करने में सक्षम है।

PS यह आलेख उन सामग्रियों पर लिखा गया था जो 2017 में विकास में थे, इसलिए इस वर्ष बहुत से डेटा में सटीक रूप से डेटिंग शामिल है। एक कार्यकारी मसौदे के ढांचे के भीतर प्रोटोकॉल की जांच की गई थी, लेकिन चूंकि मन ने विपणन पर जीत हासिल की और मामला एक ही कार्यशील प्रोटोटाइप के चरण से आगे नहीं बढ़ा। मैं इस परियोजना के सभी विकास को सार्वजनिक डोमेन में प्रकाशित करता हूं, क्योंकि मेरा मानना ​​है कि यह जानकारी डेवलपर समुदाय के लिए उपयोगी होगी।

पीपीएस मूल लेख हमेशा की तरह मेरे निजी ब्लॉग पर

Source: https://habr.com/ru/post/hi478642/


All Articles