घर / समीक्षा / COM पोर्ट का विवरण। COM पोर्ट क्या है। मॉडेम और COM पोर्ट

COM पोर्ट का विवरण। COM पोर्ट क्या है। मॉडेम और COM पोर्ट

हाल ही में, डेटा ट्रांसमिशन की सीरियल विधि समानांतर की जगह ले रही है।
आपको उदाहरणों के लिए दूर देखने की जरूरत नहीं है: USB और SATA बसों की उपस्थिति अपने लिए बोलती है।
दरअसल, समानांतर बस को स्केल करना मुश्किल है (लंबी केबल, उच्च बस घड़ी की दर), यह आश्चर्य की बात नहीं है कि प्रौद्योगिकियां पीछे की ओर समानांतर बसों में बदल रही हैं।

सीरियल इंटरफेस

आज, कई अलग-अलग सीरियल डेटा इंटरफेस हैं।
पहले से बताए गए USB और SATA के अलावा, हम कम से कम दो प्रसिद्ध RS-232 और MIDI मानकों (उर्फ गेमपोर्ट) को भी याद कर सकते हैं।
वे सभी एक ही हैं - प्रत्येक बिट सूचना का सीरियल ट्रांसमिशन, या सीरियल इंटरफ़ेस।
इस तरह के इंटरफेस के बहुत सारे फायदे हैं, और उनमें से सबसे महत्वपूर्ण कनेक्टिंग तारों की एक छोटी संख्या है, और, परिणामस्वरूप, कम कीमत।

डेटा स्थानांतरण

सीरियल संचार दो तरीकों से लागू किया जा सकता है: अतुल्यकालिक और तुल्यकालिक।

सिंक्रोनस डेटा ट्रांसमिशन में प्रेषित सिग्नल में घड़ी की जानकारी को शामिल करके या एक विशेष सिंक लाइन का उपयोग करके रिसीवर और ट्रांसमीटर के संचालन को सिंक्रनाइज़ करना शामिल है।
रिसीवर और ट्रांसमीटर को एक विशेष सिंक्रोनाइज़ेशन केबल से जोड़ा जाना चाहिए, जो सुनिश्चित करता है कि डिवाइस एक ही आवृत्ति पर काम करते हैं।

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

यह ध्यान देने योग्य है कि ऐसा चेक आपको केवल एक त्रुटि का पता लगाने की अनुमति देता है यदि केवल एक बिट गलत तरीके से प्रेषित किया गया था, यदि कई बिट्स गलत तरीके से प्रेषित किए गए थे, तो यह चेक पहले से ही गलत हो जाता है।
अगला डेटा पैकेट भेजना स्टॉप बिट भेजने के बाद किसी भी समय हो सकता है, और निश्चित रूप से, स्टार्ट बिट से शुरू होना चाहिए।
यह अस्पष्ट है?

खैर, अगर सब कुछ कंप्यूटर तकनीकसरल थे, तो कोई भी गृहिणी बहुत पहले पकौड़ी के समानांतर नए प्रोटोकॉल गढ़ती थी ...
आइए प्रक्रिया को एक अलग तरीके से देखने का प्रयास करें।
डेटा पैकेट में प्रेषित होता है, लगभग आईपी पैकेट की तरह, सूचना बिट्स डेटा के साथ चलते हैं, इन बिट्स की संख्या 2 से 3 और डेढ़ तक भिन्न हो सकती है।
आधे के साथ ?!
हाँ, आपने सही सुना, आधे के साथ!

स्टॉप बिट, या स्टॉप बिट के अनुरूप ट्रांसमिटेड सिग्नल की अवधि एक बिट से संबंधित सिग्नल से अधिक हो सकती है, लेकिन दो बिट्स से कम हो सकती है।
तो, एक पैकेट हमेशा एक स्टार्ट बिट से शुरू होता है, जो हमेशा शून्य होता है, उसके बाद डेटा बिट्स, फिर एक पैरिटी बिट, और फिर एक स्टॉप बिट, जो हमेशा एक होता है।
फिर, कुछ मनमाने समय के बाद, मास्को पर धड़कनों का मार्च जारी है।

इस संचरण विधि का तात्पर्य है कि रिसीवर और ट्रांसमीटर को एक ही गति (अच्छी तरह से, या लगभग एक ही गति से) पर काम करना चाहिए, अन्यथा रिसीवर के पास आने वाले डेटा बिट्स को संसाधित करने का समय नहीं होगा, या एक नए के लिए पुराने बिट को लेना होगा। .
इससे बचने के लिए, प्रत्येक बिट को स्ट्रोब किया जाता है, अर्थात, इसे एक विशेष सिग्नल के साथ सिंक्रोनाइज़ किया जाता है - डिवाइस के अंदर उत्पन्न एक "स्ट्रोब"।
अतुल्यकालिक उपकरणों के लिए कई विशिष्ट गति हैं - 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600 और 115200 बिट प्रति सेकंड।

