में आधा-डुप्लेक्स सीरियल संचार मेरे पास एक अंतर्निहित यूएसबी/सीरियल एडाप्टर वाला एक डिवाइस है (एक प्रोलिफिल पीएल 2303 के रूप में दिखाया गया है)। डिवाइस प्रलेखन इसके साथ संवाद करने के तरीके पर पूर्ण विवरण प्रदान करता है, और नमूना विंडोज ऐप प्रदान करता है। हालांकि, मुझे इसे लिनक्स पर उपयोग करने की ज़रूरत है - आदर्श रूप से पायथन के साथ, लेकिन मैं इसके बारे में बहुत मूल्यवान नहीं हूं।पाइथन
डिवाइस दस्तावेज़ यह डिवाइस बताते हैं कि डिवाइस 9600, 8 एन 1 पर आधे डुप्लेक्स के साथ चलता है। विंडोज ऐप ठीक काम करता है - डिवाइस ठीक काम करता है (इसलिए मुझे पता है कि यह डिवाइस की समस्या नहीं है)। हालांकि, मैं लिनक्स पर पायथन का उपयोग करके इसके साथ संवाद नहीं कर सकता। मैं pySerial का उपयोग कर रहा हूं, और मैंने एक समान (पूर्ण डुप्लेक्स, पीएल 2303) डिवाइस भी कोशिश की है जो ठीक काम करता है।
मैंने xonxoff, rtscts आदि को सेट करने के कई संयोजनों की कोशिश की है। मैंने सेटआरटीएस (ट्रू) और सीटीएस और डीएसआर आदि की जांच करने के लिए आरटीएस टॉगलिंग की भी कोशिश की है - सभी वापसी गलत हो जाती है। मैं pySerial का उपयोग कर डिवाइस को सफलतापूर्वक खोल सकता हूं (मैं गतिविधि प्रकाश चमकती देख सकता हूं - सरल लेकिन प्रभावी परीक्षण) और pySerial शिकायत करता है अगर आप इसे पढ़ने/लिखने के दौरान अनप्लग करते हैं।
कोई फर्क नहीं पड़ता कि मैंने क्या झंडे/रेखाएं सेट की हैं या मैं कौन सा डेटा भेजता हूं, हमेशा एक ही परिणाम प्राप्त करें।
>>> s=serial.Serial()
>>> s.port('/dev/ttyUSB1')
>>> s.open()
>>> s
Serial<id=0x7fe94b533b50, open=True>(port='/dev/ttyUSB1', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=3, xonxoff=0, rtscts=0, dsrdtr=0)
>>> s.write('\2CMD2292\r')
>>> s.inWaiting()
0
>>> s.setRTS(True)
>>> s.getCTS()
False
(several iterations of above with different flags).
लिखने के आदेश में डेटा को अनदेखा करें - यह सिर्फ एक स्थिति जांच आदेश है। इससे कोई फर्क नहीं पड़ता कि वहां क्या होता है, डिवाइस को या तो जवाब या त्रुटि के साथ जवाब देना चाहिए।
मैंने विभिन्न ctsrts झंडे इत्यादि को सेट करने के बीच डिवाइस को बंद करने और फिर से खोलने का भी सहारा लिया है, और रीसेट को मजबूर करने के लिए इसे अनप्लगिंग/दोबारा लगाया है। ऊपर के रूप में यह विंडोज टेस्ट ऐप का उपयोग कर ठीक काम करना जारी रखता है। मैं विंडोज पोर्ट ट्रैफिक को स्नीफ करने के लिए पोर्टमोन इत्यादि का उपयोग नहीं कर सकता क्योंकि यह 64 बिट विन 7 इंस्टॉल है और मेरे पास वर्तमान में XP मशीन बनाने का समय नहीं है।
कोई विचार?
अद्यतन: मैंने उपरोक्त सभी को उसी विंडोज बॉक्स पर पाइथन का उपयोग करके भी कोशिश की है जो डेमो ऐप काम करता है। यह निश्चित रूप से बंदरगाह खोलता है और संचार करता है, लेकिन जो भी लिखा है उसके बावजूद फिर से कोई जानकारी नहीं है।
UPDATE2: ऐसा लगता है कि यह डिवाइस-ड्राइवर से संबंधित हो सकता है। कुछ अतिरिक्त पृष्ठभूमि अनुसंधान से पता चलता है कि कुछ पीएल 2303 चिप्स में अर्ध-डुप्लेक्स का समर्थन करने की कार्यक्षमता है, लेकिन यह लिनक्स ड्राइवरों द्वारा समर्थित नहीं है। विंडोज डेमो ऐप एक समर्पित डिवाइस ड्राइवर के साथ आता है और ऐप डिफ़ॉल्ट विंडोज ड्राइवरों का उपयोग कर क्लीन टेस्ट मशीन पर काम नहीं करता है। इससे मुझे लगता है कि जब मैं पाइथन के माध्यम से इसे सफलतापूर्वक कनेक्ट कर सकता हूं, तो मैं डुप्लेक्स कॉम (जैसे एसटीएक्स/ईटीएक्स मार्ग में भी) को नियंत्रित नहीं कर सकता हूं और इसलिए यह एक निराशाजनक मामला हो सकता है। श्वास।
अद्यतन 3: नीचे दी गई टिप्पणियों के लिए धन्यवाद। हालांकि, मुझे इस दौर में कोई रास्ता नहीं मिला। मैंने एक यूएसबी प्रोटोकॉल विश्लेषक की कोशिश की, और मैंने ड्राइवर को अलग करने की कोशिश की लेकिन यह सिर्फ समय लेने वाला बन गया, इसलिए अंत में मैंने डिवाइस को अलग कर लिया और कुछ टिंकरिंग के बाद मैं मौजूदा पीएल 2303 भाग के साथ मौजूदा यूएसबी-सीरियल एडाप्टर को प्रतिस्थापित करने में कामयाब रहा - डिवाइस की तरफ, यह सिर्फ एक बुनियादी 2-तार सीरियल इंटरफेस था, इसलिए इससे कोई परवाह नहीं था कि इससे क्या बात हो रही थी। मैं इस सवाल को बंद नहीं कर सकता, इसलिए मैं इसे छोड़ दूंगा।
आप एक सीरियल कॉम कार्यक्रम, minicom का उपयोग कर उदाहरण आपके Linux बॉक्स पर डिवाइस के लिए बात करने के लिए कोशिश की है? आपको पाइथन कार्यान्वयन में डाइविंग से पहले लिनक्स पर डिवाइस को सत्यापित करने की अनुमति देनी चाहिए। – sizzzzlerz
हां - मैंने उससे बात करने के लिए मिनीकॉम का उपयोग करने का प्रयास किया है, लेकिन मुझे कोई प्रतिक्रिया नहीं मिली है - हालांकि मुझे मिनीकॉम में आरटीएस टॉगलिंग करने के लिए मैन्युअल रूप से कोई रास्ता नहीं मिल रहा है, इसलिए मैंने पायथन की कोशिश की। मुझे पता है कि pySerial डिवाइस से कनेक्ट हो रहा है और डेटा भेज रहा है (ऊपर रेफरी फ्लैश लाइट देखें :))। –
आपको ड्राइवर कहाँ मिला? क्या यह आपके डिस्ट्रो का हिस्सा है या आपने इसे हाथ से बनाया है? क्या तुम जड़ हो – tMC