직렬 포트에 이상한 문제가 있습니다. 우분투 구현 및 재부팅 후 sth가 변경된 것 같습니다.
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-corrightly-after-ubuntu-update?noredirect=1#comment53527004_32844942
도와주세요.
답변1
나는 같은 문제를 경험합니다. 직렬 포트 하드웨어에만 국한되지는 않는 것 같습니다. socat를 사용하여 두 개의 의사 터미널을 만들 수 있습니다.
$ 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
이는 커널 버그일 수 있습니다. 여기를 보아라:https://bugs.launchpad.net/ubuntu/+source/python2.7/+bug/1501240
해결 방법은 kernel 을 사용하는 것 같습니다 3.13.0-63-generic
.
시작하는 동안 Shift 키를 눌러 커널을 일회성 부팅으로 변경할 수 있습니다. 변경 사항을 지속적으로 적용하려면 다음을 편집해야 합니다 /etc/default/grub
.https://askubuntu.com/questions/262965/grub-timeout-set-to-0-cant-access-grub-menu-anymore?rq=1