आपने शायद सुना है कि डेटा ट्रांसफर दर को मापने के लिए "बॉड" का उपयोग एक इकाई के रूप में किया जाता है - लाइन की स्थिति को बदलने की आवृत्ति, और यह मान डेटा ट्रांसफर दर के साथ तभी मेल खाएगा जब सिग्नल में दो में से एक मान हो सकता है .
यदि एक सिग्नल परिवर्तन में कई बिट्स एन्कोडेड हैं (और यह कई मोडेम के मामले में है), तो ट्रांसमिशन दर और लाइन परिवर्तन आवृत्ति पूरी तरह से अलग मान होंगे।

अब रहस्यमय शब्द "डेटा पैकेट" के बारे में कुछ शब्द।
पैकेज के तहत इस मामले मेंस्टार्ट और स्टॉप बिट्स के बीच प्रेषित बिट्स के सेट को संदर्भित करता है।
इनकी संख्या पांच से आठ तक हो सकती है।
किसी को आश्चर्य हो सकता है कि ठीक पाँच से आठ बिट क्यों?
एक पैकेट के भीतर एक किलोबाइट डेटा एक बार में स्थानांतरित क्यों नहीं किया जाता है?

उत्तर स्पष्ट है: छोटे डेटा पैकेटों को प्रेषित करते समय, हम उनके साथ तीन सर्विस बिट्स (डेटा के 50 से 30 प्रतिशत तक) भेजकर खो सकते हैं, लेकिन अगर ट्रांसमिशन के दौरान पैकेट दूषित हो जाता है, तो हम इसे आसानी से पहचान सकते हैं (याद रखें) समता बिट?) और जल्दी से उसे फिर से प्रसारित करें।
लेकिन एक किलोबाइट डेटा में, त्रुटि का पता लगाना मुश्किल होगा, और इसे प्रसारित करना अधिक कठिन होगा।

एसिंक्रोनस सीरियल डेटा ट्रांसफर डिवाइस का एक उदाहरण एक कंप्यूटर COM पोर्ट, एक पसंदीदा ट्रुसार्डी-डिज़ाइन किया गया मॉडेम और एक ही पोर्ट से जुड़ा एक माउस है, जो किसी कारण से संकीर्ण दिमाग वाले सचिव हमेशा PS / 2 में धकेलने की कोशिश करते हैं।
ये सभी उपकरण RS-232 इंटरफ़ेस पर या इसके अतुल्यकालिक भाग पर काम करते हैं, क्योंकि मानक सिंक्रोनस डेटा ट्रांसफर का भी वर्णन करता है।

AMD Radeon सॉफ्टवेयर एड्रेनालिन संस्करण ड्राइवर 19.9.2 वैकल्पिक

नया AMD Radeon सॉफ़्टवेयर एड्रेनालिन संस्करण 19.9.2 वैकल्पिक ड्राइवर बॉर्डरलैंड 3 में प्रदर्शन में सुधार करता है और Radeon इमेज शार्पनिंग के लिए समर्थन जोड़ता है।

संचयी विंडोज सुधार 10 1903 KB4515384 (जोड़ा गया)

10 सितंबर, 2019 को, माइक्रोसॉफ्ट ने विंडोज 10 संस्करण 1903 - KB4515384 के लिए कई सुरक्षा सुधारों और एक बग के लिए एक फिक्स के साथ एक संचयी अद्यतन जारी किया। विंडोज़ कामखोज और उच्च CPU उपयोग का कारण बना।

माइक्रोकंट्रोलर को कंप्यूटर से जोड़ने के लिए अक्सर COM पोर्ट का उपयोग किया जाता है। इस लेख में, हम दिखाएंगे कि कंप्यूटर से कंट्रोल कमांड कैसे भेजें और कंट्रोलर से डेटा कैसे भेजें।

काम की तैयारी

