कंप्यूटर संचार के लिए एंबेडेड के लिए अच्छा RS232-आधारित प्रोटोकॉल


10

मैं एक ऐसी परियोजना पर काम कर रहा हूं जिसमें एक दूरस्थ Arduino और एक कंप्यूटर के बीच डेटा संचार का एक अच्छा हिस्सा शामिल है। वायरलेस कनेक्शन XBees की एक जोड़ी के माध्यम से है, इसलिए हमारे पास Arduino और कंप्यूटर के बीच RS232 लिंक है। छोटी मात्रा में डेटा के लिए, कुछ सरल संचार प्रोटोकॉल को एक साथ फेंकना काफी आसान है। बड़ी परियोजनाओं के लिए, हालांकि, कुछ अच्छे सरल संचार प्रोटोकॉल क्या हैं?

मैंने MODBUS को देखा है, जो एक व्यवहार्य विकल्प की तरह लगता है, लेकिन मैं यह देखना चाहता था कि क्या अन्य बेहतर विकल्प थे या नहीं।


2
वास्तव में क्या आवश्यकताएं हैं?

सामान्य सुझावों की तलाश में। सादगी और कम ओवरहेड परियोजना के लिए मुख्य लक्ष्य होंगे।
कंप्यूटरिश

1
क्षमा करें, मेरा यह भी मतलब था: कितना डेटा, कितनी तेजी से

मेरे पास इसके लिए मात्रात्मक उपाय नहीं हैं, लेकिन बहुत कुछ नहीं है और गति बहुत बड़ा मुद्दा नहीं है।
कम्प्यूटरिश

7
बहुत कुछ नहीं है और गति एक मुद्दा नहीं है जो मानव पठनीय कुछ के लिए दृढ़ता से बहस करता है, क्योंकि यह विकास और डिबगिंग को बहुत आसान बनाता है। यह बहुत अच्छा है जब आप एक टर्मिनल कनेक्ट कर सकते हैं और लिंक के दोनों छोर के लिए खुद को स्थानापन्न कर सकते हैं।
क्रिस स्ट्रैटन

जवाबों:


4

ओपी एक सीरियल प्रोटोकॉल के लिए ऐसी स्थिति के लिए पूछता है, जहां " बहुत अधिक [डेटा का नहीं] और गति बहुत बड़ा मुद्दा नहीं है "। MODBUS का उल्लेख OP MODBUS में RS-485 पर किया गया है जो एक तेज़ प्रोटोकॉल नहीं है। जबकि यह एक युक्ति नहीं है, यह आला के बारे में एक विचार देता है।

मैं इस आला के लिए केवल दो सामान्य मानक प्रोटोकॉल के बारे में सोच सकता हूं:

  • NEMA 0183 । सादा पाठ ASCII प्रोटोकॉल। मानव पठनीय। बिंदु-से-केवल बिंदु। मल्टी-ड्रॉप बस का समर्थन नहीं करता है।
  • MODBUS जो पहले से ही ओपी में उल्लिखित था

बहुत बार, जब एम्बेडेड प्रोग्रामर ओपी जैसी स्थिति में होते हैं, तो वे खरोंच से अपने स्वयं के सीरियल संचार प्रोटोकॉल डिजाइन करते हैं।


10

कुछ एम्बेडेड सिस्टम प्रोटोकॉल, उनमें से कई बेहद सरल हैं, एंबेडेड सिस्टम में सूचीबद्ध हैं : सामान्य प्रोटोकॉल , सहित:

  • टिनी एंबेडेड नेटवर्क (TEN)
  • नेटवर्क एंबेडेड सिस्टम (MINES) के लिए माइक्रोकंट्रोलर दुभाषिया
  • फिर भी एक और स्केलेबल प्रोटोकॉल (YASP)
  • स्थानीय इंटरकनेक्ट नेटवर्क (लिन)
  • सीरियल सर्वो नियंत्रक (एसएससी)
  • रोबोट ऑपरेटिंग सिस्टम सीरियल (रोसेरीअल)
  • netstring
  • विभिन्न क्षेत्र busses
  • Modbus
  • नियंत्रक क्षेत्र नेटवर्क (CAN)
  • फर्मेटा (धन्यवाद, जिप्पी!)

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


6

मैं अपना स्वयं का रोल करूंगा, और इसे यथासंभव सरल रखूंगा।

मैंने विभिन्न नियंत्रण अनुप्रयोगों के लिए कई सीरियल प्रोटोकॉल के साथ काम किया है, और कुछ चीजें जो मैं आपको सुझा सकता हूं, वे हैं:

  • ऐसे वर्णों को प्रारंभ और बंद करना, जिनका अन्यत्र उपयोग नहीं किया जाता है
  • किसी प्रकार की जाँच / त्रुटि जाँच
  • प्रवाह नियंत्रण / सिग्नलिंग की कुछ विधि, खासकर यदि आपको द्वि-दिशात्मक कोम की आवश्यकता है।

एक बहुत ही मूल उदाहरण के रूप में, आप अपने डेटा को ASCII वर्णों में परिवर्तित कर सकते हैं और इसे इस तरह से शुरू / रोकें पात्रों के अंदर चिपका सकते हैं:

