2016-09-27 5 views
6

मै मैकोज़ पर कोड झटका का उपयोग कर डिवाइस से कनेक्ट कर रहा हूं और 100 बार से यह कोड केवल 1 या दो बार कनेक्शन करेगा और जवाब नहीं देगा (क्योंकि कोई टाइमआउट नहीं है) समय।Pyserial से सीरियल आउटपुट पढ़ना विश्वसनीय रूप से काम नहीं करता

ser = serial.Serial(port="/dev/xyz",timeout = None, baudrate=115200, parity = serial.PARITY_NONE, bytesize = serial.EIGHTBITS, stopbits = serial.STOPBITS_ONE) 

def exitSer(ser): 
    print("Closing") 
    ser.close() 

atexit.register(exitSer, ser) 

if ser.is_open: 
    time.sleep(2) 
    while(1): 
     print(ser.readline().decode("utf-8")) 

आप मुझे बता सकते है कि कैसे fcntl आदि जैसे कार्यक्रमों का उपयोग करने के लिए यदि इस बंदरगाह पूरी तरह से स्वतंत्र और इस्तेमाल करते हैं और कैसे बंदरगाह जबरन मुक्त करने के बाद मुक्त करने के लिए tty बंदरगाह के झंडे सेट करने के लिए के लिए उपलब्ध है खोजने के लिए।

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

+0

आपके द्वारा संदर्भित अन्य एप्लिकेशन में एक अलग बॉड्रेट है और 1 स्टॉप बिट का उपयोग करता है। क्या आप उस कोड को पोस्ट कर सकते हैं जिसका उपयोग आप सीरियल पोर्ट से डेटा पढ़ने के लिए करते हैं? –

+0

बस इस प्रश्न को अद्यतन किया गया। प्रतिक्रिया के लिए धन्यवाद। –

+1

मैं धारावाहिक उपकरणों पर रीडलाइन() का उपयोग करने से बचने की कोशिश करता हूं, क्योंकि जब आप एक नया लाइन वर्ण प्राप्त करते हैं तो यह पहले कुछ लिखता है। तो अगर कुछ और प्राप्त होता है, तो आप इसे नहीं देख पाएंगे। इसके बजाय आप कुछ उपयोग कर सकते हैं जैसे: sys.stdout.write (ser.read (1)) sys.stdout.flush() –

उत्तर

0
def startSerial(tty_id): 
    ser = serial.Serial(port = tty_id, timeout = None) 
    ser.close() 
    ser.open() 
    if ser.isOpen(): 
     print(ser.portstr, ":connection successful.") 
     return ser 
    else: 
     return False 

.open() से पहले ser.close() को कॉल करना। मैंने इसे लगभग 200 बार परीक्षण किया और अब तक मुझे निराश नहीं किया गया है। मैं अब इसे बहुप्रचारित में परीक्षण कर रहा हूं और उम्मीद करता हूं कि यह भी काम करता है।

सभी को धन्यवाद।

संबंधित मुद्दे