अधिकांश माइक्रोकंट्रोलर में एकाधिक I/O पोर्ट होते हैं। पीसी के साथ संचार के लिए यूएआरटी प्रोटोकॉल सबसे उपयुक्त है। यह एक सीरियल एसिंक्रोनस डेटा ट्रांसफर प्रोटोकॉल है। इसे USB इंटरफ़ेस में बदलने के लिए, बोर्ड में USB-RS232 कनवर्टर - FT232RL है।
इस आलेख में उदाहरणों को चलाने के लिए आपको केवल एक Arduino- संगत बोर्ड की आवश्यकता है। हम प्रयोग करते हैं । सुनिश्चित करें कि आपके बोर्ड में पिन 13 से जुड़ी एक एलईडी और एक रीसेट बटन है।

उदाहरण के लिए, आइए बोर्ड पर एक कोड अपलोड करें जो ASCII तालिका प्रदर्शित करता है। ASCII दशमलव अंक, लैटिन और राष्ट्रीय अक्षर, विराम चिह्न और नियंत्रण वर्णों का प्रतिनिधित्व करने के लिए एक एन्कोडिंग है।

इंट सिंबल = 33; शून्य सेटअप () (सीरियल। शुरू (9600); सीरियल। प्रिंट्लन ("एएससीआईआई टेबल ~ कैरेक्टर मैप");) शून्य लूप () (सीरियल। राइट (प्रतीक); सीरियल। प्रिंट (", दिसंबर:"); सीरियल .प्रिंट (प्रतीक); सीरियल.प्रिंट (", हेक्स:"); सीरियल.प्रिंट (प्रतीक, हेक्स); सीरियल.प्रिंट (", अक्टूबर:"); सीरियल.प्रिंट (प्रतीक, अक्टूबर) " , बिन: " ) ; Serial.println (प्रतीक , बिन) ; यदि (प्रतीक == 126 ) (जबकि (सत्य) (जारी रखें ; ) ) प्रतीक+ + ; )

प्रतीक चर प्रतीक कोड को संग्रहीत करता है। तालिका 33 से शुरू होती है और 126 पर समाप्त होती है, इसलिए प्रतीक को शुरू में 33 पर सेट किया जाता है।
UART पोर्ट का संचालन शुरू करने के लिए, फ़ंक्शन का उपयोग करें सीरियल.बेगिन (). इसका एकमात्र पैरामीटर गति है। ट्रांसमिशन प्रोटोकॉल एसिंक्रोनस होने के कारण ट्रांसमिटिंग और रिसीविंग साइड्स पर स्पीड पर पहले से बातचीत की जानी चाहिए। इस उदाहरण में, गति 9600bps है।
पोर्ट के लिए मान लिखने के लिए तीन कार्यों का उपयोग किया जाता है:

  1. सीरियल.राइट ()- पोर्ट को बाइनरी फॉर्म में डेटा लिखता है।
  2. सीरियल.प्रिंट ()कई मूल्य हो सकते हैं, लेकिन वे सभी मानव-अनुकूल रूप में जानकारी प्रदर्शित करने का काम करते हैं। उदाहरण के लिए, यदि पास करने के लिए पैरामीटर के रूप में निर्दिष्ट जानकारी उद्धरणों में संलग्न है, तो टर्मिनल प्रोग्राम इसे अपरिवर्तित प्रदर्शित करेगा। यदि आप कोई मान प्रदर्शित करना चाहते हैं निश्चित प्रणालीकलन, फिर आपको एक सेवा शब्द जोड़ने की आवश्यकता है: बिन-बाइनरी, ओसीटी - ऑक्टल, डीईसी - दशमलव, हेक्स - हेक्साडेसिमल। उदाहरण के लिए, सीरियल.प्रिंट (25, हेक्स).
  3. सीरियल.प्रिंट्लन ()वही करता है सीरियल.प्रिंट (), लेकिन फिर भी जानकारी प्रदर्शित करने के बाद स्ट्रिंग का अनुवाद करता है।

प्रोग्राम के संचालन की जांच करने के लिए, यह आवश्यक है कि कंप्यूटर में एक टर्मिनल प्रोग्राम हो जो COM पोर्ट से डेटा प्राप्त करता हो। पर अरुडिनो आईडीईपहले से ही निर्मित। इसे कॉल करने के लिए, मेनू से टूल्स-> पोर्ट मॉनिटर चुनें। इस उपयोगिता की खिड़की बहुत सरल है:

अब रिस्टार्ट बटन पर क्लिक करें। एमके एएससीआईआई तालिका को रीबूट और प्रदर्शित करेगा:

कोड के इस भाग पर ध्यान दें:

अगर (प्रतीक = = 126) (जबकि (सत्य) (जारी रखें;))

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

पीसी से कमांड भेजना

