シリアル ポートに奇妙な問題が発生しています。Ubuntu の有効化と再起動後に何かが変わったようです。
przem@przem:~/Pulpit/bat/scripts$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> ser = serial.Serial("/dev/ttyUSB0", 57600)
>>> ser.read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)
>>>
デバイスから「 」(空記号) の結果が返されるはずだとわかっていますが、代わりに例外が発生します。
「デバイスは読み取り準備完了を報告しましたが、データを返しませんでした (デバイスが切断されているか、ポートに複数のアクセスがありますか?)」
この質問は私の問題の紹介です:https://stackoverflow.com/questions/32844942/serialport-doenst-work-correctly-after-ubuntu-update?noredirect=1#comment53527004_32844942
私を助けてください。
答え1
私も同じ問題を経験しています。シリアル ポート ハードウェアに限定されているわけではないようです。socat を使用して 2 つの疑似端末を作成できます。
$ socat -d -d pty,raw,echo=0 pty,raw,echo=0
2015/09/30 09:46:18 socat[6296] N PTY is /dev/pts/17
2015/09/30 09:46:18 socat[6296] N PTY is /dev/pts/18
2015/09/30 09:46:18 socat[6296] N starting data transfer loop with FDs [3,3] and [5,5]
cuなどを使用して両方のデバイスに接続できます
cu -l /dev/pts/17 -s 115200
そして
cu -l /dev/pts/18 -s 115200
双方向にデータを送信しても問題ありません。
しかし、Python 2.7で接続すると、あなたが言及したエラーメッセージが表示されて失敗します
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> ser = serial.Serial("/dev/pts/17", 230400, timeout=0.2)
>>> ser.read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 460, in read
raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)
このコードは、昨日 Ubuntu 14.04 のアップデートをインストールする前は機能していました。
何か案は?
答え2
私はこれを推奨しているわけではありませんが、この変更を行った後、これらのエラーは表示されなくなりました。
--- serialposix.py.stock 2015-10-03 06:53:45.241261071 -0700
+++ serialposix.py 2015-10-03 06:55:07.481262475 -0700
@@ -457,7 +457,11 @@
# Disconnected devices, at least on Linux, show the
# behavior that they are always ready to read immediately
# but reading returns nothing.
- raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
+ # retrying the read seems to get me past this error:
+ # [ERROR] Can't read from printer (disconnected?) (SerialException): device reports readiness to read but returned no data (device disconnected?)
+
+ #raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
+ pass
read.extend(buf)
return bytes(read)
答え3
これはカーネルのバグである可能性があります。こちらを参照してください:参考:
回避策としては、カーネルを使用することです3.13.0-63-generic
。
起動時に Shift キーを押すと、カーネルを 1 回限りのブート用に変更できます。変更を永続化するには、以下を編集する必要があります/etc/default/grub
。https://askubuntu.com/questions/262965/grub-timeout-set-to-0-cant-access-grub-menu-anymore?rq=1