बाइट मान 0x7A भेजने के लिए, भेजा जाने वाला डेटा (7A) होगा, जहां (a) चुने गए स्टार्ट / स्टॉप चार्ट और 7 और A दो एसेसी चार्ट हैं। ठीक है यह बहुत सारे ओवरहेड जोड़ता है, लेकिन इसका मतलब है कि आप मूल टर्मिनल सॉफ़्टवेयर के साथ डीबग कर सकते हैं।


5

यदि आपका डेटा XBees से गुजर रहा है, तो आपको मॉड्यूल को बच के वर्णों के साथ API मोड में रखना चाहिए, अपने डेटा को तार्किक पैकेट में विभाजित करना चाहिए, और इस तथ्य का लाभ उठाना चाहिए कि API मोड में एक पैकेट जो एक XBee को दिया गया है, वह या तो अंतरंग रूप से आएगा या नहीं। बिल्कुल नहीं। 1-255 बाइट्स के प्रसारण के आसपास अपने प्रोटोकॉल को डिज़ाइन करें, और XBee मॉड्यूल को इस बारे में चिंता करने दें कि प्रत्येक चंक के भीतर डेटा कैसे वितरित किया जाए। व्यक्तिगत पैकेट या उनके बीच उपखंडों की अखंडता बनाए रखने के बारे में चिंता न करें। डिजी मॉड्यूल उसकी देखभाल करने का एक अच्छा काम करेंगे। सबसे बड़ी बात जो आपको चिंता करने की जरूरत है वह यह है कि एक पैकेट को प्रसारित करने वाले नोड का मानना ​​है कि यह वितरित नहीं किया गया था और एक प्रतिस्थापन भेजता है, प्राप्तकर्ता इसे किसी भी तरह प्राप्त कर सकता है - संभवतः इसके बाद भी यह प्रतिस्थापन प्राप्त करता है। चीजें आसान हो सकती हैं यदि आप अपने प्रोटोकॉल को डिजाइन करते हैं ताकि एक तरफ "मास्टर" हो; यदि स्वामी डेटा का एक टुकड़ा मांगता है, तो दास को इसे एक बार भेजना चाहिए और इस बारे में चिंता नहीं करनी चाहिए कि क्या यह मास्टर को मिलता है। यदि मास्टर को वह डेटा नहीं मिलता है जो वह चाहता है, तो वह उसे फिर से अनुरोध कर सकता है।

दास को डेटा के लिए किसी प्रकार के अनुक्रम संख्या निर्दिष्ट करना चाहिए, और स्वामी को अनुक्रम संख्या को उन अनुरोधों को असाइन करना चाहिए जो दास को बदलते हैं। यदि मास्टर का अनुरोध फॉर्म का है "पहला आइटम भेजें जिसका अनुक्रम संख्या XXX से अधिक है", और दास द्वारा डेटा आइटम के प्रत्येक टुकड़े में अपना अनुक्रम नंबर और पिछले आइटम शामिल हैं (यदि वे लगातार क्रमांकित नहीं हैं। ), देर से पहुंचने वाले पैकेट गुलाम को स्वामी के पास डेटा भेजने का कारण बन सकते हैं, लेकिन परिणामी देर से पहुंचने वाली प्रतिक्रियाओं को अनदेखा करने में मास्टर को कोई कठिनाई नहीं होगी। यदि दास को एक राज्य-परिवर्तन अनुरोध प्राप्त होता है, जिसका अनुक्रम संख्या पहले के अनुरोध के नीचे है, तो उसे उस अनुरोध को अनदेखा करना चाहिए, क्योंकि यह प्राप्त होने से पहले ही इसे सुपरसीड किया गया था।


3

फर्मेटा के बारे में कैसे ? इसमें विभिन्न ऑपरेटिंग सिस्टम और प्रोग्रामिंग भाषाओं के लिए समर्थन है। नियंत्रक पक्ष Arduino और PICduino समर्थित हैं, लेकिन नंगे माइक्रोकंट्रोलर को पोर्ट करने के लिए बहुत मुश्किल नहीं होना चाहिए।


3

मेरे पास इस तरह का एक प्रश्न था और मुझे कभी भी थोड़ा सा AVRs आदि के लिए कुछ भी सरल और छोटा नहीं मिला, इसलिए मैंने CAN से प्रेरित कुछ रोल किया। इसे MIN (माइक्रोकंट्रोलर इंटरकनेक्ट नेटवर्क) कहा जाता है:

https://github.com/min-protocol/min

मैंने इसके बारे में यहाँ ब्लॉग किया है:

https://kentindell.wordpress.com/2015/02/18/micrcontroller-interconnect-network-min-version-1-0/

ब्लॉक डेटा के लिए वहां हुक हैं, लेकिन यह ज्यादातर सेंसर / एक्ट्यूएटर्स के संकेतों पर लक्षित है। मैंने सिग्नलों का वर्णन करने के लिए JSON प्रारूप और MIN तख्ते के भीतर उनकी पैकिंग को परिभाषित किया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.