ऐसा करने से पहले, आपको यह पता लगाना होगा कि COM पोर्ट कैसे काम करता है।
सबसे पहले, सभी एक्सचेंज मेमोरी बफर के माध्यम से होते हैं। यानी जब आप पीसी से डिवाइस में कुछ भेजते हैं तो डेटा को मेमोरी के किसी खास सेक्शन में रखा जाता है। जैसे ही डिवाइस तैयार हो जाता है, यह बफर से डेटा पढ़ता है। फ़ंक्शन आपको बफर की स्थिति की जांच करने की अनुमति देता है धारावाहिक उपलब्ध (). यह फ़ंक्शन बफ़र में बाइट्स की संख्या देता है। इन बाइट्स को घटाने के लिए, आपको फ़ंक्शन का उपयोग करने की आवश्यकता है सीरियल.रीड (). आइए देखें कि ये फ़ंक्शन एक उदाहरण के साथ कैसे काम करते हैं:

इंट वैल = 0; शून्य सेटअप () (सीरियल। शुरू (9600);) शून्य लूप () (यदि (सीरियल। उपलब्ध ()> 0) (वैल = सीरियल। रीड (); सीरियल। प्रिंट ("मुझे प्राप्त हुआ:"); सीरियल। राइट (वैल); सीरियल.प्रिंट्लन ();))

माइक्रोकंट्रोलर की मेमोरी में कोड लोड होने के बाद, COM पोर्ट मॉनिटर खोलें। एक अक्षर टाइप करें और एंटर दबाएं। प्राप्त डेटा फ़ील्ड में आप देखेंगे: "मुझे प्राप्त हुआ: एक्स", जहां के बजाय एक्सआपके द्वारा दर्ज किया गया चरित्र होगा।
कार्यक्रम मुख्य लूप में अनिश्चित काल तक घूमता है। जिस समय पोर्ट पर एक बाइट लिखा जाता है, सीरियल उपलब्ध () फ़ंक्शन 1 मान लेता है, अर्थात शर्त पूरी होती है सीरियल.उपलब्ध ()> 0. अगला कार्य सीरियल.रीड ()इस बाइट को पढ़ता है, जिससे बफर साफ़ हो जाता है। उसके बाद, आपके लिए पहले से ज्ञात कार्यों का उपयोग करके, आउटपुट होता है।
Arduino IDE के बिल्ट-इन COM पोर्ट मॉनिटर के उपयोग की कुछ सीमाएँ हैं। बोर्ड से COM पोर्ट पर डेटा भेजते समय, आउटपुट को एक मनमाना प्रारूप में व्यवस्थित किया जा सकता है। और पीसी से बोर्ड में भेजते समय, वर्णों का स्थानांतरण ASCII तालिका के अनुसार होता है। इसका मतलब यह है कि जब आप दर्ज करते हैं, उदाहरण के लिए, वर्ण "1", बाइनरी "00110001" (अर्थात दशमलव में "49") COM पोर्ट के माध्यम से भेजा जाता है।
आइए कोड को थोड़ा बदलें और इस कथन की जाँच करें:

इंट वैल = 0; शून्य सेटअप () (सीरियल। शुरू (9600);) शून्य लूप () (यदि (सीरियल। उपलब्ध ()> 0) (वैल = सीरियल। रीड (); सीरियल। प्रिंट ("मुझे प्राप्त हुआ:"); सीरियल। प्रिंट्लन (वैल, बिन); ))

डाउनलोड करने के बाद, पोर्ट मॉनिटर में "1" भेजते समय, आप प्रतिक्रिया में देखेंगे: "मुझे प्राप्त हुआ: 110001"। आप आउटपुट स्वरूप बदल सकते हैं और देख सकते हैं कि बोर्ड अन्य वर्णों के साथ क्या स्वीकार करता है।

COM पोर्ट के माध्यम से डिवाइस नियंत्रण

जाहिर है, एक पीसी से कमांड द्वारा, आप माइक्रोकंट्रोलर के किसी भी कार्य को नियंत्रित कर सकते हैं। प्रोग्राम डाउनलोड करें प्रबंधन कार्यनेतृत्व करना:

इंट वैल = 0; शून्य सेटअप () (सीरियल। शुरू (9600);) शून्य लूप () (यदि (सीरियल। उपलब्ध ()> 0) (वैल = सीरियल। पढ़ें (); अगर (वैल = = "एच") डिजिटलवाइट (13, उच्च); अगर (वैल = = "एल") डिजिटलवाइट (13, कम);))

