2010-07-06 130 views
2

在超級終端中,我可以連接到名爲「X64-CL_iPro_1_Serial_0」的串行端口,我可以在該端口上向相機發送/接收ASCII文本。然而,當我嘗試連接到與pySerial相同的端口,它拋出一個異常:使用pySerial連接到非COM端口

SerialException: could not open port X64-CL_iPro_1_Serial_0: [Error 2] The system cannot find the file specified.

我不明白爲什麼超級終端可以檢測端口,並與其通信,但是Python不能。我從顯示串行端口列表的pySerial網站下載了this script,它提出的唯一端口是COM1和COM2,我都無法連接到這兩個端口。

我的代碼是非常簡單的,看起來像這樣:

import serial 
port = "X64-CL_iPro_1_Serial_0" 
ser = serial.Serial(port) 

上午我做錯了什麼?有沒有辦法解決這個問題?提前致謝。

編輯: 還應該注意,該端口不會顯示在設備管理器中,COM1或COM2也不會顯示。

+0

什麼操作系統,這是? (增加:哦,可能是Windows,因爲你有COM1和COM2,對...) – detly 2010-07-08 11:53:31

回答

1

問題在於你鏈接的枚舉代碼。這是錯誤的兩個方面:

  1. 它使用一個固定的GUID_CLASS_COMPORT來枚舉。它應該通過SetupDiClassGuidsFromName來詢問GUID,傳遞「Ports」作爲它要求名稱的類的描述。
  2. 該代碼堅持要求友好的港口名稱。但是如果唯一的目標是打開設備(而不是顯示給用戶),它應該直接訪問DevicePath元素,這是一個看起來很奇怪但是完全有效的端口名稱,可以傳遞給pySerial。友好的名字甚至可能完全缺失。
0

一邊

我不清楚問題是關於非串行端口,通過pyserial使用,或串口,是不是在枚舉COMX端口。

這可能有點OT或太硬代碼供您使用,但在這裏不用第一,使用一些其他文件中pyserial對象:

foo = serial.Serial() 
peer = serial.Serial() 
foo.fd, peer.fd = posix.openpty() 
try: foo._isOpen = peer._isOpen = True # depending on pyserial version 
except: pass 
foo._reconfigurePort() 
peer.setTimeout(timeout=0.1) 
peer._reconfigurePort() 

關於第二,記得以後端口COM9使用奇怪的窗口符號\\.\COM10,也許這就是超級終端爲你做的。 pyserial不這樣做,那麼也許你需要打開的端口是這樣的:

s = serial.Serial("\\\\.\\X64-CL_iPro_1_Serial_0") # also remember to escape backslash