python pyserial الكتابة أكثر من مرة إلى المنفذ التسلسلي

أنا أكتب والقراءة من نفس المنفذ التسلسلي. هنا ما هي المشكلة:

عندما أكتب إلى المنفذ التسلسلي واحدا تلو الآخر ، كما هو الحال في التعليمات البرمجية أدناه:

import serial
import array


rec = serial.Serial()
trans = serial.Serial()

rec.port = "/dev/ttyUSB0"
rec.baudrate = 9600
rec.timeout = 0.5
rec.open()

trans.port = "/dev/ttyUSB0"
trans.baudrate = 9600
trans.timeout = 0.5
trans.open()


if trans.isOpen():
   trans.write("\xFE\x1D\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE2")    
   trans.write("\xFE\x1D\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE3")

while rec.isOpen():

response = rec.readline()


etc. etc. etc

طالما أنه أثناء تشغيل حلقة ، أظل أقرأ فقط أول سلسلة مرسلة. كما أنني حاولت إرسال البيانات بعد حلقة while: (لم أحذف العبارة if)

while rec.isOpen():
    trans.write("\x00\x00")
    response = rec.readline()

ما قرأت من المنفذ التسلسلي لا يزال:
   "\ xFE \ x1D \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XFF \ XE2 "

لا أستطيع إرسال أي بيانات أخرى غير الأولى. لماذا يحدث هذا؟ ماذا علي أن أفعل؟

ملاحظة: أيضًا أثناء الحلقة التي حاولت قراءتها مرتين:     response = rec.readline ()     response = rec.readline ()

هذه المرة ، عندما أطبع الصفيف الذي قرأته ، فإنه يطبع [] مما يعني أنني لا أستطيع قراءة أي شيء. مع تحياتي

تحرير: الآن استخدمت اثنين من منافذ USB مختلفة ttyUSB0 و ttyUSB1 للتحقق مما إذا كانت مشكلتي تتعلق بهذا الوضع. ولكن يبدو أنه لا يوجد شيء خاطئ في الكتابة والقراءة من نفس المنفذ.

1

2 إجابة

يمكن أن تكون المشكلة عبارة عن خطأ في تكوين المنفذ. يجب عليك تعيين القيم الصحيحة

ser = serial.Serial(
    port='/dev/ttyUSB0',
    baudrate=9600,
    parity=???,
    stopbits=???,
    bytesize=???)
0
وأضاف
لسوء الحظ ، لم يحل مشكلتي.
وأضاف المؤلف Amadeus Bachmann, مصدر

لم أرَ خطوطًا جديدة ، لذا يجب أن تحاول استخدام rec.read (bytes) أو إنهاء السطور باستخدام \ 0d \ 0a أو شيء ما.

See http://pyserial.sourceforge.net/shortintro.html#readline

0
وأضاف
هم ، أنا قرأت القراءة (بايت) لم يحل مشكلتي ولكن لم يحاول اقتراحك الثاني. قد يكون الحل للمشكلة التي أوضحت أنها ليست حلاً دائمًا بالنسبة لي. لأنه عند الانتهاء من تنفيذ التعليمات البرمجية الخاصة بي ، لن أقوم بإرسال البيانات إلى المنفذ باستخدام هذا الرمز. سيكون لدي جهاز استشعار يرسل البيانات وسأقرأه ولا يرسل أي نوع من بيانات EOL. أي اقتراحات أخرى؟
وأضاف المؤلف Amadeus Bachmann, مصدر
كما نسيت أن أذكر أن طول بيانات المستشعر الخاص بي لن يكون حلًا.
وأضاف المؤلف Amadeus Bachmann, مصدر
ربما سيكون لديك لإدارة بايت الإدخال عن طريق بايت ...
وأضاف المؤلف f p, مصدر