जब "H" वर्ण को COM पोर्ट पर भेजा जाता है, तो 13वें आउटपुट पर LED जलती है, और जब "L" भेजा जाता है, तो LED बाहर चली जाएगी।
यदि, COM पोर्ट से डेटा प्राप्त करने के परिणामों के आधार पर, आप चाहते हैं कि प्रोग्राम मुख्य लूप में विभिन्न क्रियाएं करें, तो आप मुख्य लूप में स्थितियों की जांच कर सकते हैं। उदाहरण के लिए।

एक COM पोर्ट, या सीरियल पोर्ट, एक द्विदिश सीरियल इंटरफ़ेस है जिसे बाइट डेटा का आदान-प्रदान करने के लिए डिज़ाइन किया गया है। सबसे पहले, इस पोर्ट का उपयोग टर्मिनल को जोड़ने के लिए किया जाता था, और फिर मॉडेम और माउस के लिए। अब इसका उपयोग स्रोत को जोड़ने के साथ-साथ एम्बेडेड कंप्यूटिंग सिस्टम के प्रसंस्करण के साथ संवाद करने के लिए किया जाता है।

प्रयोग

इसलिए, इससे पहले कि हम COM पोर्ट क्या है, इसके बारे में अधिक विस्तार से बात करें, हमें इसका अर्थ समझने के लिए अतीत को देखने की जरूरत है। वस्तुतः 15 साल पहले, रियर पैनल पर स्थित एक विशेष मानक कनेक्टर का उपयोग करके उपकरणों को कंप्यूटर से जोड़ने के लिए एक विधि का उपयोग किया गया था। सिस्टम ब्लॉकएक विशेष RS-232 सीरियल केबल का उपयोग करना। इस विधि के कई नुकसान हैं। आधुनिक मानकों के अनुसार ऐसी केबल अत्यंत कम डेटा अंतरण दर प्रदान करती है - लगभग सौ किलोबिट प्रति सेकंड। इसके अलावा जब कनेक्टर्स का भौतिक कनेक्शन बनाया गया था, तो उपकरण को बंद करना आवश्यक था, और वे स्वयं एक-दूसरे से शिकंजा के साथ जुड़े हुए थे जो विश्वसनीयता सुनिश्चित करते थे, जबकि उनके आयाम काफी आकार में भिन्न होते थे।

इतिहास का हिस्सा

उस समय के कंप्यूटरों पर COM पोर्ट को पारंपरिक रूप से 1 या 2 नंबर दिया गया था, क्योंकि आमतौर पर उनमें से दो से अधिक नहीं होते थे। यदि आवश्यक हो तो अतिरिक्त पोर्ट स्थापित किए जा सकते हैं। जब उपयोगकर्ता ने कॉन्फ़िगर किया है सॉफ्टवेयर, यह आवश्यक था कि भ्रमित न हों और ठीक उसी को स्थापित करें जिससे कनेक्शन प्रदान किया गया था आवश्यक उपकरण. प्रत्येक COM पोर्ट को सही गति सेटिंग्स की आवश्यकता होती है, साथ ही कई अन्य रहस्यमय पैरामीटर जो केवल विशेषज्ञों के एक संकीर्ण सर्कल के लिए जाने जाते थे। उपकरणों के कनेक्शन के सफल होने के लिए, सभी आवश्यक मापदंडों को कहीं से या प्रयोगात्मक रूप से चुना जाना था, क्योंकि इस मामले में कोई स्वचालित कॉन्फ़िगरेशन नहीं था। इसके अलावा, COM पोर्ट के माध्यम से कनेक्शन ने किसी भी सॉफ़्टवेयर को मनमाने बाहरी उपकरणों के साथ जोड़ने की अनुमति दी, यहां तक ​​\u200b\u200bकि पूरी तरह से असंगत भी, जिससे सेटिंग्स प्रक्रिया के दौरान बड़ी संख्या में त्रुटियां हुईं।

आधुनिकता

अब COM पोर्ट के माध्यम से कनेक्शन पूरी तरह से और अधिक द्वारा प्रतिस्थापित किया गया है आधुनिक तरीका, जिसे कार्यान्वयन के लिए विशेष ज्ञान की आवश्यकता नहीं है, अर्थात् USB पोर्ट के माध्यम से। यह विधि पहले बताए गए सभी नुकसानों से रहित है। हालाँकि, सभी प्रकार के GPS उपकरण और बहुत ही विषम सॉफ़्टवेयर को जोड़ने की अनुकूलता के लिए आधुनिक मानक COM पोर्ट की अवधारणा के आसपास काफी समय पहले बनाए गए थे, जो इस समय पुरातन हो गए हैं।

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

वर्चुअल COM पोर्ट

