2015-10-05 29 views
0

我有一對應用程序通過串行端口發送文本(僅在一個方向)進行通信。他們一直在努力工作。上週,閱讀側在我的機器上停止工作,並且每當我呼叫我的serial.Serial對象的readline()方法時,就會產生SerialException相同的代碼在另一臺機器上正常工作!我能想到的唯一可能導致問題的是我在發生這種事情的前一晚安裝了一堆系統更新(任何想法如何查看上的歷史記錄?)。我正在使用Ubuntu和Python 2.7.6(見下文),並且據我所知,我在兩臺機器上都安裝了相同的python軟件包。serial.Serial.readline()引發SerialException,但相同的代碼在一個星期前工作

我已經寫了兩個小示例應用程序,以嘗試解決,而我得到的讀出側以下錯誤:

File "./reader.py", line 16, in <module> 
    s = port.readline() 
File "/usr/local/lib/python2.7/dist-packages/serial/serialposix.py", line 475, in read 
    raise SerialException('device reports readiness to read but returned no data (device disconnected or multiple access on port?)') 

它似乎並沒有不管我用一個「真實」的端口

socat -d -d pty,raw,echo=0 pty,raw,echo=0 

下面是樣品「writer.py」我的故障排除創建:

或「虛擬」端口,所以這可以通過使用下面的命令產生兩個虛擬端口再現

這很好 - 我可以使用諸如「串口終端」之類的應用程序讀取通過端口進入的文本。

這裏是樣本「reader.py」的作品找到另一臺機器上,但是,我的立即失敗:

#!/usr/bin/env python 
from __future__ import print_function 
import serial 

print('Opening port') 
port = serial.Serial(port='/dev/pts/10', 
         baudrate=115200, 
         bytesize=serial.EIGHTBITS, 
         parity=serial.PARITY_NONE, 
         stopbits=serial.STOPBITS_ONE, 
         timeout=0.25) 
while True: 
    s = port.readline() 
    if s: 
     print(s) 

有一次,我創建了socat命令虛擬端口並運行「reader.py」我總是立即得到例外。任何想法可能會改變我的機器上會導致這種失敗?

系統信息:

~/temp$ uname -a 
Linux alonghi-ubu 3.13.0-65-generiC#105-Ubuntu SMP Mon Sep 21 18:50:58 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 
~/temp$ python --version 
Python 2.7.6 
+0

串行端口!=序列化。 – EJP

+0

好的...有什麼有用的想法可能會導致這種情況或如何排除故障或解決問題?我的Ubuntu系統發生了一些變化,但我不知道如何弄清楚什麼。 – aldo

回答

1

的Ubuntu 14.04 3.13.0.65內核中斷蟒蛇串行通信。嘗試將內核降級到3.13.0-63,並且串行通信應該像以前一樣工作

+0

謝謝! ...以下是詳細信息:https://bugs.launchpad.net/ubuntu/+source/linux-lts-trusty/+bug/1501345 – aldo

相關問題