एक रास्ता निकाला गया था, अर्थात्, "वर्चुअल" COM पोर्ट विकसित किए गए थे। यह पता चला है कि पीडीए का आंतरिक उपकरण, उदाहरण के लिए, एक जीपीएस रिसीवर, सॉफ्टवेयर में COM पोर्ट के रूप में सिम्युलेटेड है, जबकि हार्डवेयर के संदर्भ में ऐसा नहीं है। उसी समय, एक प्रोग्राम जिसे इस तरह के मानक के माध्यम से इंटरफेस करने के लिए डिज़ाइन किया गया है, इससे कोई फर्क नहीं पड़ता कि इसे कैसे कार्यान्वित किया जाता है। यहां वर्चुअल सिमुलेशन की उपस्थिति की अनुमति है, न कि हार्डवेयर कार्यान्वयन की अनिवार्य उपस्थिति। इसलिए आधुनिक उपकरणों के साथ पुरानी शैली के जीपीएस कार्यक्रमों की संगतता सुनिश्चित करना संभव है।

परिवर्तन किए

इसी समय, COM पोर्ट का प्रबंधन महत्वपूर्ण रूप से नहीं बदला है। उपयोगकर्ता, पुराने तरीके से, जटिल सेटिंग्स को लगभग मैन्युअल रूप से बनाना चाहिए। हालाँकि, एक आधुनिक COM पोर्ट अब सिस्टम यूनिट के रियर पैनल पर स्थित भारी डिवाइस नहीं है, बल्कि एक पूरी तरह से अलग डिवाइस है। और यहाँ पूरी बात यह है कि एक सॉफ्टवेयर की दृष्टि से, उनके सभी कार्यान्वयन फेसलेस दिखते हैं, यानी वर्चुअल और रियल पोर्ट में कोई अंतर नहीं है। सॉफ्टवेयर के लिए, पोर्ट केवल पीडीए निर्माताओं द्वारा पूरी तरह से यादृच्छिक आधार पर उन्हें सौंपे गए नंबरों से भिन्न होते हैं। उदाहरण के लिए, ASUS रिसीवर आमतौर पर COM5 पर स्थित होता है, जबकि PocketLOOX 560 रिसीवर को COM8 पर दिखाता है। यह पता चला है कि एक प्रोग्राम जो जीपीएस रिसीवर से डेटा प्राप्त करना चाहता है, उसके पास शुरू में सशर्त संख्या के बारे में कोई विश्वसनीय जानकारी नहीं है, जिसके तहत पोर्ट दिखाई देता है, जो इस पीडीए पर रिसीवर के लिए उपयुक्त है।

यह कैसे काम करता है?

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

कॉम पोर्ट ऑपरेशन

COM पोर्ट के लिए, एक अतुल्यकालिक यूनिवर्सल ट्रांसीवर चिप का उपयोग आधार के रूप में किया जाता है। यह microcircuit कई किस्मों में मौजूद है: Intel 16550A, 16550, 16450, 8250। प्रत्येक COM पोर्ट के लिए, इसमें डेटा रिसीवर और ट्रांसमीटर रजिस्टर होते हैं, साथ ही कई नियंत्रण रजिस्टर होते हैं जिन्हें BIOS, Windows और MS DOS प्रोग्राम के माध्यम से एक्सेस किया जा सकता है। पर नवीनतम संस्करणमाइक्रोचिप में प्रेषित और प्राप्त डेटा के अस्थायी भंडारण के लिए बफ़र्स का एक सेट होता है। इस संभावना के लिए धन्यवाद, केंद्रीय प्रोसेसर के काम को कम बार बाधित करना संभव है, साथ ही डेटा ट्रांसमिशन की गति को समन्वयित करना भी संभव है।

मुख्य सेटिंग्स

COM पोर्ट डिवाइस निम्नलिखित विशिष्ट विशेषताओं को मानता है:

सूचना के इनपुट और आउटपुट के लिए बंदरगाह का आधार पता;

हार्डवेयर इंटरप्ट नंबर;

सूचना के एक ब्लॉक का आकार;

जिस गति से डेटा प्रसारित होता है;

ईमानदारी का पता लगाने मोड;

सूचना प्रवाह प्रबंधन विधि;

स्टॉप बिट्स की संख्या।

कंप्यूटर का COM पोर्ट कैसे चेक करें? क्या ध्यान देना है?

जैसा कि पहले उल्लेख किया गया है, इस प्रकार का पोर्ट बिट-लेवल सीरियल तरीके के लिए एक द्वि-दिशात्मक इंटरफ़ेस है। यहां समानांतर पोर्ट की तुलना में एक विशिष्ट विशेषता डेटा का बिट दर बिट स्थानांतरण है। COM पोर्ट की शारीरिक रचना ऐसी है कि यह कंप्यूटर पर एकमात्र ऐसा नहीं है जो सीरियल डेटा ट्रांसफर विधि का उपयोग करता है। उदाहरण के लिए, ईथरनेट या यूएसबी जैसे इंटरफेस भी एक समान सिद्धांत का उपयोग करते हैं, लेकिन ऐतिहासिक रूप से ऐसा हुआ है कि यह आरएस 232 मानक सीरियल के पोर्ट को कॉल करने के लिए प्रथागत है।

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

सीरियल पोर्ट डेवलपर्स द्वारा उनके रखरखाव और उपयोग में आसानी के लिए पसंद किए जाते हैं।

और निश्चित रूप से, टर्मिनल प्रोग्राम के कंसोल पर लिखना सब अच्छा है, लेकिन मुझे अपना खुद का एप्लिकेशन चाहिए, जो स्क्रीन पर एक कुंजी दबाकर आपके लिए आवश्यक कार्य करता है;)

इस लेख में मैं वर्णन करूंगा के साथ कैसे काम करें कॉम पोर्टसी++ में.

समाधान सरल है, लेकिन किसी कारण से एक कार्यशील उदाहरण तुरंत नहीं मिला। सिम के लिए मैं इसे यहाँ सहेजता हूँ।

बेशक, आप QSerial जैसे क्रॉस-प्लेटफ़ॉर्म समाधान का उपयोग कर सकते हैं - क्यूटी में एक पुस्तकालय, मैं शायद करूँगा, लेकिन भविष्य में। अब हम "शुद्ध" विंडोज़ के बारे में बात कर रहे हैं सी++. हम विजुअल स्टूडियो में लिखेंगे। मेरे पास 2010 है, हालांकि यह कोई भूमिका नहीं निभाता है ...

एक नया कंसोल Win32 प्रोजेक्ट बनाएं।

शीर्षलेख फ़ाइलें शामिल करें:

#शामिल करना #शामिल करना नेमस्पेस एसटीडी का उपयोग करना;

हम एक कॉम पोर्ट हैंडलर घोषित करते हैं:

HSerial संभाल;

मैं इसे विश्व स्तर पर करता हूं इसलिए मुझे इसे कार्यों में पास करते समय पॉइंटर्स के बारे में चिंता करने की ज़रूरत नहीं है।

int _tmain(int argc, _TCHAR* argv) (

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

अब पोर्ट नाम के साथ एक स्ट्रिंग घोषित करने का जादू। बात यह है कि यह चार को ही रूपांतरित नहीं कर पा रही है।

LPCTSTR स्पोर्टनाम = L"COM1";

विंडोज़ में सीरियल पोर्ट के साथ काम करना एक फाइल की तरह काम करता है। पहला खोलना लिखने/पढ़ने के लिए कॉम पोर्ट:

HSerial = :: CreateFile (sPortName, GENERIC_READ | GENERIC_WRITE, 0,0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

कार्यक्षमता की जाँच:

अगर(hSerial==INVALID_HANDLE_VALUE) (अगर(GetLastError()==ERROR_FILE_NOT_FOUND) ( cout<< "serial port does not exist.\n"; } cout << "some other error occurred.\n"; }

अब आपको कनेक्शन मापदंडों को कॉन्फ़िगर करने की आवश्यकता है:

DCB dcbSerialParams = (0); dcbSerialParams.DCBlength=sizeof(dcbSerialParams); अगर (!GetCommState(hSerial, &dcbSerialParams)) ( cout<< "getting state error\n"; } dcbSerialParams.BaudRate=CBR_9600; dcbSerialParams.ByteSize=8; dcbSerialParams.StopBits=ONESTOPBIT; dcbSerialParams.Parity=NOPARITY; if(!SetCommState(hSerial, &dcbSerialParams)) { cout << "error setting serial port state\n"; }

एमएसडीएन पर, पहले पैरामीटर प्राप्त करने और फिर उन्हें बदलने की सलाह दी जाती है। हम अभी भी सीख रहे हैं, इसलिए हम अनुरोध के अनुसार करते हैं।

अब हम उस स्ट्रिंग की घोषणा करते हैं जिसे हम पास करेंगे और इसके लिए आवश्यक चर:

चार डेटा = "सी ++ से हैलो"; // स्ट्रिंग पास करने के लिए DWORD dwSize = sizeof (डेटा); // इस स्ट्रिंग का आकार DWORD dwBytesWritten; // यहां वास्तव में स्थानांतरित बाइट्स की संख्या होगी

एक स्ट्रिंग भेज रहा है। मैं आपको याद दिला दूं कि उदाहरण सबसे सरल है, इसलिए मैं कोई विशेष जांच नहीं करता:

बूल iRet = WriteFile (hSerial, डेटा, dwSize, और dwBytesWritten, NULL);

मैंने स्ट्रिंग आकार और नियंत्रित करने के लिए भेजे गए बाइट्स की संख्या प्रदर्शित करने का भी निर्णय लिया:

अदालत<< dwSize << " Bytes in string. " << dwBytesWritten << " Bytes sended. " << endl;

कार्यक्रम के अंत में, हम डेटा पढ़ने का एक अनंत लूप बनाते हैं:

जबकि (1) (रीडकॉम ();) वापसी 0; )

अब पढ़ें समारोह:

Void ReadCOM () (DWORD iSize; char sReceivedChar; जबकि (true) (ReadFile(hSerial, &sReceivedChar, 1, &iSize, 0); // 1 बाइट प्राप्त करें यदि (iSize> 0) // कुछ प्राप्त होने पर प्रिंट करें<< sReceivedChar; } }

यह वास्तव में पूरा उदाहरण है।

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

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

सीरियल पोर्ट के बिना आधुनिक कंप्यूटरों को RS-232 सीरियल डिवाइस के साथ संगतता सुनिश्चित करने के लिए सीरियल कन्वर्टर्स की आवश्यकता हो सकती है। सीरियल पोर्ट अभी भी औद्योगिक स्वचालन प्रणाली, वैज्ञानिक उपकरण, बिक्री के बिंदु प्रणाली और कुछ औद्योगिक और उपभोक्ता उत्पादों जैसे अनुप्रयोगों में उपयोग किए जाते हैं। सर्वर कंप्यूटर सीरियल पोर्ट का उपयोग प्रबंधन या नैदानिक ​​कंसोल के रूप में कर सकते हैं। नेटवर्क उपकरण (जैसे राउटर और स्विच) अक्सर कॉन्फ़िगरेशन के लिए सीरियल कंसोल का उपयोग करते हैं। इन क्षेत्रों में सीरियल पोर्ट का उपयोग जारी है क्योंकि वे सरल, सस्ते हैं, और उनकी कंसोल सुविधाएँ अत्यधिक मानकीकृत और व्यापक हैं।

COM पोर्ट पिनआउट (RS232)

कॉम पोर्ट 2 प्रकार के होते हैं, एक 25-पिन पुराना कनेक्टर और एक नया 9-पिन कनेक्टर जो इसे बदल देता है।

नीचे कनेक्टर्स के साथ एक विशिष्ट मानक 9-पिन RS232 कनेक्टर का आरेख है, इस प्रकार के कनेक्टर को DB9 कनेक्टर भी कहा जाता है।

  1. कैरियर डिटेक्ट (DCD)।
  2. डेटा प्राप्त करें (RXD)।
  3. डेटा ट्रांसमिशन (TXD)।
  4. रिसीवर रेडी टू एक्सचेंज (डीटीआर)।
  5. ग्राउंड (जीएनडी)।
  6. सोर्स रेडी टू एक्सचेंज (डीएसआर)।
  7. भेजने का अनुरोध (आरटीएस)।
  8. ट्रांसफर के लिए तैयार (सीटीएस)।
  9. कॉल सिग्नल (आरआई)।

स्विच के लिए RJ-45 से DB-9 सीरियल पोर्ट एडेप्टर पिन जानकारी

कंसोल पोर्ट एक RS-232 सीरियल इंटरफ़ेस है जो पीसी या लैपटॉप जैसे कंट्रोल डिवाइस से कनेक्ट करने के लिए RJ-45 कनेक्टर का उपयोग करता है। यदि आपके लैपटॉप या पीसी में DB-9 कनेक्टर पिन नहीं है और आप अपने लैपटॉप या पीसी को स्विच से कनेक्ट करना चाहते हैं, तो RJ-45 और DB-9 एडेप्टर के संयोजन का उपयोग करें।

डीबी -9आरजे-45
डेटा प्राप्त करना2 3
डेटा स्थानांतरण3 6
विनिमय करने की इच्छा4 7
धरती5 5
धरती5 4
विनिमय करने की इच्छा6 2
स्थानांतरण अनुरोध7 8
स्थानांतरण के लिए तैयार8 1

तार रंग:

1 काला
2 ब्राउन
3 लाल
4 नारंगी
5 पीला
6 हरा
7 नीला
8 ग्रे (या सफेद)